Configurer le proxy DNS
Le proxy DNS est une fonctionnalité qui offre les fonctionnalités suivantes:
- Propagation des entrées DNS de
Services
entre les clusters dans une configuration multicluster. - 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...