Questa pagina descrive come Google Kubernetes Engine (GKE) implementa Service Discovery e il DNS del cluster.
Service Discovery
In Kubernetes, il Service Discovery viene implementato con nomi di servizi generati automaticamente che vengono mappati all'indirizzo IP del servizio. I nomi dei servizi seguono una
specifica standard:
come segue: my-svc.my-namespace.svc.cluster.local. I pod possono anche accedere a servizi esterni tramite i loro nomi, ad esempio example.com. Per saperne di più sul funzionamento del DNS in Kubernetes, consulta DNS per servizi e pod.
DNS cluster in GKE
I nuovi cluster Autopilot utilizzano Cloud DNS e non puoi modificare il provider DNS.
Per Standard, GKE fornisce le seguenti opzioni DNS del cluster per risolvere i nomi dei servizi e i nomi esterni:
- kube-dns: un componente aggiuntivo del cluster di cui viene eseguito il deployment per impostazione predefinita in tutti i cluster GKE.
- Cloud DNS: un'infrastruttura DNS del cluster gestita nel cloud che sfrutta Cloud DNS e non richiede la gestione di server DNS nel cluster come kube-dns.
Puoi anche registrare i tuoi servizi con Service Directory per GKE.
GKE fornisce anche NodeLocal DNSCache come componente aggiuntivo facoltativo che può essere utilizzato con kube-dns o Cloud DNS.
kube-dns
kube-dns è il provider DNS predefinito per i cluster Standard e l'unico provider DNS per i cluster Autopilot che eseguono versioni precedenti alla 1.25.9-gke.400 e alla 1.26.4-gke.500.
kube-dns viene eseguito come deployment che pianifica i pod kube-dns sui nodi del cluster.
Per scoprire di più su kube-dns, consulta Informazioni su kube-dns per GKE.
Cloud DNS
Cloud DNS è l'unico provider DNS per i cluster Autopilot che eseguono la versione 1.25.9-gke.400 e successive e la versione 1.26.4-gke.500 e successive.
Cloud DNS fornisce la risoluzione DNS di pod e servizi senza un provider DNS ospitato nel cluster come kube-dns. Il controller Cloud DNS esegue automaticamente il provisioning dei record DNS per pod e servizi in Cloud DNS per servizi ClusterIP, headless e con nome esterno.
Per scoprire come configurare Cloud DNS, consulta Utilizzo di Cloud DNS per GKE.
NodeLocal DNSCache
NodeLocal DNSCache viene eseguito come DaemonSet che pianifica un pod di cache DNS su ogni nodo del cluster. Questa cache DNS migliora la latenza di ricerca DNS, rende i tempi di ricerca DNS più coerenti e può ridurre il numero di query DNS a kube-dns o Cloud DNS.
Per scoprire come configurare NodeLocal DNSCache, consulta Configurazione di NodeLocal DNSCache.
Service Discovery al di fuori di un singolo cluster
Puoi configurare il service discovery oltre l'ambito di un singolo cluster utilizzando uno dei seguenti metodi.
Ambito VPC di Cloud DNS
Un cluster che utilizza Cloud DNS per il DNS del cluster deve operare in una delle due modalità disponibili: ambito cluster GKE o ambito Virtual Private Cloud (VPC).
Quando configuri un cluster nell'ambito del cluster, i record DNS sono risolvibili solo all'interno del cluster utilizzando lo schema <svc>.<ns>.svc.cluster.local. Questo è lo stesso comportamento di kube-dns.
Quando configuri un cluster nell'ambito VPC, i record DNS per i servizi del cluster sono risolvibili all'interno dell'intero VPC. Ciò significa che i client nello stesso VPC o connessi al VPC tramite Cloud VPN o Cloud Interconnect possono risolvere direttamente i record DNS per i servizi nel cluster GKE. Puoi anche configurare nomi DNS del cluster unici in modo che i client non GKE possano risolvere i record DNS. Ad esempio, un client non GKE potrebbe
risolvere gke-svc.ns.svc.cluster1 da gke-svc.ns.svc.cluster2.
Per scoprire di più sul DNS con ambito VPC, consulta Utilizzare Cloud DNS per GKE.
Servizi multi-cluster
I servizi multi-cluster forniscono il Service Discovery e il bilanciamento del carico multi-cluster per GKE, sfruttando l'oggetto Service esistente. I servizi multicluster sono rilevabili e accessibili in qualsiasi cluster GKE con un singolo indirizzo IP virtuale. Questo è lo stesso comportamento di un servizio ClusterIP accessibile in un singolo cluster.
Multi-cluster Services aggrega i servizi tra i cluster e li rende indirizzabili come un singolo record DNS multi-cluster utilizzando lo schema <svc>.<ns>.svc.clusterset.local. In questo modo viene fornito un nome univoco per un determinato servizio
che sia coerente e indirizzabile da qualsiasi cluster GKE
utilizzando i servizi multi-cluster.
Per scoprire di più sui servizi multi-cluster, consulta Servizi multi-cluster.
Service Directory per GKE
Service Directory per GKE offre una singola visualizzazione dei servizi in tutti i tuoi deployment Kubernetes. Service Directory può registrare servizi GKE e non GKE in un unico registry. Service Directory è particolarmente utile se vuoi:
- Un unico registro per le applicazioni Kubernetes e non Kubernetes per scoprirsi a vicenda.
- Uno strumento di Service Discovery gestito.
- Per archiviare i metadati relativi al tuo servizio a cui possono accedere altri client.
- Per impostare le autorizzazioni di accesso a livello di servizio.
I servizi Service Directory possono essere risolti tramite DNS, HTTP e gRPC. Service Directory è integrato con Cloud DNS e può popolare i record Cloud DNS che corrispondono ai servizi in Service Directory.
Per saperne di più, consulta Configurazione di Service Directory per GKE.
/etc/resolv.conf
Per i pod che utilizzano la
policy DNS ClusterFirst,
il valore di /etc/resolv.conf dipende dalle funzionalità abilitate nel
cluster:
| Cloud DNS per GKE | NodeLocal DNSCache | Valore /etc/resolv.conf |
|---|---|---|
| Abilitato | Abilitata | 169.254.20.10 |
| Abilitato | Disabilitato | 169.254.169.254 |
| Disabilitato | Abilitato | Indirizzo IP del servizio kube-dns |
| Disabilitato | Disabilitato | Indirizzo IP del servizio kube-dns |
Passaggi successivi
- Scopri come utilizzare Cloud DNS per GKE.
- Scopri di più su kube-dns per GKE.
- Scopri come configurare NodeLocal DNSCache.
- Scopri come configurare un deployment kube-dns personalizzato.
- Scopri di più sui servizi multicluster.