全部产品
Search
文档中心

:Memulai

更新时间:Nov 09, 2025

Topik ini menjelaskan cara dengan cepat menerapkan aplikasi dalam service mesh dalam mode Ambient Mesh.

Prasyarat

  • Kode sampel telah diterapkan. Untuk informasi lebih lanjut, lihat Persiapan.

  • Anda telah mengunduh alat debug Service Mesh (ASM), istioctl, sesuai dengan sistem operasi dan platform Anda. Versi istioctl harus kompatibel dengan versi instance ASM Anda. Untuk informasi lebih lanjut, kunjungi Repositori Istio di GitHub.

Penting

Saat melakukan operasi yang disebutkan dalam topik ini, Anda mungkin perlu beralih antara konteks Kubernetes secara berulang untuk melakukan operasi pada kluster di bidang data dan bidang kontrol. Untuk menghindari kesalahan operasi, pastikan konteks saat ini benar setiap kali Anda beralih. Anda dapat menggunakan kubectx untuk menyederhanakan pergantian konteks. Untuk informasi lebih lanjut, lihat kubectx. Anda juga dapat mengaktifkan fitur menggunakan API Kubernetes dari kluster di bidang data untuk mengakses sumber daya Istio, lalu gunakan API Kubernetes dari kluster di bidang data untuk langsung melakukan operasi pada kluster di bidang kontrol.

Langkah 1: Aktifkan kebijakan otorisasi

Setelah menerapkan aplikasi dalam instance ASM dalam mode Ambient Mesh, Anda dapat menggunakan kebijakan otorisasi Lapisan 4 untuk mengamankan akses ke aplikasi tersebut. Sebagai contoh, Anda dapat mengontrol akses ke aplikasi berdasarkan identitas beban kerja klien.

Catatan

Kebijakan otorisasi Lapisan 4 untuk instance ASM versi V1.22 sedang diuji menggunakan rilis canary. Kebijakan otorisasi Lapisan 4 untuk instance ASM versi V1.21 dan sebelumnya dapat digunakan secara normal. Untuk menggunakan kebijakan otorisasi Lapisan 4 untuk instance ASM versi V1.22, ajukan tiket.

Kebijakan otorisasi Lapisan 4

  1. Buat file productpage-viewer.yaml dengan konten berikut.

    File YAML digunakan untuk mendefinisikan kebijakan otorisasi yang secara eksplisit mengizinkan akun layanan aplikasi sleep dan gateway untuk memanggil layanan productpage.

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
     name: productpage-viewer
     namespace: default
    spec:
     selector:
       matchLabels:
         app: productpage
     action: ALLOW
     rules:
     - from:
       - source:
           principals:
           - cluster.local/ns/default/sa/sleep
           - cluster.local/ns/istio-system/sa/istio-ingressgateway
  2. Gunakan kubectl untuk terhubung ke instance ASM berdasarkan informasi dalam file kubeconfig, lalu jalankan perintah berikut untuk menerapkan kebijakan otorisasi:

    kubectl apply -f productpage-viewer.yaml
  3. Verifikasi apakah kebijakan otorisasi berlaku.

    1. Jalankan perintah berikut:

      kubectl exec deploy/sleep -- curl -s "http://$GATEWAY_HOST/productpage" | grep -o "<title>.*</title>"

      Output yang diharapkan:

      <title>Simple Bookstore App</title>
    2. Jalankan perintah berikut:

      kubectl exec deploy/sleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      Output yang diharapkan:

      <title>Simple Bookstore App</title>
    3. Jalankan perintah berikut:

      kubectl exec deploy/notsleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      Output yang diharapkan:

      command terminated with exit code 56

      Output di atas menunjukkan bahwa kebijakan otorisasi berlaku.

Kebijakan otorisasi Lapisan 7

Untuk instance ASM versi V1.21 dan sebelumnya

