All Products
Search
Document Center

Alibaba Cloud Service Mesh:Gunakan proxy DNS di ASM

Last Updated:Jun 21, 2026

Fitur DNS proxy dalam Service Mesh memungkinkan proxy sidecar berfungsi sebagai caching DNS proxy. Saat sebuah aplikasi mengirim kueri DNS, Service Mesh secara transparan mencegat dan menyelesaikan kueri tersebut. Topik ini menjelaskan cara mengaktifkan dan menggunakan fitur DNS proxy di ASM.

Prasyarat

Latar Belakang

Secara default, setiap kluster ACK menyediakan layanan DNS untuk melakukan resolusi nama domain bagi workload. Hal ini memungkinkan aplikasi yang berjalan di kluster Kubernetes menggunakan DNS untuk menemukan layanan lain di dalam kluster tersebut.

Server DNS berjalan di setiap kluster Kubernetes, dan setiap pod menggunakan server DNS internal ini untuk resolusi nama domain. Secara default, permintaan DNS tidak dicegat oleh proxy sidecar, sehingga setiap aplikasi mencoba menyelesaikan nama DNS sebelum membuka koneksi ke layanan lain. Setelah Anda mengaktifkan fitur DNS proxy di ASM, proxy sidecar secara transparan mencegat dan menyelesaikan kueri DNS dari aplikasi, sehingga mempercepat resolusi nama domain.

Aktifkan DNS proxy

Skenario 1: Aktifkan DNS proxy secara global

  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 Data Plane Component Management > Sidecar Proxy Setting.

  3. Di tab global, klik DNS Proxy, aktifkan sakelar Enable DNS Proxy Feature, lalu klik Update Settings.

  4. Restart pod untuk menerapkan konfigurasi DNS.

    1. Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

    2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

    3. Di halaman Pods, temukan pod target dan pilih More > Delete pada kolom Actions.

    4. Pada kotak dialog Message, klik Confirm.

      Konfigurasi baru akan berlaku saat pod direstart.

Skenario 2: Aktifkan DNS proxy untuk namespace tertentu

  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 Data Plane Component Management > Sidecar Proxy Setting.

  3. Di halaman Configure the agent parameters of the injected Sidecar, klik tab Namespaces.

  4. Pilih Namespaces, klik DNS Proxy, aktifkan sakelar Enable DNS Proxy Feature, lalu klik Update Settings.

  5. Restart pod untuk menerapkan konfigurasi DNS.

    1. Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

    2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

    3. Di halaman Pods, temukan pod target dan pilih More > Delete pada kolom Actions.

    4. Pada kotak dialog Message, klik Confirm.

      Konfigurasi baru akan berlaku saat pod direstart.

Skenario 3: Aktifkan DNS proxy untuk pod tertentu

Untuk mengaktifkan fitur DNS proxy pada pod tertentu, tambahkan anotasi ke konfigurasi YAML pod tersebut.

  1. Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Deployments.

  3. Di halaman Deployments, temukan aplikasi target dan pilih More > View YAML dari kolom Actions.

  4. Di kotak dialog Edit YAML, tambahkan anotasi berikut ke spec.template.metadata.annotations, lalu klik Update.

    annotations:
      proxy.istio.io/config: |
        proxyMetadata:
          ISTIO_META_DNS_CAPTURE: "true"
          ISTIO_META_DNS_AUTO_ALLOCATE: "true"
  5. Restart pod untuk menerapkan konfigurasi DNS.

    1. Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

    2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

    3. Di halaman Pods, temukan pod target dan pilih More > Delete pada kolom Actions.

    4. Pada kotak dialog Message, klik Confirm.

      Konfigurasi baru akan berlaku saat pod direstart.

Gunakan DNS proxy

Langkah 1: Buat ServiceEntry

