All Products
Search
Document Center

Alibaba Cloud Service Mesh:Ekspor data tracing ASM ke sistem yang dikelola sendiri

Last Updated:Sep 17, 2026

Jika instans Service Mesh (ASM) Anda lebih lama dari v1.18.0.124, Anda hanya dapat mengekspor data tracing ke sistem yang dikelola sendiri yang kompatibel dengan Zipkin. Jika instans ASM Anda v1.18.0.124 atau lebih baru, Anda hanya dapat mengekspor data tracing ke Managed Service for OpenTelemetry. Topik ini menjelaskan cara mengekspor data tracing ASM ke sistem yang dikelola sendiri yang kompatibel dengan Zipkin atau Managed Service for OpenTelemetry.

Prasyarat

  • Sistem yang dikelola sendiri yang kompatibel dengan Zipkin telah dibuat dan mendengarkan pada port 9411 server Zipkin. Jika Anda menggunakan Jaeger, collector Zipkin harus diterapkan.

  • Sistem yang dikelola sendiri diterapkan di kluster pada bidang data.

  • Instans ASM telah dibuat, dan kluster Kubernetes telah ditambahkan ke instans ASM tersebut. Untuk informasi selengkapnya, lihat Tambahkan kluster ke instans ASM.

  • Gerbang masuk telah dibuat di instans ASM. Untuk informasi selengkapnya, lihat Buat gerbang masuk.

Prosedur

Lakukan operasi berdasarkan versi instans ASM Anda.

Untuk instans ASM versi v1.18.0.124 atau lebih baru

Langkah 1: Terapkan Zipkin

  1. Jalankan perintah berikut untuk membuat namespace bernama zipkin guna menerapkan Zipkin:

    kubectl create namespace zipkin
  2. Jalankan perintah berikut untuk menginstal Zipkin menggunakan Helm:

    helm install --namespace zipkin my-zipkin carlosjgp/zipkin --version 0.2.0
  3. Jalankan perintah berikut untuk memeriksa apakah Zipkin berjalan dengan baik:

    kubectl -n zipkin get pods

    Output yang diharapkan:

    NAME                                   READY   STATUS    RESTARTS   AGE
    my-zipkin-collector-79c6dc9cd7-jmswm   1/1     Running   0          29m
    my-zipkin-ui-64c97b4d6c-f742j          1/1     Running   0          29m

Langkah 2: Terapkan Operator OpenTelemetry

  1. Di lingkungan kubeconfig untuk kluster ACK Anda, jalankan perintah berikut untuk membuat namespace opentelemetry-operator-system:

    kubectl create namespace opentelemetry-operator-system
  2. Jalankan perintah berikut untuk menginstal Operator OpenTelemetry di namespace opentelemetry-operator-system menggunakan Helm:

    helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
    helm install --namespace=opentelemetry-operator-system opentelemetry-operator open-telemetry/opentelemetry-operator \
      --set "manager.collectorImage.repository=otel/opentelemetry-collector-k8s" \
      --set admissionWebhooks.certManager.enabled=false \
      --set admissionWebhooks.autoGenerateCert.enabled=true
  3. Jalankan perintah berikut untuk memeriksa apakah Operator OpenTelemetry berjalan dengan baik:

    kubectl get pod -n opentelemetry-operator-system

    Output yang diharapkan:

    NAME                                      READY   STATUS    RESTARTS   AGE
    opentelemetry-operator-854fb558b5-pvllj   2/2     Running   0          1m

    Status Running menunjukkan bahwa Operator OpenTelemetry sedang berjalan.

