Menyiapkan DNS Proxy
DNS Proxy adalah fitur untuk menyediakan kemampuan berikut:
- Memperluas entri DNS
Services
di 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...