All Products
Search
Document Center

Alibaba Cloud Service Mesh:Konfigurasikan cakupan penemuan layanan untuk meningkatkan efisiensi dorongan konfigurasi mesh

Last Updated:Aug 29, 2026

Konfigurasikan cakupan penemuan layanan jika proses dorongan konfigurasi memakan waktu terlalu lama, lapisan kontrol Alibaba Cloud Service Mesh (ASM) kelebihan beban, atau konfigurasi resource tidak cukup tepat. Dengan pengaturan ini, ASM hanya menemukan dan memproses layanan di namespace yang ditentukan, sehingga mempercepat sinkronisasi konfigurasi.

Prasyarat

  • Instans ASM versi 1.10.5.32 atau lebih baru. Untuk petunjuknya, lihat Create an ASM instance.

  • kubectl telah dikonfigurasi untuk mengakses kluster Container Service for Kubernetes (ACK) pada bidang data. Semua perintah dalam topik ini dijalankan terhadap kluster tersebut.

  • Pengumpulan log lapisan kontrol diaktifkan untuk instans ASM, yang digunakan dalam contoh pada topik ini untuk mengamati proses dorongan konfigurasi. Untuk petunjuknya, lihat Enable control-plane log collection and log-based alerting (legacy) jika instans ASM menggunakan versi sebelum 1.17.2.35, atau Enable control-plane log collection and log-based alerting (new) jika instans ASM menggunakan versi 1.17.2.35 atau lebih baru.

  • (Opsional) Instans ASM versi 1.20 atau lebih baru. Versi ini hanya diperlukan jika Anda ingin mengecualikan Pod dengan label tertentu dari cakupan penemuan layanan.

Cara kerja cakupan penemuan layanan

Dalam topik ini, konfigurasi proxy sidecar mengacu pada informasi konfigurasi mesh yang diterima oleh proxy sidecar dari lapisan kontrol.

Secara default, proxy sidecar pada bidang data menyimpan informasi tentang semua layanan di setiap namespace kluster bidang data, meskipun beban kerja di namespace tersebut tidak memiliki injeksi proxy sidecar yang diaktifkan. Lapisan kontrol ASM juga memantau layanan di semua namespace mesh, sehingga setiap perubahan terkait layanan akan memicu lapisan kontrol untuk mendorong konfigurasi terkait ke semua proxy sidecar.

Cakupan penemuan layanan menggunakan pemilih label berdasarkan label namespace di kluster bidang data. Pemilih label ini memastikan bahwa lapisan kontrol ASM hanya menemukan dan memproses layanan aplikasi di namespace yang ditentukan. Konfigurasi proxy sidecar kemudian hanya menyimpan informasi layanan dari namespace yang dipilih. Perubahan pada layanan di namespace yang tidak dipilih tidak lagi memicu dorongan konfigurasi ke proxy sidecar.

Pemilih label pada cakupan penemuan layanan mendukung dua jenis aturan berikut:

  • Aturan kecocokan label eksak — Tentukan kunci label dan nilai label. Namespace hanya cocok jika label-nya secara tepat sesuai dengan kunci dan nilai yang ditentukan.

  • Aturan kecocokan ekspresi label — Tentukan kunci label, operator ekspresi, dan sekumpulan nilai label untuk mencocokkan label namespace pada bidang data. Operator berikut tersedia:

    • In — Namespace pada bidang data harus memiliki kunci label yang ditentukan, dan nilai kuncinya harus ada dalam sekumpulan nilai yang ditentukan.

    • NotIn — Namespace pada bidang data harus memiliki kunci label yang ditentukan, dan nilai kuncinya tidak boleh ada dalam sekumpulan nilai yang ditentukan.

    • Exists — Namespace pada bidang data harus memiliki kunci label yang ditentukan. Tidak diperlukan nilai label ketika operatornya adalah Exists.

    • DoesNotExist — Namespace pada bidang data tidak boleh memiliki kunci label yang ditentukan. Tidak diperlukan nilai label ketika operatornya adalah DoesNotExist.

Konfigurasikan cakupan penemuan layanan