Langkah 3: Buat Collector OpenTelemetry

  1. Buat file collector.yaml yang berisi konten berikut dalam blok kode.

    Ganti ${ENDPOINT} dalam file YAML dengan titik akhir virtual private cloud (VPC) yang mendukung protokol gRPC. Ganti ${TOKEN} dengan Token otentikasi. Untuk informasi selengkapnya tentang cara memperoleh titik akhir yang didukung oleh Managed Service for OpenTelemetry dan token otentikasi, lihat Hubungkan ke Managed Service for OpenTelemetry dan autentikasi klien.

    Tampilkan file collector.yaml

    apiVersion: opentelemetry.io/v1alpha1
    kind: OpenTelemetryCollector
    metadata:
      labels:
        app.kubernetes.io/managed-by: opentelemetry-operator
      name: default
      namespace: opentelemetry-operator-system
      annotations:
        sidecar.istio.io/inject: "false"
    spec:
      config: |
        extensions:
          memory_ballast:
            size_mib: 512
          zpages:
            endpoint: 0.0.0.0:55679
        receivers:
          otlp:
            protocols:
              grpc:
                endpoint: "0.0.0.0:4317"
        exporters:
          debug:
          zipkin:
          	endpoint: http://my-zipkin-collector.zipkin.svc.cluster.local:9411/api/v2/spans
        service:
          pipelines:
            traces:
              receivers: [otlp]
              processors: []
              exporters: [zipkin, debug]
      ingress:
        route: {}
      managementState: managed
      mode: deployment
      observability:
        metrics: {}
      podDisruptionBudget:
        maxUnavailable: 1
      replicas: 1
      resources: {}
      targetAllocator:
        prometheusCR:
          scrapeInterval: 30s
        resources: {}
      upgradeStrategy: automatic
  2. Gunakan kubectl untuk terhubung ke kluster Container Service for Kubernetes (ACK) berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk menerapkan Collector OpenTelemetry di kluster:

    kubectl apply -f collector.yaml
  3. Jalankan perintah berikut untuk memeriksa apakah Collector OpenTelemetry telah dimulai:

    kubectl get pod -n opentelemetry-operator-system

    Output yang diharapkan:

    NAME                                      READY   STATUS    RESTARTS   AGE
    opentelemetry-operator-854fb558b5-pvllj   2/2     Running   0          3m
    default-collector-5cbb4497f4-2hjqv        1/1     Running   0          30s

    Output tersebut menunjukkan bahwa Collector OpenTelemetry telah dimulai secara normal.

  4. Jalankan perintah berikut untuk memeriksa apakah layanan telah dibuat untuk Collector OpenTelemetry:

    kubectl get svc -n opentelemetry-operator-system

    Output yang diharapkan:

    opentelemetry-operator           ClusterIP   172.16.138.165   <none>        8443/TCP,8080/TCP   3m
    opentelemetry-operator-webhook   ClusterIP   172.16.127.0     <none>        443/TCP             3m
    default-collector              ClusterIP   172.16.145.93    <none>        4317/TCP   30s
    default-collector-headless     ClusterIP   None             <none>        4317/TCP   30s
    default-collector-monitoring   ClusterIP   172.16.136.5     <none>        8888/TCP   30s

    Output tersebut menunjukkan bahwa layanan telah dibuat untuk Collector OpenTelemetry.

