Configurer le proxy DNS

Le proxy DNS est une fonctionnalité qui offre les fonctionnalités suivantes:

  1. Propagation des entrées DNS de Services entre les clusters dans une configuration multicluster.
  2. Remplissage des entrées DNS pour ServiceEntry.

Kubernetes ne fournit la résolution DNS que pour Services dans le cluster local. Lorsque vous devez fournir une résolution de nom pour Services dans un cluster distant ou utiliser un nom d'hôte réservé à l'interne avec ServiceEntry sans disposer d'un serveur DNS réservé à l'interne supplémentaire, le proxy DNS permet de résoudre les noms DNS dans de tels cas.

Configurer le proxy DNS

Configuration au niveau du cluster

Pour configurer le proxy DNS dans le cluster, ajoutez des métadonnées de proxy ISTIO_META_DNS_CAPTURE à ConfigMap pour MeshConfig. Le nom de ConfigMap est au format istio-<revision_name>. Pour en savoir plus sur la révision, consultez la présentation de la révision.

apiVersion: v1
data:
  mesh: |-
    ...
    defaultConfig:
      proxyMetadata:
        ISTIO_META_DNS_CAPTURE: "true"        
    ...
kind: ConfigMap
metadata:
  name: istio-<revision_name>
  namespace: istio-system

Configuration par proxy

Pour configurer un proxy DNS, ajoutez l'annotation de métadonnées de proxy ISTIO_META_DNS_CAPTURE comme suit:

kind: Deployment
metadata:
  name: app1
  namespace: ns1
spec:
...
  template:
    metadata:
      annotations:
        proxy.istio.io/config: |
          proxyMetadata:
            ISTIO_META_DNS_CAPTURE: "true"
...

Validation

Résolution de nom pour Service entre les clusters

Après la configuration multicluster, déployez un Service dans un seul des clusters pour vérifier la résolution de nom entre les clusters.

Dans l'exemple Service ns1/svc1 suivant, vous pouvez trouver ClusterIP dans Service.

$ kubectl get -n ns1 svc1
kind: Service
metadata:
  name: svc1
  namespace: ns1
spec:
...
  ClusterIP: 210.200.1.1
...

Ensuite, lorsque vous utilisez curl du autre cluster vers le Service, il doit afficher le ClusterIP comme suit.

curl -sS -v svc1.ns1.svc.cluster.local
*   Trying 210.200.1.1:80...

Résolution de nom pour ServiceEntry

Ajoutez un ServiceEntry avec un nom d'hôte non enregistré dans votre DNS. Pour vérifier la résolution de nom, l'exemple suivant utilise l'adresse explicite 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

Essayez ensuite la résolution DNS dans un pod où le proxy DNS est activé. Par exemple, si vous exécutez un curl dans le pod, l'adresse IP doit s'afficher comme suit:

curl -sS -v not-existing-hostname.internal
*   Trying 192.168.123.123:80...