Secara default, lapisan kontrol ASM menemukan layanan di semua namespace kluster bidang data. Atur Mesh Discovery Mode ke penemuan selektif untuk membatasi penemuan hanya pada namespace yang sesuai dengan cakupan penemuan layanan. Gunakan salah satu dari dua metode berikut, bukan keduanya. Kedua metode ini mengatur nilai Mesh Discovery Mode yang sama dan hanya berbeda dalam cara Anda menentukan namespace yang akan ditemukan.

Sebelum menggunakan metode apa pun, buka halaman konfigurasi:

  1. Masuk ke ASM console. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Service Discovery Selectors.

Metode 1: Pilih namespace yang akan ditemukan

Gunakan metode ini untuk mendaftar namespace yang akan ditemukan. Hanya namespace yang tetap dipilih yang masuk dalam cakupan penemuan layanan, sehingga Anda harus memperbarui pilihan tersebut saat menambahkan namespace baru yang perlu ditemukan oleh lapisan kontrol.

  1. Di halaman Service Discovery Selectors, atur Mesh Discovery Mode ke Automatically Discover Services in the Selected Namespace of a Kubernetes Cluster on the Data Plane.

  2. Di tab Select Namespace, pilih kluster target.

  3. Pada daftar namespace yang muncul, klik unselect di sebelah kanan setiap namespace yang tidak ingin ditemukan oleh lapisan kontrol.

  4. Di bagian bawah halaman, klik OK. Di kotak dialog Confirm, klik OK.

Metode 2: Gunakan pemilih label

Gunakan metode ini untuk mencocokkan namespace berdasarkan label. Setiap namespace yang label-nya sesuai dengan pemilih tetap berada dalam cakupan penemuan layanan, termasuk namespace yang Anda buat nanti. Sebelum mengonfigurasi pemilih, pastikan setiap namespace yang ingin ditemukan oleh lapisan kontrol memiliki label yang sesuai. Namespace tanpa label yang sesuai akan dikecualikan dari cakupan.

  1. Di halaman Service Discovery Selectors, atur Mesh Discovery Mode ke Automatically Discover Services in the Selected Namespace of a Kubernetes Cluster on the Data Plane, lalu klik tab Edit Label Selector.

  2. Tentukan aturan label yang harus dicocokkan oleh namespace. Misalnya, atur Key ke asm-discovery dan Operator ke Exists untuk mencocokkan setiap namespace yang memiliki label asm-discovery.

  3. Di bagian bawah halaman, klik OK. Di kotak dialog Confirm, klik OK.

Periksa apakah instans ASM telah menerapkan konfigurasi

  1. Di panel navigasi kiri, pilih Instance Information > Base Information.

  2. Di halaman Base Information, periksa Status mesh.

    Jika Status adalah Running, instans ASM telah menerima konfigurasi dan siap kembali. Status ini hanya mengonfirmasi kesiapan instans. Untuk memastikan bahwa lapisan kontrol tidak lagi memproses layanan di namespace di luar cakupan, periksa konfigurasi proxy sidecar dan log lapisan kontrol seperti yang ditunjukkan dalam Example: Verify that the service discovery scope takes effect.

Contoh: Verifikasi bahwa cakupan penemuan layanan berlaku

Contoh ini membandingkan perilaku dorongan konfigurasi sebelum dan sesudah Anda mempersempit cakupan penemuan layanan. Contoh ini menggunakan dua namespace di kluster ACK pada bidang data: ns-in-mesh, yang memiliki injeksi proxy sidecar otomatis diaktifkan dan membawa label asm-discovery=enabled, serta ns-not-in-mesh, yang tidak memiliki keduanya. Aplikasi sampel httpbin dijalankan di kedua namespace, dan aplikasi sampel sleep dideploy ke ns-not-in-mesh untuk memicu perubahan layanan.

