All Products
Search
Document Center

Alibaba Cloud Service Mesh:Persiapan untuk routing Lapisan 7

Last Updated:Mar 11, 2026

Routing Lapisan 7 di Service Mesh (ASM) mengarahkan lalu lintas berdasarkan path URI dan header permintaan. Sebelum mengonfigurasi aturan routing, siapkan lingkungan ASM Anda dan sebarkan beban kerja contoh yang dirujuk dalam tutorial routing.

Topik ini mencakup dua langkah: pastikan instans ASM, kluster ACK, dan injeksi sidecar Anda siap, lalu sebarkan layanan contoh yang digunakan dalam tutorial routing.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Sebarkan beban kerja contoh

Tutorial routing Lapisan 7 menggunakan empat layanan contoh. Sebarkan hanya layanan yang diperlukan untuk tutorial yang akan Anda ikuti.

LayananTujuanMendengarkan pada
helloworldLayanan multi-versi (v1, v2) untuk menguji routing berbasis versi dan pemisahan trafficPort 5000
sleepPod client dengan curl untuk mengirim permintaan uji ke layanan lain dalam meshPort 80
HTTPBinTitik akhir pengujian HTTP yang mengembalikan detail permintaan (header, path, metode) kepada pemanggilPort 8000
NGINXServer web statis untuk menguji aturan routing dasarPort 8000

Sambungkan kubectl ke kluster ACK Anda menggunakan file kubeconfig, lalu ikuti bagian-bagian berikut.

Sebarkan layanan helloworld

helloworld menjalankan dua versi (v1 dan v2) dari aplikasi yang sama. Hal ini membuatnya cocok untuk menguji routing berbasis versi dan pemisahan lalu lintas.

  1. Simpan YAML berikut sebagai helloworld-application.yaml:

    Expand to view helloworld-application.yaml

    apiVersion: v1
    kind: Service
    metadata:
      name: helloworld
      labels:
        app: helloworld
    spec:
      ports:
      - port: 5000
        name: http
      selector:
        app: helloworld
    ---
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: helloworld
      labels:
        account: helloworld
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: helloworld-v1
      labels:
        apps: helloworld
        version: v1
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: helloworld
          version: v1
      template:
        metadata:
          labels:
            app: helloworld
            version: v1
        spec:
          serviceAccount: helloworld
          serviceAccountName: helloworld
          containers:
          - name: helloworld
            image: istio/examples-helloworld-v1
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 5000
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: helloworld-v2
      labels:
        apps: helloworld
        version: v2
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: helloworld
          version: v2
      template:
        metadata:
          labels:
            app: helloworld
            version: v2
        spec:
          serviceAccount: helloworld
          serviceAccountName: helloworld
          containers:
          - name: helloworld
            image: istio/examples-helloworld-v2
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 5000
  2. Sebarkan layanan tersebut:

    kubectl apply -f helloworld-application.yaml
  3. Verifikasi penerapan: Output yang diharapkan: Nilai READY sebesar 2/2 menunjukkan bahwa baik kontainer aplikasi maupun proxy sidecar sedang berjalan.

    kubectl get pods -l app=helloworld
    NAME                              READY   STATUS    RESTARTS   AGE
    helloworld-v1-xxxxxxxxx-xxxxx     2/2     Running   0          30s
    helloworld-v2-xxxxxxxxx-xxxxx     2/2     Running   0          30s

Sebarkan layanan sleep

sleep bertindak sebagai pod client. Layanan ini tetap menganggur dan menyediakan lingkungan curl untuk mengirim permintaan uji ke layanan lain dalam mesh.

  1. Simpan YAML berikut sebagai sleep-application.yaml:

    Expand to view sleep-application.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: curlimages/curl
            command: ["/bin/sleep", "3650d"]
            imagePullPolicy: IfNotPresent
            volumeMounts:
            - mountPath: /etc/sleep/tls
              name: secret-volume
          volumes:
          - name: secret-volume
            secret:
              secretName: sleep-secret
              optional: true
  2. Sebarkan layanan tersebut:

    kubectl apply -f sleep-application.yaml
  3. Verifikasi penerapan: Output yang diharapkan:

    kubectl get pods -l app=sleep
    NAME                     READY   STATUS    RESTARTS   AGE
    sleep-xxxxxxxxx-xxxxx    2/2     Running   0          30s

Sebarkan layanan HTTPBin

HTTPBin mengembalikan detail permintaan—header, path URI, dan metode. Gunakan layanan ini untuk memverifikasi bahwa aturan routing meneruskan permintaan ke tujuan yang benar.

  1. Simpan YAML berikut sebagai httpbin-application.yaml:

    Expand to view httpbin-application.yaml

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: httpbin
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      labels:
        app: httpbin
        service: httpbin
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 80
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          serviceAccountName: httpbin
          containers:
          - image: docker.io/kennethreitz/httpbin
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
  2. Sebarkan layanan tersebut:

    kubectl apply -f httpbin-application.yaml
  3. Verifikasi penerapan: Output yang diharapkan:

    kubectl get pods -l app=httpbin
    NAME                       READY   STATUS    RESTARTS   AGE
    httpbin-xxxxxxxxx-xxxxx    2/2     Running   0          30s

Sebarkan layanan NGINX

NGINX menyajikan konten statis. Gunakan layanan ini dalam tutorial yang menunjukkan routing path URI dasar.

  1. Simpan YAML berikut sebagai nginx.yaml:

    Expand to view nginx.yaml

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: nginx
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: nginx
        service: nginx
      name: nginx
    spec:
      ports:
        - name: http
          port: 8000
          protocol: TCP
          targetPort: 80
      selector:
        app: nginx
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: nginx
        version: v1
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
          version: v1
      template:
        metadata:
          labels:
            app: nginx
            version: v1
        spec:
          serviceAccountName: nginx
          containers:
            - image: 'nginx:1.7.9'
              name: nginx
              ports:
                - containerPort: 80
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
  2. Sebarkan layanan tersebut:

    kubectl apply -f nginx.yaml
  3. Verifikasi penerapan: Output yang diharapkan:

    kubectl get pods -l app=nginx
    NAME                     READY   STATUS    RESTARTS   AGE
    nginx-xxxxxxxxx-xxxxx    2/2     Running   0          30s

Verifikasi semua penerapan

Setelah Anda menyebarkan layanan yang diperlukan, pastikan semua Pod berjalan dengan injeksi sidecar:

kubectl get pods

Setiap Pod harus menampilkan 2/2 pada kolom READY. Hal ini menegaskan bahwa baik kontainer aplikasi maupun proxy sidecar Istio telah diinjeksikan dan berjalan.