Buat ServiceEntry untuk menambahkan aliyun.com ke registri layanan internal Service Mesh.

  1. Masuk ke ASM console.

  2. Di panel navigasi kiri, pilih Service Mesh > Mesh Management.

  3. Di halaman Mesh Management, temukan instans ASM yang ingin Anda konfigurasi. Klik nama instans ASM atau klik Manage pada kolom Actions.

  4. Di halaman detail instans ASM, pilih Cluster & Workload Management > External Service(ServiceEntry). Di halaman yang muncul, klik Create from YAML.

  5. Di halaman Create, pilih Namespaces, pilih Scenario Template, salin konten berikut ke dalam kotak teks, lalu klik Create.

    apiVersion: networking.istio.io/v1beta1
    kind: ServiceEntry
    metadata:
     name: test1-mydnsproxying
    spec:
     hosts:
     - aliyun.com
     location: MESH_EXTERNAL
     ports:
     - number: 443
       name: https
       protocol: TLS
     resolution: DNS

Langkah 2: Sebarkan aplikasi contoh

  1. Obtain the KubeConfig file of a cluster and use kubectl to connect to the cluster.

  2. Buat file bernama sleep.yaml yang berisi konten berikut.

    View 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: 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
  3. Jalankan perintah berikut untuk menyebarkan aplikasi sleep.

    kubectl apply -f sleep.yaml
  4. Jalankan perintah berikut untuk memeriksa apakah pod sleep telah dimulai.

    kubectl get pod |grep sleep

    Output yang diharapkan:

    NAME                       READY   STATUS    RESTARTS   AGE
    sleep-66cd8f684f-nxw8v     2/2     Running   0          16m

Langkah 3: Aktifkan DNS proxy untuk kontainer sleep

  1. Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Deployments.

  3. Di halaman Deployments, temukan aplikasi target dan pilih More > View YAML dari kolom Actions.

  4. Di kotak dialog Edit YAML, tambahkan anotasi berikut ke spec.template.metadata.annotations, lalu klik Update.

    annotations:
      proxy.istio.io/config: |
        proxyMetadata:
          ISTIO_META_DNS_CAPTURE: "true"
          ISTIO_META_DNS_AUTO_ALLOCATE: "true"
  5. Restart pod untuk menerapkan konfigurasi DNS.

    1. Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

    2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

    3. Di halaman Pods, temukan pod target dan pilih More > Delete pada kolom Actions.

    4. Pada kotak dialog Message, klik Confirm.

      Konfigurasi baru akan berlaku saat pod direstart.