Langkah 4: Terapkan aplikasi uji coba

  1. Terapkan aplikasi Bookinfo contoh.

    1. Buat file bookinfo.yaml dengan konten berikut.

      Perluas untuk melihat konten YAML

      apiVersion: v1
      kind: Service
      metadata:
        name: details
        labels:
          app: details
          service: details
      spec:
        ports:
        - port: 9080
          name: http
        selector:
          app: details
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: bookinfo-details
        labels:
          account: details
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: details-v1
        labels:
          app: details
          version: v1
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: details
            version: v1
        template:
          metadata:
            labels:
              app: details
              version: v1
          spec:
            serviceAccountName: bookinfo-details
            containers:
            - name: details
              image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-details-v1:1.20.1
              imagePullPolicy: IfNotPresent
              ports:
              - containerPort: 9080
      ---
      ##################################################################################################
      # Layanan Ratings
      ##################################################################################################
      apiVersion: v1
      kind: Service
      metadata:
        name: ratings
        labels:
          app: ratings
          service: ratings
      spec:
        ports:
        - port: 9080
          name: http
        selector:
          app: ratings
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: bookinfo-ratings
        labels:
          account: ratings
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: ratings-v1
        labels:
          app: ratings
          version: v1
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: ratings
            version: v1
        template:
          metadata:
            labels:
              app: ratings
              version: v1
          spec:
            serviceAccountName: bookinfo-ratings
            containers:
            - name: ratings
              image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-ratings-v1:1.20.1
              imagePullPolicy: IfNotPresent
              ports:
              - containerPort: 9080
      ---
      ##################################################################################################
      # Layanan Reviews
      ##################################################################################################
      apiVersion: v1
      kind: Service
      metadata:
        name: reviews
        labels:
          app: reviews
          service: reviews
      spec:
        ports:
        - port: 9080
          name: http
        selector:
          app: reviews
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: bookinfo-reviews
        labels:
          account: reviews
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: reviews-v1
        labels:
          app: reviews
          version: v1
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: reviews
            version: v1
        template:
          metadata:
            labels:
              app: reviews
              version: v1
          spec:
            serviceAccountName: bookinfo-reviews
            containers:
            - name: reviews
              image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v1:1.20.1
              imagePullPolicy: IfNotPresent
              env:
              - name: LOG_DIR
                value: "/tmp/logs"
              ports:
              - containerPort: 9080
              volumeMounts:
              - name: tmp
                mountPath: /tmp
              - name: wlp-output
                mountPath: /opt/ibm/wlp/output
            volumes:
            - name: wlp-output
              emptyDir: {}
            - name: tmp
              emptyDir: {}
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: reviews-v2
        labels:
          app: reviews
          version: v2
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: reviews
            version: v2
        template:
          metadata:
            labels:
              app: reviews
              version: v2
          spec:
            serviceAccountName: bookinfo-reviews
            containers:
            - name: reviews
              image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v2:1.20.1
              imagePullPolicy: IfNotPresent
              env:
              - name: LOG_DIR
                value: "/tmp/logs"
              ports:
              - containerPort: 9080
              volumeMounts:
              - name: tmp
                mountPath: /tmp
              - name: wlp-output
                mountPath: /opt/ibm/wlp/output
            volumes:
            - name: wlp-output
              emptyDir: {}
            - name: tmp
              emptyDir: {}
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: reviews-v3
        labels:
          app: reviews
          version: v3
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: reviews
            version: v3
        template:
          metadata:
            labels:
              app: reviews
              version: v3
          spec:
            serviceAccountName: bookinfo-reviews
            containers:
            - name: reviews
              image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-reviews-v3:1.20.1
              imagePullPolicy: IfNotPresent
              env:
              - name: LOG_DIR
                value: "/tmp/logs"
              ports:
              - containerPort: 9080
              volumeMounts:
              - name: tmp
                mountPath: /tmp
              - name: wlp-output
                mountPath: /opt/ibm/wlp/output
            volumes:
            - name: wlp-output
              emptyDir: {}
            - name: tmp
              emptyDir: {}
      ---
      ##################################################################################################
      # Layanan Productpage
      ##################################################################################################
      apiVersion: v1
      kind: Service
      metadata:
        name: productpage
        labels:
          app: productpage
          service: productpage
      spec:
        ports:
        - port: 9080
          name: http
        selector:
          app: productpage
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: bookinfo-productpage
        labels:
          account: productpage
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: productpage-v1
        labels:
          app: productpage
          version: v1
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: productpage
            version: v1
        template:
          metadata:
            annotations:
              prometheus.io/scrape: "true"
              prometheus.io/port: "9080"
              prometheus.io/path: "/metrics"
            labels:
              app: productpage
              version: v1
          spec:
            serviceAccountName: bookinfo-productpage
            containers:
            - name: productpage
              image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/examples-bookinfo-productpage-v1:1.20.1
              imagePullPolicy: IfNotPresent
              ports:
              - containerPort: 9080
              volumeMounts:
              - name: tmp
                mountPath: /tmp
            volumes:
            - name: tmp
              emptyDir: {}
      ---
    2. Terapkan aplikasi Bookinfo ke kluster bidang data.

      kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f bookinfo.yaml
  2. Terapkan aplikasi sleep.

    1. Buat file bernama sleep.yaml dengan konten berikut.

      Sleep.yaml

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: sleep
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: sleep
        labels:
          app: sleep
          service: sleep
      spec:
        ports:
        - port: 80
          name: http
        selector:
          app: sleep
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: sleep
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: sleep
        template:
          metadata:
            labels:
              app: sleep
          spec:
            terminationGracePeriodSeconds: 0
            serviceAccountName: sleep
            containers:
            - name: sleep
              image: registry.cn-hangzhou.aliyuncs.com/acs/curl:8.1.2
              command: ["/bin/sleep", "infinity"]
              imagePullPolicy: IfNotPresent
              volumeMounts:
              - mountPath: /etc/sleep/tls
                name: secret-volume
            volumes:
            - name: secret-volume
              secret:
                secretName: sleep-secret
                optional: true
      ---
    2. Terapkan aplikasi sleep.

      kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f sleep.yaml

Langkah 5: Akses aplikasi productpage dan lihat data tracing

  1. Jalankan perintah berikut untuk mengakses aplikasi productpage:

    kubectl exec -it deploy/sleep -c sleep -- curl  productpage:9080/productpage?u=normal
  2. Setelah akses berhasil, lihat log Collector OpenTelemetry dan output yang dicetak oleh exporter debug.

    2023-11-20T08:44:27.531Z	info	TracesExporter	{"kind": "exporter", "data_type": "traces", "name": "debug", "resource spans": 1, "spans": 3}

