Configurare il proxy DNS

Il proxy DNS è una funzionalità che fornisce le seguenti funzionalità:

  1. Propagazione delle voci DNS di Services tra i cluster in una configurazione multi-cluster.
  2. 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...