Configurare il proxy DNS
Il proxy DNS è una funzionalità che fornisce le seguenti funzionalità:
- Propagazione delle voci DNS di
Services
tra i cluster in una configurazione multi-cluster. - Compilazione delle voci DNS per
ServiceEntry
.
Kubernetes fornisce la risoluzione DNS solo per Services
nel cluster locale.
Quando devi fornire la risoluzione dei nomi per Services
in un cluster remoto o
utilizzare un nome host solo interno con ServiceEntry
senza avere un altro
server DNS solo interno, DNS Proxy fornisce un modo per risolvere i nomi DNS per questi
casi.
Configurazione del proxy DNS
Configurazione a livello di cluster
Per configurare il proxy DNS nel cluster, aggiungi i metadati del proxy ISTIO_META_DNS_CAPTURE
al ConfigMap
per MeshConfig
. Il nome del ConfigMap
ha un formato
istio-<revision_name>
. Per i dettagli della revisione, consulta la panoramica della revisione.
apiVersion: v1
data:
mesh: |-
...
defaultConfig:
proxyMetadata:
ISTIO_META_DNS_CAPTURE: "true"
...
kind: ConfigMap
metadata:
name: istio-<revision_name>
namespace: istio-system
Configurazione per proxy
Per configurare il proxy DNS per un proxy, aggiungi l'annotazione dei metadati del proxy ISTIO_META_DNS_CAPTURE
come segue:
kind: Deployment
metadata:
name: app1
namespace: ns1
spec:
...
template:
metadata:
annotations:
proxy.istio.io/config: |
proxyMetadata:
ISTIO_META_DNS_CAPTURE: "true"
...
In fase di verifica
Risoluzione dei nomi per Service
in più cluster
Dopo la configurazione multi-cluster,
esegui il deployment di un Service
solo in uno dei cluster per verificare la risoluzione dei nomi tra i cluster.
Quando hai il seguente esempio Service
ns1/svc1
,
puoi trovare ClusterIP
in Service
.
$ kubectl get -n ns1 svc1
kind: Service
metadata:
name: svc1
namespace: ns1
spec:
...
ClusterIP: 210.200.1.1
...
Poi, quando utilizzi curl
dal cluster other al cluster Service
, dovrebbe essere visualizzato
ClusterIP
come segue.
curl -sS -v svc1.ns1.svc.cluster.local
* Trying 210.200.1.1:80...
Risoluzione dei nomi per ServiceEntry
Aggiungi un ServiceEntry
con un nome host non registrato nel tuo DNS.
Per verificare la risoluzione dei nomi, il seguente esempio ha l'indirizzo esplicito 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
Quindi, prova la risoluzione DNS in un pod in cui è attivato il proxy DNS. Ad esempio, se
esegui un curl
nel pod, l'indirizzo IP dovrebbe essere visualizzato come segue:
curl -sS -v not-existing-hostname.internal
* Trying 192.168.123.123:80...