Menyiapkan DNS Proxy
DNS Proxy adalah fitur untuk menyediakan kemampuan berikut:
- Memperluas entri DNS
Servicesdi seluruh cluster dalam penyiapan multi-cluster. - 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...