Langkah 1: Siapkan namespace dan aplikasi sampel

  1. Buat namespace ns-in-mesh dan ns-not-in-mesh untuk kluster ACK pada bidang data. Untuk informasi selengkapnya, lihat Create a namespace.

  2. Aktifkan injeksi proxy sidecar otomatis untuk namespace ns-in-mesh. Untuk informasi selengkapnya, lihat Enable automatic injection.

  3. Jalankan perintah berikut untuk menambahkan label asm-discovery=enabled ke namespace ns-in-mesh di kluster ACK. Pemilih label pada Langkah 3 mencocokkan label ini.

    kubectl label namespace ns-in-mesh asm-discovery=enabled
  4. Gunakan konten berikut untuk membuat file httpbin.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
  5. Jalankan perintah berikut untuk membuat aplikasi sampel httpbin di namespace ns-in-mesh dan ns-not-in-mesh.

    kubectl apply -f httpbin.yaml -n ns-in-mesh
    kubectl apply -f httpbin.yaml -n ns-not-in-mesh

Langkah 2: Periksa perilaku dorongan sebelum mempersempit cakupan

  1. Jalankan perintah berikut untuk mendapatkan nama Pod httpbin di namespace ns-in-mesh.

    kubectl get pods -n ns-in-mesh

    Output yang diharapkan:

    NAME                       READY   STATUS    RESTARTS   AGE
    httpbin-6fcb98998c-46qhr   2/2     Running   0          22m
  2. Jalankan perintah berikut untuk mengekspor konfigurasi proxy sidecar. Dalam perintah ini, ganti httpbin-6fcb98998c-46qhr dengan nama Pod httpbin yang Anda peroleh pada langkah sebelumnya.

    kubectl exec -it httpbin-6fcb98998c-46qhr -c istio-proxy -n ns-in-mesh -- curl -s localhost:15000/config_dump > config_dump.json
  3. Buka file config_dump.json yang Anda ekspor dan cari httpbin.ns-not-in-mesh.

    Pencarian mengembalikan httpbin.ns-not-in-mesh, yang menunjukkan bahwa konfigurasi proxy sidecar masih berisi informasi layanan dari namespace ns-not-in-mesh, meskipun injeksi proxy sidecar otomatis tidak diaktifkan untuk namespace tersebut.

  4. Gunakan konten berikut untuk membuat file sleep.yaml.

    ##################################################################################################
    # Sleep service
    ##################################################################################################
    apiVersion: v1
    kind: Service
    metadata:
      name: sleep
      labels:
        app: 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:
          containers:
          - name: sleep
            image: pstauffer/curl
            command: ["/bin/sleep", "3650d"]
            imagePullPolicy: IfNotPresent
    ---
  5. Jalankan perintah berikut untuk mendeploy aplikasi sleep di namespace ns-not-in-mesh kluster ACK.

    kubectl apply -f sleep.yaml -n ns-not-in-mesh
  6. Periksa log lapisan kontrol. Titik masuk konsol bergantung pada versi instans ASM.

Instans ASM sebelum versi 1.17.2.35

  1. Masuk ke ASM console. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Instance Information > Base Information.

  3. Di halaman Base Information, klik View log di sebelah Control-plane log collection.

  4. Di pojok kanan atas halaman Project, atur rentang waktu ke 5 Minutes untuk mempersempit cakupan log.

    Di tab Raw Log, log tentang pembuatan aplikasi sleep terlihat. Hal ini menunjukkan bahwa meskipun injeksi proxy sidecar otomatis tidak diaktifkan untuk namespace ns-not-in-mesh, mendeploy aplikasi di ns-not-in-mesh tetap memicu lapisan kontrol untuk mendorong konfigurasi ke proxy sidecar pada bidang data.

{"content":"2024-01-04T10:27:00.056248Z\tinfo\tads\tPush debounce stable[16] 1 for config ServiceEntry/ns-not-in-mesh/sleep.ns-not-in-mesh.svc.cluster.local: 100.183738ms since last change, 100.183497ms since last push, full=true","_time_":"2024-01-04T18:27:00.056310074+08:00","_source_":"stdout","_container_name_":"discovery","__pack_meta__":"1|MTcwNDM2MjU0MjUyMjE4OTYxMA==|10|4","__topic__":"asm_istiod_discovery","__source__":"log_service","__time__":"1704364020"}
{"content":"2024-01-04T10:26:59.956023Z\tinfo\tads\tFull push, new service ns-not-in-mesh/sleep.ns-not-in-mesh.svc.cluster.local","_time_":"2024-01-04T18:26:59.956087922+08:00","_source_":"stdout","_container_name_":"discovery","__pack_meta__":"1|MTcwNDM2MjU0MjUyMjE4OTYxMA==|10|3","__topic__":"asm_istiod_discovery","__source__":"log_service","__time__":"1704364020"}