Anda dapat menggunakan Kubernetes Gateway API untuk menerapkan waypoint proxy untuk akun layanan bookinfo-productpage. Waypoint proxy ini digunakan untuk layanan productpage. Trafik yang ditujukan ke layanan productpage dirute oleh Proxy lapisan 7 ini.

  1. Jalankan perintah berikut untuk menerapkan waypoint proxy untuk akun layanan bookinfo-productpage:

    istioctl x waypoint apply --service-account bookinfo-productpage
  2. Jalankan perintah berikut untuk melihat status waypoint proxy untuk layanan productpage:

    kubectl get gtw bookinfo-productpage -o yaml

    Perluas untuk melihat output yang diharapkan

    apiVersion: gateway.networking.k8s.io/v1beta1
    kind: Gateway
    metadata:
      annotations:
        gateway.istio.io/controller-version: "5"
        istio.io/for-service-account: bookinfo-productpage
      creationTimestamp: "2023-08-10T08:35:51Z"
      generation: 1
      name: bookinfo-productpage
      namespace: default
      resourceVersion: "7828921"
      uid: c085b788-a8fa-4a2c-8376-18d08689****
    spec:
      gatewayClassName: istio-waypoint
      listeners:
      - allowedRoutes:
          namespaces:
            from: Same
        name: mesh
        port: 15008
        protocol: HBONE
    status:
      conditions:
      - lastTransitionTime: "2023-08-10T08:35:51Z"
        message: Handled by Istio controller
        observedGeneration: 1
        reason: Accepted
        status: "True"
        type: Accepted
  3. Modifikasi kebijakan otorisasi.

    1. Salin konten berikut ke file productpage-viewer.yaml. Ini akan secara eksplisit mengizinkan akun layanan aplikasi sleep dan gateway untuk mengakses layanan productpage menggunakan permintaan GET, sementara operasi lain tidak diizinkan.

      apiVersion: security.istio.io/v1beta1
      kind: AuthorizationPolicy
      metadata:
       name: productpage-viewer
       namespace: default
      spec:
       selector:
         matchLabels:
           istio.io/gateway-name: bookinfo-productpage
       action: ALLOW
       rules:
       - from:
         - source:
             principals:
             - cluster.local/ns/default/sa/sleep
             - cluster.local/ns/istio-system/sa/istio-ingressgateway
         to:
         - operation:
             methods: ["GET"]
    2. Jalankan perintah berikut untuk menerapkan ulang kebijakan otorisasi:

      kubectl apply -f productpage-viewer.yaml
  4. Verifikasi apakah kebijakan otorisasi berlaku.

    1. Jalankan perintah berikut:

      kubectl exec deploy/sleep -- curl -s "http://$GATEWAY_HOST/productpage" -X DELETE

      Output yang diharapkan:

       RBAC: access denied                                                                                                       
    2. Jalankan perintah berikut:

      kubectl exec deploy/notsleep -- curl -s http://productpage:9080/

      Output yang diharapkan:

        RBAC: access denied
    3. Jalankan perintah berikut:

      kubectl exec deploy/sleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      Output yang diharapkan:

       <title>Simple Bookstore App</title>

      Output di atas menunjukkan bahwa kebijakan otorisasi berlaku.

Untuk instance ASM versi V1.22 dan seterusnya

Untuk menggunakan kemampuan Lapisan 7 dalam mode Ambient Mesh, Anda harus terlebih dahulu mengaktifkan waypoint proxy untuk layanan atau beban kerja tertentu.

Bagaimana cara mengaktifkan waypoint proxy untuk layanan atau beban kerja tertentu?

Instance ASM versi V1.22 menyediakan metode baru untuk mengonfigurasi waypoint proxy. Anda dapat menggunakan metode ini untuk secara fleksibel mengaktifkan waypoint proxy dalam berbagai ruang lingkup. Konfigurasinya terdiri dari dua bagian:

  1. Pertama, buat waypoint proxy dan gunakan label untuk menentukan trafik mana yang diproses oleh waypoint proxy.

    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      labels:
        istio.io/waypoint-for: service
      name: waypoint
      namespace: default
    spec:
      gatewayClassName: istio-waypoint
      listeners:
      - name: mesh
        port: 15008
        protocol: HBONE
    1. Bidang gatewayClassName dari gateway ini adalah istio-waypoint, yang menunjukkan bahwa waypoint proxy dibuat.

    2. Gateway ini memiliki label khusus istio.io/waypoint-for: service, yang menunjukkan bahwa waypoint proxy ini didedikasikan untuk trafik layanan. Selain service, Anda juga dapat menyetel bidang istio.io/waypoint-for ke workload (didedikasikan untuk pod) atau all (layanan dan beban kerja).

  2. Tentukan trafik mana yang akan diproses oleh waypoint proxy. Tambahkan label istio.io/use-waypoint ke layanan, namespace, atau pod dan atur nilai label ini ke nama waypoint proxy yang ingin Anda gunakan.

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: httpbin
        service: httpbin
        istio.io/use-waypoint: waypoint
      name: httpbin
      namespace: default
    spec:
      ports:
      - name: http
        port: 8000
        protocol: TCP
        targetPort: 80
      selector:
        app: httpbin
      type: ClusterIP

Demonstrasi

