Menyiapkan DNS Proxy

DNS Proxy adalah fitur untuk menyediakan kemampuan berikut:

  1. Memperluas entri DNS Services di seluruh cluster dalam penyiapan multi-cluster.
  2. Mengisi entri DNS untuk ServiceEntry.

Kubernetes hanya menyediakan resolusi DNS untuk Services di cluster lokal. Jika Anda perlu menyediakan resolusi nama untuk Services di cluster jarak jauh atau menggunakan nama host khusus internal dengan ServiceEntry tanpa memiliki server DNS khusus internal tambahan, DNS Proxy menyediakan cara untuk me-resolve nama DNS untuk kasus tersebut.

Mengonfigurasi DNS Proxy

Konfigurasi seluruh cluster

Untuk mengonfigurasi proxy DNS di cluster, tambahkan metadata proxy ISTIO_META_DNS_CAPTURE ke ConfigMap untuk MeshConfig. Nama ConfigMap memiliki format istio-<revision_name>. Untuk mengetahui detail revisi, lihat ringkasan revisi

apiVersion: v1
data:
  mesh: |-
    ...
    defaultConfig:
      proxyMetadata:
        ISTIO_META_DNS_CAPTURE: "true"        
    ...
kind: ConfigMap
metadata:
  name: istio-<revision_name>
  namespace: istio-system

Konfigurasi per proxy

Untuk mengonfigurasi proxy DNS untuk proxy, tambahkan anotasi metadata proxy ISTIO_META_DNS_CAPTURE sebagai berikut:

kind: Deployment
metadata:
  name: app1
  namespace: ns1
spec:
...
  template:
    metadata:
      annotations:
        proxy.istio.io/config: |
          proxyMetadata:
            ISTIO_META_DNS_CAPTURE: "true"
...

Memverifikasi

Resolusi nama untuk Service di seluruh cluster

Setelah penyiapan multi-cluster, deploy Service hanya di salah satu cluster untuk memverifikasi resolusi nama lintas cluster.

Jika memiliki contoh Service ns1/svc1 berikut, Anda dapat menemukan ClusterIP di Service.

$ kubectl get -n ns1 svc1
kind: Service
metadata:
  name: svc1
  namespace: ns1
spec:
...
  ClusterIP: 210.200.1.1
...

Kemudian, saat menggunakan curl dari cluster other ke Service, cluster tersebut akan menampilkan ClusterIP sebagai berikut.

curl -sS -v svc1.ns1.svc.cluster.local
*   Trying 210.200.1.1:80...

Resolusi nama untuk ServiceEntry

Tambahkan ServiceEntry dengan nama host yang tidak terdaftar di DNS Anda. Untuk memverifikasi resolusi nama, contoh berikut memiliki alamat eksplisit 192.168.123.123.

$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: test-service-entry
spec:
  addresses:
  - "192.168.123.123"
  hosts:
  - not-existing-hostname.internal
  ports:
  - name: http
    number: 80
    protocol: HTTP
EOF

Kemudian, coba resolusi DNS di Pod tempat DNS Proxy diaktifkan. Misalnya, jika Anda menjalankan curl di Pod, Pod akan menampilkan alamat IP sebagai berikut:

curl -sS -v not-existing-hostname.internal
*   Trying 192.168.123.123:80...