Langkah 6: Konfigurasikan gerbang ASM dan lihat data tracing di layanan Zipkin

  1. Buat gateway Istio.

    1. Gunakan konten berikut untuk membuat file ingressgateway.yaml:

      Perluas untuk melihat file ingressgateway.yaml

      apiVersion: networking.istio.io/v1beta1
      kind: Gateway
      metadata:
        name: ingressgateway
        namespace: istio-system
      spec:
        selector:
          istio: ingressgateway
        servers:
          - hosts:
              - '*'
            port:
              name: http
              number: 80
              protocol: HTTP
      ---
      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: ingressgateway
        namespace: istio-system
      spec:
        gateways:
          - ingressgateway
        hosts:
          - '*'
        http:
          - route:
              - destination:
                  host: my-zipkin-collector.zipkin.svc.cluster.local
                  port:
                    number: 9411
      
    2. Gunakan kubectl untuk terhubung ke instans ASM berdasarkan informasi dalam file kubeconfig. Kemudian, jalankan perintah berikut untuk mengaktifkan gerbang ASM agar mendengarkan pada port 80 dan mengonfigurasi rute ke layanan Zipkin:

      kubectl apply -f ingressgateway.yaml
  2. Akses layanan Zipkin menggunakan alamat IP gerbang ASM dan lihat data tracing.

    image.png

Untuk instans ASM versi lebih lama dari v1.18.0.124

Langkah 1: Aktifkan fitur tracing untuk instans ASM

  • Jika versi instans ASM lebih lama dari v1.17.2.28, Anda dapat mengaktifkan fitur tracing dengan melakukan operasi berikut: Masuk ke Konsol ASM. Di halaman Base Information instans ASM, klik Settings. Di halaman yang muncul, pilih Enable Tracing Analysis, konfigurasikan parameter terkait, lalu klik OK.

  • Jika versi instans ASM v1.17.2.28 atau lebih baru, Anda dapat mengaktifkan fitur tracing dengan merujuk ke bagian "Deskripsi Pengaturan Analisis Tracing" dalam Konfigurasikan Pengaturan Observabilitas.

Langkah 2: Terapkan Zipkin di kluster Kubernetes pada bidang data

  1. Gunakan konten berikut untuk membuat file zipkin-server.yaml:

    Perluas untuk melihat file zipkin-server.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: zipkin-server
      namespace: istio-system
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: zipkin-server
          component: zipkin
      template:
       metadata:
        labels:
          app: zipkin-server
          component: zipkin
       spec:
        containers:
         - name: zipkin-server
           image: openzipkin/zipkin
           imagePullPolicy: IfNotPresent
           readinessProbe:
                httpGet:
                  path: /health
                  port: 9411
                initialDelaySeconds: 5
                periodSeconds: 5
    Catatan

    Jika Anda menggunakan file YAML kustom untuk menerapkan Zipkin, pastikan Zipkin diterapkan di namespace istio-system.

  2. Jalankan perintah berikut untuk menerapkan Zipkin di kluster Kubernetes pada bidang data:

    kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f zipkin-server.yaml
    Catatan

    Jika Anda menggunakan kode contoh dalam topik ini, ganti ${DATA_PLANE_KUBECONFIG} dalam perintah dengan path ke file kubeconfig kluster Kubernetes pada bidang data. Selain itu, ganti ${ASM_KUBECONFIG} dengan path ke file kubeconfig instans ASM.

  3. Setelah penerapan selesai, verifikasi bahwa Pod tempat server Zipkin diterapkan dapat dimulai dengan baik.

Langkah 3: Buat layanan untuk mengekspos server Zipkin

Buat layanan bernama zipkin di namespace istio-system untuk menerima data tracing ASM.

  • Untuk mengekspos server Zipkin ke Internet, gunakan file zipkin-svc-expose-public.yaml.

  • Jika tidak, gunakan file zipkin-svc.yaml.

Dalam contoh ini, file zipkin-svc-expose-public.yaml digunakan untuk mengekspos server Zipkin ke Internet agar Anda dapat melihat data tracing dengan mudah.

Catatan

