All Products
Search
Document Center

Alibaba Cloud Service Mesh:Gunakan proxy DNS untuk penemuan layanan multi-kluster

Last Updated:Mar 12, 2026

Dalam service mesh multi-kluster, server DNS setiap kluster hanya meresolusi layanan yang diterapkan secara lokal. Ketika suatu layanan di satu kluster mengirim permintaan ke layanan yang hanya ada di kluster lain, resolusi DNS gagal. Proxy DNS mengatasi masalah ini—proxy sidecar mencegat kueri DNS dan meresolusi nama layanan di seluruh kluster yang dikelola oleh lapisan kontrol Alibaba Cloud Service Mesh (ASM) yang sama.

Dokumen ini menjelaskan langkah-langkah berikut:

  1. Menerapkan dua layanan di dua kluster berbeda: sleep di salah satu kluster dan HTTPBin di kluster lainnya.

  2. Mengonfirmasi bahwa resolusi DNS lintas kluster gagal tanpa proxy DNS.

  3. Mengaktifkan proxy DNS dan memverifikasi bahwa penemuan layanan lintas kluster berfungsi.

Cara kerja proxy DNS

Tanpa proxy DNS, server DNS setiap kluster hanya mengetahui layanan yang diterapkan di kluster tersebut. Jika layanan sleep di kluster m1c2 mengirim permintaan ke httpbin:8000, pencarian tersebut gagal karena tidak ada objek Service httpbin di m1c2.

Dengan proxy DNS diaktifkan, proxy sidecar mencegat kueri DNS arah keluar sebelum mencapai server DNS kluster. Lapisan kontrol ASM mempertahankan tampilan terpadu atas semua layanan di seluruh kluster yang dikelola, sehingga sidecar dapat meresolusi httpbin ke titik akhir yang benar di kluster m1c1—meskipun tidak ada objek Service lokal.

Architecture diagram showing cross-cluster service discovery with DNS proxy

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

Langkah 1: Terapkan layanan sleep dan HTTPBin

Terapkan masing-masing layanan ke kluster yang berbeda agar diperlukan penemuan lintas kluster.

1a. Terapkan sleep di m1c2

Terapkan YAML berikut ke kluster m1c2. Untuk petunjuk penerapan, lihat Terapkan aplikasi dalam instans ASM.

sleep service 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: 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

1b. Terapkan HTTPBin di m1c1

Terapkan YAML berikut ke kluster m1c1. Untuk petunjuk penerapan, lihat Terapkan aplikasi dalam instans ASM.

YAML layanan HTTPBin

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

Langkah 2: Konfirmasi bahwa penemuan lintas kluster gagal

Sebelum mengaktifkan proxy DNS, verifikasi bahwa layanan sleep di m1c2 tidak dapat meresolusi httpbin.

Sambungkan ke kluster m1c2 menggunakan kubectl dan jalankan:

kubectl exec -it deploy/sleep -c sleep -- curl httpbin:8000

Output yang diharapkan:

curl: (6) Could not resolve host: httpbin

Server DNS di m1c2 tidak memiliki catatan untuk httpbin karena objek Service HTTPBin hanya ada di m1c1.

Langkah 3: Aktifkan proxy DNS dan verifikasi penemuan lintas kluster

3a. Aktifkan proxy DNS

Aktifkan fitur proxy DNS untuk instans ASM. Lihat bagian "Enable DNS Proxy" dalam Konfigurasi proxy sidecar.

3b. Terapkan ulang workload sleep

Terapkan ulang workload sleep di kluster m1c2 agar konfigurasi sidecar yang diperbarui berlaku. Lihat bagian "(Optional) Redeploy workloads" dalam Konfigurasi proxy sidecar.

3c. Uji penemuan lintas kluster

Sambungkan ke kluster m1c2 menggunakan kubectl dan jalankan perintah yang sama:

kubectl exec -it deploy/sleep -c sleep -- curl httpbin:8000

Output yang diharapkan:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>httpbin.org</title>
...

Tanggapan tersebut adalah halaman HTML HTTPBin yang disajikan dari kluster m1c1. Proxy sidecar di m1c2 mencegat kueri DNS, meresolusi httpbin melalui lapisan kontrol ASM, dan mengarahkan permintaan ke layanan HTTPBin di m1c1.

Topik terkait