Bagian berikutnya melanjutkan demonstrasi tentang cara menggunakan kebijakan otorisasi Lapisan 7 dalam lingkungan yang dijelaskan dalam topik ini.

  1. Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig. Lalu, terapkan konten berikut dari waypoint proxy ke namespace default:

    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      labels:
        istio.io/waypoint-for: service
      name: waypoint
      namespace: default
    spec:
      gatewayClassName: istio-waypoint
      listeners:
      - name: mesh
        port: 15008
        protocol: HBONE
  2. Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig. Lalu, jalankan perintah berikut untuk menambahkan label ke layanan productpage sehingga trafik layanan productpage diproses oleh waypoint proxy:

    kubectl label service productpage istio.io/use-waypoint=waypoint
  3. Perbarui kebijakan otorisasi dengan konten berikut:

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: productpage-viewer
      namespace: default
    spec:
      targetRefs:
      - kind: Service
        group: ""
        name: productpage
      action: ALLOW
      rules:
      - from:
        - source:
            principals:
            - cluster.local/ns/default/sa/sleep
        to:
        - operation:
            methods: ["GET"]

    Kebijakan otorisasi baru secara eksplisit menunjukkan bahwa hanya permintaan GET dari aplikasi sleep yang diizinkan untuk mengakses layanan productpage dan semua permintaan lain ditolak.

    Catatan

    Jika kebijakan otorisasi di atas gagal diterapkan, hapus kebijakan otorisasi asli dan terapkan kembali kebijakan otorisasi di atas.

  4. Verifikasi apakah kebijakan otorisasi berlaku.

    1. Gunakan kubectl untuk terhubung ke kluster ACK berdasarkan informasi dalam file kubeconfig. Lalu, jalankan perintah berikut untuk menggunakan permintaan GET untuk mengakses layanan productpage:

      kubectl exec deploy/sleep -- curl -s http://productpage:9080/ | grep -o "<title>.*</title>"

      Output yang diharapkan:

      <title>Simple Bookstore App</title>
    2. Jalankan perintah berikut untuk menggunakan permintaan DELETE untuk mengakses layanan productpage:

      kubectl exec deploy/sleep -- curl -XDELETE -s http://productpage:9080/

      Output yang diharapkan:

      RBAC: access denied
    3. Jalankan perintah berikut untuk menggunakan permintaan GET untuk mengakses layanan productpage:

      kubectl exec deploy/notsleep -- curl -s http://productpage:9080/

      Output yang diharapkan:

      RBAC: access denied

    Output di atas menunjukkan bahwa kebijakan otorisasi berlaku.

Langkah 2: Tentukan aturan routing Lapisan 7

Untuk instance ASM versi V1.21 dan sebelumnya

  1. Jalankan perintah berikut untuk menerapkan waypoint proxy untuk layanan reviews, sehingga semua trafik ke layanan reviews dirute oleh waypoint proxy ini:

    istioctl x waypoint apply --service-account bookinfo-reviews
  2. Buat file reviews.yaml dengan konten berikut.

    Konfigurasikan aturan routing trafik untuk mengirim 90% permintaan ke reviews-v1 dan 10% permintaan ke reviews-v2.

    Perluas untuk melihat file reviews.yaml

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: reviews
    spec:
      host: reviews
      trafficPolicy:
        loadBalancer:
          simple: RANDOM
      subsets:
      - name: v1
        labels:
          version: v1
      - name: v2
        labels:
          version: v2
      - name: v3
        labels:
          version: v3
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
        - reviews
      http:
      - route:
        - destination:
            host: reviews
            subset: v1
          weight: 90
        - destination:
            host: reviews
            subset: v2
          weight: 10
    
  3. Jalankan perintah berikut untuk menerapkan aturan tujuan:

    kubectl apply -f reviews.yaml
  4. Jalankan perintah berikut untuk memverifikasi apakah 10% dari 100 permintaan dikirim ke reviews-v2:

    kubectl exec deploy/sleep -- sh -c "for i in \$(seq 1 100); do curl -s http://$GATEWAY_HOST/productpage | grep reviews-v.-; done"

    Output yang diharapkan:

            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v2-5d99885bc9-qb5cv</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>

    Output di atas menunjukkan bahwa aturan routing Lapisan 7 berlaku.

Untuk instance ASM versi V1.22 dan seterusnya

  1. Jalankan perintah berikut untuk menerapkan waypoint proxy untuk layanan reviews, sehingga semua trafik ke layanan reviews dirute oleh waypoint proxy ini:

    kubectl label service reviews istio.io/use-waypoint=waypoint
  2. Gunakan konten berikut untuk membuat aturan routing trafik untuk layanan reviews untuk mengirim 90% permintaan ke reviews-v1 dan 10% permintaan ke reviews-v2:

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: reviews
    spec:
      host: reviews
      trafficPolicy:
        loadBalancer:
          simple: RANDOM
      subsets:
      - name: v1
        labels:
          version: v1
      - name: v2
        labels:
          version: v2
      - name: v3
        labels:
          version: v3
    ---
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: reviews
    spec:
      hosts:
        - reviews
      http:
      - route:
        - destination:
            host: reviews
            subset: v1
          weight: 90
        - destination:
            host: reviews
            subset: v2
          weight: 10
  3. Jalankan perintah berikut untuk memverifikasi apakah 10% dari 100 permintaan dikirim ke reviews-v2:

    kubectl exec deploy/sleep -- sh -c "for i in \$(seq 1 100); do curl -s http://$GATEWAY_HOST/productpage | grep reviews-v.-; done"

    Output yang diharapkan:

            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v2-5d99885bc9-qb5cv</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>
            <u>reviews-v1-5896f547f5-48zcn</u>

    Output di atas menunjukkan bahwa aturan routing Lapisan 7 berlaku.

Langkah 3: Hapus sumber daya

Jalankan perintah berikut untuk menghapus sumber daya yang dibuat dalam topik ini:

istioctl x waypoint delete  --service-account bookinfo-productpage
istioctl x waypoint delete --service-account bookinfo-reviews
kubectl delete authorizationpolicy productpage-viewer