Nama layanan yang dibuat harus zipkin.

  1. Gunakan kode berikut sesuai kebutuhan bisnis Anda untuk membuat file YAML.

    • Untuk mengekspos server Zipkin ke Internet, gunakan file zipkin-svc-expose-public.yaml dengan konten berikut:

      Perluas untuk melihat file zipkin-svc-expose-public.yaml

      apiVersion: v1
      kind: Service
      metadata:
        labels:
          app: tracing
          component: zipkin
        name: zipkin
        namespace: istio-system
      spec:
        ports:
        - name: zipkin
          port: 9411
          protocol: TCP
          targetPort: 9411
        selector:
          app: zipkin-server
          component: zipkin
        type: LoadBalancer
    • Jika Anda tidak perlu mengekspos server Zipkin ke Internet, gunakan file zipkin-svc.yaml dengan konten berikut:

      Perluas untuk melihat file zipkin-svc.yaml

      apiVersion: v1
      kind: Service
      metadata:
        labels:
          app: tracing
          component: zipkin
        name: zipkin
        namespace: istio-system
      spec:
        ports:
        - name: zipkin
          port: 9411
          protocol: TCP
          targetPort: 9411
        selector:
          app: zipkin-server
          component: zipkin
        type: ClusterIP
    Catatan

    Jika Anda menggunakan file YAML kustom untuk menerapkan layanan zipkin, pastikan layanan ini diterapkan di namespace istio-system.

  2. Jalankan perintah berikut untuk menerapkan layanan zipkin di kluster Kubernetes pada bidang data:

    # Terapkan layanan zipkin untuk mengekspos server Zipkin ke jaringan internal.
    kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f zipkin-svc.yaml
    # Terapkan layanan zipkin untuk mengekspos server Zipkin ke Internet.
    kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f zipkin-svc-expose-public.yaml

