Menyiapkan Proxy DNS
Proxy DNS adalah fitur untuk menyediakan kemampuan berikut:
- Menyebarkan entri DNS
Servicesdi seluruh cluster dalam penyiapan multi-cluster. - Mengisi entri DNS untuk
ServiceEntry.
Kubernetes menyediakan resolusi DNS hanya untuk Services di cluster lokal.
Saat 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, Proxy DNS menyediakan cara untuk menyelesaikan nama DNS untuk
kasus tersebut.
Mengonfigurasi Proxy DNS
Untuk mengonfigurasi proxy DNS, konfigurasi flag ISTIO_META_DNS_CAPTURE sebagai berikut. Anda dapat memilih konfigurasi seluruh 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 memverifikasi bahwa 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 berikut Service ns1/svc1,
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 lainnya ke Service, ClusterIP akan ditampilkan 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 DNS Proxy, 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 penerapan bidang kontrol Anda:
TRAFFIC_DIRECTOR
Untuk penerapan bidang kontrol TRAFFIC_DIRECTOR, konfigurasikan alokasi otomatis IP di asm-options ConfigMap dalam namespace istio-system dengan menyetel ip_auto_allocation: "true".
Contoh berikut menunjukkan asm-options ConfigMap dengan pengalokasian 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 penerapan bidang kontrol ISTIOD (dalam cluster
atau ISTIOD terkelola), konfigurasi 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. Periksa alamat yang dialokasikan di status.addresses (khusus TRAFFIC_DIRECTOR)
Dalam penerapan 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 penerapan TRAFFIC_DIRECTOR dan ISTIOD, kirim permintaan dari
Pod tempat Proxy DNS diaktifkan untuk memverifikasi bahwa resolusi nama diselesaikan ke
VIP yang dialokasikan:
$ kubectl exec deploy/curl -n ns1 -- curl -sS -v http://auto-allocated.internal
Upaya koneksi harus diselesaikan ke VIP yang dialokasikan secara otomatis
(misalnya, 240.240.0.1:80):
* Trying 240.240.0.1:80...