Langkah 4: Verifikasi DNS proxy

  1. Periksa log kontainer istio-init.

    1. Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

    2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Pods.

    3. Di halaman Pods, klik nama pod sleep.

    4. Di halaman detail pod, klik tab Logs dan atur Containers menjadi istio-init.

      Log berikut ditampilkan:

      -A OUTPUT -p udp --dport 53 -d 192.168.0.10/32 -j REDIRECT --to-port 15053
      -A ISTIO_OUTPUT -p tcp --dport 53 -d 192.168.0.10/32 -j REDIRECT --to-ports 15053

      Proxy sidecar mencegat semua kueri DNS dari kontainer aplikasi menggunakan aturan iptables, sama seperti mencegat jenis traffic lainnya. Istio menambahkan aturan iptables tambahan untuk mengarahkan semua paket DNS pada port 53 (TCP dan UDP) yang ditujukan ke layanan DNS Kubernetes, seperti layanan CoreDNS, ke port 15053.

  2. Periksa port tempat proses pilot-agent mendengarkan.

    1. Di panel navigasi kiri halaman manajemen kluster, pilih Workload > Pods.

    2. Di halaman Pods, temukan pod sleep, klik Terminal pada kolom Actions, lalu pilih istio-proxy.

    3. Di kontainer istio-proxy, jalankan perintah berikut untuk memeriksa port tempat proses pilot-agent mendengarkan.

      netstat -anp |grep 15053

      Output yang diharapkan:

      tcp        0      0 127.0.0.1:15053         0.0.0.0:*               LISTEN      1/pilot-agent
      udp        0      0 127.0.0.1:15053         0.0.0.0:*                           1/pilot-agent

      Kueri DNS dialihkan ke proses pilot-agent yang berjalan di kontainer proxy sidecar. Output menunjukkan bahwa proses tersebut sedang mendengarkan pada port 15053.

  3. Akses aliyun.com.

    1. Di panel navigasi kiri halaman manajemen kluster, pilih Workload > Pods.

    2. Di halaman Pods, temukan pod sleep, klik Terminal pada kolom Actions, lalu pilih sleep.

    3. Di kontainer sleep, jalankan perintah berikut untuk mengakses aliyun.com.

      curl -v https://aliyun.com

      Output yang diharapkan:

      *   Trying 240.240.**.**:443...
      * Connected to aliyun.com (240.240.**.**) port 443 (#0)

      Alamat IP yang dikembalikan adalah 240.240.**.**. Ini adalah alamat dari Service Mesh yang ditetapkan secara otomatis oleh Service Mesh, bukan alamat IP publik yang sebenarnya. Service Mesh menggunakan iptables untuk membajak permintaan ke kube-dns dan mengarahkannya ke proxy sidecar yang berjalan di dalam Pod. Saat aplikasi mengirimkan permintaan ke alamat IP virtual ini, proxy sidecar menerjemahkannya ke alamat IP publik yang sebenarnya.

Aktifkan logging debug untuk DNS proxy

Anda dapat mengaktifkan logging debug untuk DNS proxy. Saat diaktifkan, pilot-agent mencatat setiap kueri DNS dari kontainer aplikasi.

  1. Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.

  2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Deployments.

  3. Di halaman Deployments, temukan aplikasi target dan pilih More > View YAML dari kolom Actions.

  4. Di kotak dialog Edit YAML, tambahkan anotasi berikut di bawah parameter spec dan klik Update.

    annotations:
      sidecar.istio.io/agentLogLevel: "dns:debug"
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: sleep
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: sleep
          annotations:
            sidecar.istio.io/agentLogLevel: "dns:debug"
  5. Jalankan perintah berikut di kluster untuk melihat log debug.

    kubectl logs -n default sleep-85fdfd8896-2ctq4 -c istio-proxy | grep debug

    View the expected output

    2022-03-28T12:15:05.064562Z    debug    dns    request ;; opcode: QUERY, status: NOERROR, id: 16390
    ;; flags: rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
    ;; QUESTION SECTION:
    ;alibabacloud.com.default.svc.cluster.local.    IN     AAAA
        protocol=udp edns=false id=1c71c9f1-e051-49e9-8d04-d7c82ee****
    2022-03-28T12:15:05.064572Z    debug    dns    request ;; opcode: QUERY, status: NOERROR, id: 16016
    ;; flags: rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
    ;; QUESTION SECTION:
    ;alibabacloud.com.default.svc.cluster.local.    IN     A
        protocol=udp edns=false id=4cec8078-5355-4d1b-b496-ab57367****
    2022-03-28T12:15:05.064593Z    debug    dns    response for hostname "alibabacloud.com.default.svc.cluster.local." (found=true): ;; opcode: QUERY, status: NOERROR, id: 16390
    ;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
    ;; QUESTION SECTION:
    ;alibabacloud.com.default.svc.cluster.local.    IN     AAAA
        protocol=udp edns=false id=1c71c9f1-e051-49e9-8d04-d7c82ee****
    2022-03-28T12:15:05.064614Z    debug    dns    response for hostname "alibabacloud.com.default.svc.cluster.local." (found=true): ;; opcode: QUERY, status: NOERROR, id: 16016
    ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
    ;; QUESTION SECTION:
    ;alibabacloud.com.default.svc.cluster.local.    IN     A
    ;; ANSWER SECTION:
    alibabacloud.com.default.svc.cluster.local.    30    IN    CNAME    alibabacloud.com.
    alibabacloud.com.    30    IN    A    240.240.**.**
        protocol=udp edns=false id=4cec8078-5355-4d1b-b496-ab573670****
                

    Entri log berisi found=true, yang menunjukkan bahwa nama domain diselesaikan dari registri internal service mesh.