Langkah 4: Terapkan aplikasi Bookinfo

  1. Jalankan perintah berikut untuk menerapkan aplikasi Bookinfo ke kluster Kubernetes pada bidang data:

    kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} apply -f bookinfo.yaml

    Perluas untuk melihat file bookinfo.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: details
      labels:
        app: details
        service: details
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: details
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-details
      labels:
        account: details
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: details-v1
      labels:
        app: details
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: details
          version: v1
      template:
        metadata:
          labels:
            app: details
            version: v1
        spec:
          serviceAccountName: bookinfo-details
          containers:
          - name: details
            image: docker.io/istio/examples-bookinfo-details-v1:1.16.2
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    ##################################################################################################
    # Layanan Ratings
    ##################################################################################################
    apiVersion: v1
    kind: Service
    metadata:
      name: ratings
      labels:
        app: ratings
        service: ratings
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: ratings
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-ratings
      labels:
        account: ratings
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ratings-v1
      labels:
        app: ratings
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ratings
          version: v1
      template:
        metadata:
          labels:
            app: ratings
            version: v1
        spec:
          serviceAccountName: bookinfo-ratings
          containers:
          - name: ratings
            image: docker.io/istio/examples-bookinfo-ratings-v1:1.16.2
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
    ---
    ##################################################################################################
    # Layanan Reviews
    ##################################################################################################
    apiVersion: v1
    kind: Service
    metadata:
      name: reviews
      labels:
        app: reviews
        service: reviews
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: reviews
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-reviews
      labels:
        account: reviews
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v1
      labels:
        app: reviews
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v1
      template:
        metadata:
          labels:
            app: reviews
            version: v1
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: docker.io/istio/examples-bookinfo-reviews-v1:1.16.2
            imagePullPolicy: IfNotPresent
            env:
            - name: LOG_DIR
              value: "/tmp/logs"
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
            - name: wlp-output
              mountPath: /opt/ibm/wlp/output
          volumes:
          - name: wlp-output
            emptyDir: {}
          - name: tmp
            emptyDir: {}
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v2
      labels:
        app: reviews
        version: v2
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v2
      template:
        metadata:
          labels:
            app: reviews
            version: v2
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: docker.io/istio/examples-bookinfo-reviews-v2:1.16.2
            imagePullPolicy: IfNotPresent
            env:
            - name: LOG_DIR
              value: "/tmp/logs"
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
            - name: wlp-output
              mountPath: /opt/ibm/wlp/output
          volumes:
          - name: wlp-output
            emptyDir: {}
          - name: tmp
            emptyDir: {}
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: reviews-v3
      labels:
        app: reviews
        version: v3
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: reviews
          version: v3
      template:
        metadata:
          labels:
            app: reviews
            version: v3
        spec:
          serviceAccountName: bookinfo-reviews
          containers:
          - name: reviews
            image: docker.io/istio/examples-bookinfo-reviews-v3:1.16.2
            imagePullPolicy: IfNotPresent
            env:
            - name: LOG_DIR
              value: "/tmp/logs"
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
            - name: wlp-output
              mountPath: /opt/ibm/wlp/output
          volumes:
          - name: wlp-output
            emptyDir: {}
          - name: tmp
            emptyDir: {}
    ---
    ##################################################################################################
    # Layanan Productpage
    ##################################################################################################
    apiVersion: v1
    kind: Service
    metadata:
      name: productpage
      labels:
        app: productpage
        service: productpage
    spec:
      ports:
      - port: 9080
        name: http
      selector:
        app: productpage
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: bookinfo-productpage
      labels:
        account: productpage
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: productpage-v1
      labels:
        app: productpage
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: productpage
          version: v1
      template:
        metadata:
          labels:
            app: productpage
            version: v1
        spec:
          serviceAccountName: bookinfo-productpage
          containers:
          - name: productpage
            image: docker.io/istio/examples-bookinfo-productpage-v1:1.16.2
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 9080
            volumeMounts:
            - name: tmp
              mountPath: /tmp
          volumes:
          - name: tmp
            emptyDir: {}
    ---
  2. Jalankan perintah berikut pada klien kubectl untuk menerapkan layanan virtual untuk Bookinfo:

    kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f virtual-service-all-v1.yaml

    Perluas untuk melihat file virtual-service-all-v1.yaml

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: productpage
    spec:
      hosts:
      - productpage
      http:
      - route:
        - destination:
            host: productpage
            subset: v1
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
      - reviews
      http:
      - route:
        - destination:
            host: reviews
            subset: v1
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: ratings
    spec:
      hosts:
      - ratings
      http:
      - route:
        - destination:
            host: ratings
            subset: v1
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: details
    spec:
      hosts:
      - details
      http:
      - route:
        - destination:
            host: details
            subset: v1
    ---
  3. Jalankan perintah berikut pada klien kubectl untuk menerapkan aturan tujuan untuk Bookinfo:

    kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f destination-rule-all.yaml

    Perluas untuk melihat file destination-rule-all.yaml

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: productpage
    spec:
      host: productpage
      subsets:
      - name: v1
        labels:
          version: v1
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: reviews
    spec:
      host: reviews
      subsets:
      - name: v1
        labels:
          version: v1
      - name: v2
        labels:
          version: v2
      - name: v3
        labels:
          version: v3
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: ratings
    spec:
      host: ratings
      subsets:
      - name: v1
        labels:
          version: v1
      - name: v2
        labels:
          version: v2
      - name: v2-mysql
        labels:
          version: v2-mysql
      - name: v2-mysql-vm
        labels:
          version: v2-mysql-vm
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: details
    spec:
      host: details
      subsets:
      - name: v1
        labels:
          version: v1
      - name: v2
        labels:
          version: v2
    ---
  4. Jalankan perintah berikut pada klien kubectl untuk menerapkan gerbang untuk Bookinfo:

    kubectl --kubeconfig=${ASM_KUBECONFIG} apply -f bookinfo-gateway.yaml

    Perluas untuk melihat file bookinfo-gateway.yaml

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: bookinfo-gateway
    spec:
      selector:
        istio: ingressgateway # gunakan controller default istio
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "*"
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: bookinfo
    spec:
      hosts:
      - "*"
      gateways:
      - bookinfo-gateway
      http:
      - match:
        - uri:
            exact: /productpage
        - uri:
            prefix: /static
        - uri:
            exact: /login
        - uri:
            exact: /logout
        - uri:
            prefix: /api/v1/products
        route:
        - destination:
            host: productpage
            port:
              number: 9080

Langkah 5: Hasilkan data tracing

  1. Jalankan perintah berikut untuk menanyakan alamat IP gerbang masuk:

    kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG} get svc -n istio-system|grep ingressgateway|awk -F ' ' '{print $4}'
  2. Masukkan Alamat IP gerbang masuk/productpage di bilah alamat browser Anda untuk mengakses Bookinfo.

Langkah 6: Lihat data tracing

  1. Jalankan perintah berikut untuk memperoleh alamat layanan zipkin:

    kubectl --kubeconfig=${DATA_PLANE_KUBECONFIG}get svc -n istio-system|grep zipkin|awk -F ' ' '{print $4}'
  2. Masukkan alamat IP layanan zipkin:9411 di bilah alamat browser Anda untuk mengakses konsol Zipkin. Di konsol Zipkin, Anda dapat melihat data tracing.

    链路追踪