Instans ASM versi 1.17.2.35 dan lebih baru

  1. Masuk ke ASM console. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  2. Di halaman Mesh Management, klik nama instans ASM. Di panel navigasi kiri, pilih Log Center.

  3. Di halaman Log Center, klik tab Control-Plane Logs dan atur rentang waktu ke 5 Minutes untuk mempersempit cakupan log.

    Di tab Raw Log, log tentang pembuatan aplikasi sleep terlihat. Hal ini menunjukkan bahwa meskipun injeksi proxy sidecar otomatis tidak diaktifkan untuk namespace ns-not-in-mesh, mendeploy aplikasi di ns-not-in-mesh tetap memicu lapisan kontrol untuk mendorong konfigurasi ke proxy sidecar pada bidang data.

{"content":"2024-01-04T10:33:21.180016Z\tinfo\tads\tPush debounce stable[28] 2 for config Address//c847e048f73054cb192835f8a60ea5219//Pod/ns-not-in-mesh/sleep-fc5cdb9c5-pkfvr and 1 more configs: 100.488198ms since last change, 121.179298ms since last push, full=true","_time_":"2024-01-04T18:33:21.180104591+08:00","_source_":"stdout","_container_name_":"discovery","__pack_meta__":"0|MTcwNDM1NjA0OTcxOTcxNzAyMw==|11|9","__topic__":"asm_istiod_discovery","__source__":"log_service","__time__":"1704364401"}
{"content":"2024-01-04T10:33:21.079470Z\tinfo\tmodel\tFull push, new service ns-not-in-mesh/sleep.ns-not-in-mesh.svc.cluster.local","_time_":"2024-01-04T18:33:21.07954976+08:00","_source_":"stdout","_container_name_":"discovery","__pack_meta__":"0|MTcwNDM1NjA0OTcxOTcxNzAyMw==|11|8","__topic__":"asm_istiod_discovery","__source__":"log_service","__time__":"1704364401"}

Langkah 3: Persempit cakupan penemuan layanan ke namespace ns-in-mesh

Ikuti prosedur dalam Configure the service discovery scope untuk hanya menyertakan namespace ns-in-mesh dalam cakupan:

  • Dengan Metode 1, klik unselect di sebelah kanan setiap namespace selain ns-in-mesh.

  • Dengan Metode 2, atur Key ke asm-discovery dan Operator ke Exists, yang mencocokkan ns-in-mesh karena label yang Anda tambahkan pada Langkah 1.

Langkah 4: Periksa perilaku dorongan setelah mempersempit cakupan

  1. Jalankan perintah berikut untuk mengekspor konfigurasi proxy sidecar lagi. Dalam perintah ini, ganti httpbin-6fcb98998c-46qhr dengan nama Pod httpbin yang Anda peroleh pada Langkah 2.

    kubectl exec -it httpbin-6fcb98998c-46qhr -c istio-proxy -n ns-in-mesh -- curl -s localhost:15000/config_dump > config_dump.json
  2. Buka file config_dump.json yang Anda ekspor dan cari httpbin.ns-not-in-mesh.

    Pencarian tidak mengembalikan httpbin.ns-not-in-mesh, yang menunjukkan bahwa konfigurasi proxy sidecar tidak lagi berisi informasi layanan dari namespace ns-not-in-mesh.

  3. Jalankan perintah berikut untuk menghapus aplikasi sleep dari namespace ns-not-in-mesh di kluster ACK.

    kubectl delete -f sleep.yaml -n ns-not-in-mesh
  4. Periksa log lapisan kontrol lagi. Gunakan jalur navigasi sesuai versi ASM Anda dalam Step 2: Check the push behavior before you narrow the scope, tetapi atur rentang waktu ke 15 Minutes agar jendela mencakup momen saat Anda menghapus aplikasi sleep.

    Tidak ada log tentang penghapusan aplikasi sleep yang muncul. Hal ini menunjukkan bahwa perubahan di namespace di luar cakupan penemuan layanan tidak memicu lapisan kontrol untuk mendorong konfigurasi ke proxy sidecar.