Menyiapkan Proxy DNS
Kubernetes secara native me-resolve nama DNS hanya untuk Services di cluster lokal.
Proxy DNS memungkinkan Anda me-resolve Services Kubernetes di seluruh cluster jarak jauh dalam penyiapan multi-cluster dan membuat data DNS untuk resource ServiceEntry. Hal ini membantu Anda merutekan traffic ke nama host internal tanpa mengelola server DNS internal tambahan.
Mengonfigurasi Proxy DNS
Untuk mengonfigurasi proxy DNS, konfigurasikan flag ISTIO_META_DNS_CAPTURE sebagai berikut. Anda dapat memilih konfigurasi luas cluster atau per 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
Untuk memastikan semuanya dikonfigurasi dengan benar, jalankan langkah-langkahnya.
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 Anda 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 lain 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 Proxy DNS diaktifkan. Misalnya, jika Anda menjalankan curl di Pod, alamat IP akan ditampilkan sebagai berikut:
curl -sS -v not-existing-hostname.internal
* Trying 192.168.123.123:80...
Alokasi otomatis IP untuk ServiceEntry
Saat menggunakan ServiceEntry dengan Proxy DNS, Anda dapat mengaktifkan alokasi otomatis IP secara opsional. Jika diaktifkan, alamat IP internal (dari rentang 240.240.0.0/16) akan otomatis dialokasikan untuk host ServiceEntry yang tidak menentukan alamat IP eksplisit di spec.addresses.
Mengaktifkan alokasi otomatis IP
Untuk mengaktifkan alokasi otomatis IP, ikuti petunjuk untuk implementasi bidang kontrol Anda:
TRAFFIC_DIRECTOR
Untuk implementasi bidang kontrol TRAFFIC_DIRECTOR, konfigurasikan alokasi otomatis IP di asm-options ConfigMap dalam namespace istio-system dengan menetapkan ip_auto_allocation: "true".
Contoh berikut menunjukkan ConfigMap asm-options dengan alokasi otomatis IP diaktifkan:
apiVersion: v1
kind: ConfigMap
metadata:
name: asm-options
namespace: istio-system
data:
# Enable IP auto-allocation for ServiceEntry (Rapid channel)
ip_auto_allocation: "true"
Anda juga dapat menerapkan konfigurasi ini menggunakan kubectl patch:
kubectl patch configmap/asm-options -n istio-system --type merge \
-p '{"data":{"ip_auto_allocation":"true"}}'
ISTIOD
Untuk cluster yang menggunakan implementasi bidang kontrol ISTIOD (dalam cluster atau ISTIOD terkelola), konfigurasikan alokasi otomatis IP dengan menambahkan ISTIO_META_DNS_AUTO_ALLOCATE: "true" ke metadata proxy Anda dalam MeshConfig:
apiVersion: v1
data:
mesh: |-
defaultConfig:
proxyMetadata:
ISTIO_META_DNS_CAPTURE: "true"
ISTIO_META_DNS_AUTO_ALLOCATE: "true"
kind: ConfigMap
metadata:
name: istio-<revision_name>
namespace: istio-system
Memverifikasi alokasi otomatis IP
Anda dapat memverifikasi bahwa alokasi otomatis IP berfungsi menggunakan langkah-langkah berikut.
Sebelum verifikasi, buat ServiceEntry tanpa menentukan
spec.addresses:
$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: auto-allocated-service-entry
namespace: ns1
spec:
hosts:
- auto-allocated.internal
ports:
- name: http
number: 80
protocol: HTTP
resolution: DNS
EOF
1. Memeriksa alamat yang dialokasikan di status.addresses (khusus TRAFFIC_DIRECTOR)
Dalam implementasi TRAFFIC_DIRECTOR, pengontrol mengalokasikan VIP dan mengisi kolom status.addresses dari ServiceEntry:
$ kubectl get serviceentry auto-allocated-service-entry -n ns1 -o yaml
Output akan menampilkan alamat yang dialokasikan di bagian status.addresses:
status:
addresses:
- host: auto-allocated.internal
value: 240.240.0.1
2. Menguji resolusi DNS dari Pod (TRAFFIC_DIRECTOR dan ISTIOD)
Dalam implementasi TRAFFIC_DIRECTOR dan ISTIOD, kirim permintaan dari Pod tempat Proxy DNS diaktifkan untuk memverifikasi bahwa resolusi nama di-resolve ke VIP yang dialokasikan:
$ kubectl exec deploy/curl -n ns1 -- curl -sS -v http://auto-allocated.internal
Upaya koneksi harus di-resolve ke VIP yang dialokasikan secara otomatis
(misalnya, 240.240.0.1:80):
* Trying 240.240.0.1:80...