Questo documento spiega come configurare e utilizzare Cloud DNS come provider DNS per i cluster Google Kubernetes Engine (GKE).
Cloud DNS gestisce automaticamente i record DNS per i tuoi servizi Kubernetes. Per impostazione predefinita, questi record sono accessibili solo dall'interno del cluster (ambito cluster).
Se devi risolvere i servizi headless dall'esterno del cluster, ad esempio dalle VM Compute Engine, devi abilitare l'ambito VPC o l'ambito VPC aggiuntivo.
Questo documento è rivolto agli utenti di GKE, inclusi sviluppatori, amministratori e architetti. Per saperne di più sui ruoli comuni e sulle attività di esempio in Google Cloud, consulta Ruoli e attività comuni degli utenti di GKE Enterprise.
Per trarre il massimo vantaggio da questo documento, dovresti conoscere i seguenti argomenti:
- Servizio Kubernetes.
- Multi-cluster Services.
- Informazioni sul service discovery.
- Informazioni su Cloud DNS.
Per rendere raggiungibili i servizi ClusterIP o NodePort dall'esterno del cluster, devi esporre il servizio utilizzando LoadBalancer o un altro metodo e registrare il relativo indirizzo IP esterno in Cloud DNS.
Per saperne di più sull'utilizzo di kube-dns come provider DNS, consulta Service
discovery e DNS.
Per scoprire come utilizzare una versione personalizzata di kube-dns o un provider DNS personalizzato, vedi
Configurazione di un deployment personalizzato di kube-dns.
Prezzi
Quando Cloud DNS è il provider DNS per i cluster GKE Standard, le query DNS dai pod all'interno del cluster GKE vengono fatturate in base ai prezzi di Cloud DNS.
Le query a una zona DNS con ambito VPC gestita da GKE vengono fatturate utilizzando i prezzi standard di Cloud DNS.
Limitazioni e restrizioni
Si applicano le seguenti limitazioni:
- L'ambito VPC non è supportato nei cluster Autopilot; è supportato solo l'ambito cluster. Se devi risolvere i nomi dei servizi headless in esecuzione nei cluster GKE Autopilot, devi utilizzare l'ambito VPC additivo.
- Puoi abilitare i cluster GKE Autopilot con ambito VPC aggiuntivo solo al momento della creazione del cluster. L'abilitazione o la disabilitazione dell'ambito VPC additivo nei cluster GKE Autopilot esistenti non è supportata.
- La creazione di cluster con ambito VPC additivo nei progetti di servizio delle reti VPC condivise non è supportata.
- Cloud DNS per GKE non è disponibile per Assured
Workload con un regime di conformità
IL4.
kube-dnsè forzato in ambienti così regolamentati. - Le modifiche manuali alle zone DNS private gestite non sono supportate e vengono sovrascritte dal controller Cloud DNS. Le modifiche ai record DNS in queste zone non vengono mantenute al riavvio del controller.
- Dopo aver abilitato Cloud DNS per GKE in un cluster,
kube-dnscontinua a essere eseguito nel cluster. Puoi disattivarekube-dnsscalando il deployment e il gestore della scalabilità automatica dikube-dnsa zero. - Non puoi modificare l'ambito
DNS in un
cluster dopo aver impostato l'ambito con il flag
--cluster-dns-scope. Se devi modificare l'ambito DNS, devi ricreare il cluster con un ambito DNS diverso. - Si applicano limitazioni alle risorse Cloud DNS. In particolare, è possibile associare al massimo una zona di policy di risposta a una rete VPC alla volta. Per gli ambiti VPC e VPC aggiuntivi, la creazione del cluster non va a buon fine se esiste già una zona di criteri di risposta che non segue la convenzione di denominazione associata alla rete VPC del cluster.
- Le configurazioni di domini stub personalizzati e server DNS upstream si applicano alle configurazioni DNS di pod e nodi. I pod che utilizzano la rete host o i processi eseguiti direttamente sull'host utilizzano anche le configurazioni del dominio stub e del server dei nomi upstream. Questo comportamento è supportato solo in Standard.
- I domini stub personalizzati e i server dei nomi upstream configurati tramite
il ConfigMap
kube-dnsvengono applicati automaticamente a Cloud DNS per il DNS con ambito cluster. Il DNS con ambito VPC ignora il ConfigMapkube-dnse devi applicare queste configurazioni direttamente su Cloud DNS. Questo comportamento è supportato solo in Standard. - La migrazione da
kube-dnsall'ambito VPC è un'operazione distruttiva. Ricrea il cluster quando passi dall'ambitokube-dnsall'ambito VPC o viceversa. - Per l'ambito VPC, l'intervallo di indirizzi IP secondari per i servizi non deve essere condiviso con altri cluster nella subnet.
- Per l'ambito VPC, la policy di risposta associata a un record PTR viene collegata alla rete VPC. Se al cluster di rete sono associate altre norme di risposta, la risoluzione del record PTR per gli indirizzi IP del servizio Kubernetes non riesce.
- Se provi a creare un servizio headless con un numero di pod che supera la quota consentita, Cloud DNS non crea set di record o record per il servizio.
- I nomi di servizi e porte sono limitati a 62 caratteri, anche se le etichette DNS hanno un limite massimo di 63 caratteri. Questo comportamento è dovuto al fatto che GKE aggiunge un prefisso di sottolineatura ai record DNS.
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Attiva l'API Google Kubernetes Engine. Attiva l'API Google Kubernetes Engine
- Se vuoi utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il comando
gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
Abilita l'API Cloud DNS nel tuo progetto:
Per utilizzare Cloud DNS con ambito cluster, devi disporre di una delle seguenti versioni:
- Per Standard: GKE 1.24.7-gke.800 o 1.25.3-gke.700 o versioni successive.
- Per Autopilot: GKE versioni 1.25.9-gke.400 o 1.26.4-gke.500 o successive.
- Google Cloud CLI versione 411.0.0 o successive.
Per utilizzare Cloud DNS nell'ambito VPC additivo, devi disporre di una delle seguenti versioni:
- GKE 1.28.3-gke.1430000 o versioni successive.
- Google Cloud CLI versione 503.0.0 o successive.
Attiva DNS con ambito cluster
Nel DNS con ambito cluster, solo i nodi in esecuzione nel cluster GKE possono risolvere i nomi dei servizi e i nomi dei servizi non sono in conflitto tra i cluster. Questo
comportamento è lo stesso di kube-dns nei cluster GKE, il che significa
che puoi eseguire la migrazione dei cluster da kube-dns all'ambito del cluster Cloud DNS
senza downtime o modifiche alle tue applicazioni.
Il seguente diagramma mostra come Cloud DNS crea una zona DNS privata per un cluster GKE. Solo i processi e i pod eseguiti sui nodi del cluster possono risolvere i record DNS del cluster, perché solo i nodi si trovano nell'ambito DNS.
Abilitare l'ambito del cluster in un nuovo cluster
I nuovi cluster Autopilot nelle versioni 1.25.9-gke.400, 1.26.4-gke.500 o successive utilizzano per impostazione predefinita l'ambito del cluster Cloud DNS. La sezione seguente mostra come abilitare l'ambito del cluster in un nuovo cluster Standard.
Crea un cluster standard con l'ambito cluster abilitato
Puoi creare un cluster GKE Standard con l'ambito del cluster Cloud DNS abilitato utilizzando gcloud CLI o la console Google Cloud :
gcloud
Crea un cluster utilizzando il flag --cluster-dns:
gcloud container clusters create CLUSTER_NAME \
--cluster-dns=clouddns \
--cluster-dns-scope=cluster \
--location=COMPUTE_LOCATION
Sostituisci quanto segue:
CLUSTER_NAME: il nome del cluster.COMPUTE_LOCATION: la posizione di Compute Engine per il cluster.
Il flag --cluster-dns-scope=cluster è facoltativo nel comando perché
cluster è il valore predefinito.
Console
Nella console Google Cloud , vai alla pagina Crea un cluster Kubernetes.
Nel riquadro di navigazione, in Cluster, fai clic su Networking.
Nella sezione Provider DNS, fai clic su Cloud DNS.
Seleziona Ambito del cluster.
Configura il cluster in base alle esigenze.
Fai clic su Crea.
Abilitare l'ambito del cluster in un cluster esistente
La migrazione di un cluster Autopilot esistente da kube-dns all'ambito del cluster Cloud DNS non è supportata. Per abilitare l'ambito del cluster Cloud DNS, ricrea i cluster Autopilot nelle versioni GKE 1.25.9-gke.400, 1.26.4-gke.500 o successive.
Puoi eseguire la migrazione di un cluster Standard esistente da kube-dns all'ambito del cluster Cloud DNS utilizzando gcloud CLI o la consoleGoogle Cloud .
Quando esegui la migrazione di un cluster esistente da kube-dns a Cloud DNS, devi ricreare i nodi affinché la modifica diventi effettiva. Esegui la migrazione dei cluster che
eseguono applicazioni senza interrompere la comunicazione del cluster attivando
Cloud DNS come provider DNS in ognpool di nodiol separatamente. Un sottoinsieme dei
nodi è operativo in qualsiasi momento perché alcuni node pool utilizzano kube-dns e
altri node pool utilizzano Cloud DNS.
gcloud
Aggiorna il cluster esistente:
gcloud container clusters update CLUSTER_NAME \ --cluster-dns=clouddns \ --cluster-dns-scope=cluster \ --location=COMPUTE_LOCATIONSostituisci quanto segue:
CLUSTER_NAME: il nome del cluster.COMPUTE_LOCATION: la posizione di Compute Engine per il tuo cluster.
Il flag
--cluster-dns-scope=clusterè facoltativo nel comando perchéclusterè il valore predefinito.La risposta è simile alla seguente:
All the node-pools in the cluster need to be re-created by the user to start using Cloud DNS for DNS lookups. It is highly recommended to complete this step shortly after enabling Cloud DNS. Do you want to continue (Y/n)?Dopo la conferma, il controller Cloud DNS viene eseguito sul control plane GKE. Tuttavia, i pod non utilizzano Cloud DNS per la risoluzione DNS finché non esegui l'upgrade del pool di nodi o non aggiungi nuovi node pool al cluster.
Esegui l'upgrade dei pool di nodi nel cluster per utilizzare Cloud DNS:
gcloud container clusters upgrade CLUSTER_NAME \ --node-pool=POOL_NAME \ --location=COMPUTE_LOCATIONSostituisci quanto segue:
CLUSTER_NAME: il nome del cluster.POOL_NAME: il nome del pool di nodi di cui eseguire l'upgrade.
Se il pool di nodi e il control plane eseguono la stessa versione, esegui l'upgrade del control plane prima, come descritto in Upgrade manuale del control plane. Poi esegui l'upgrade del pool di nodi.
Conferma la risposta e ripeti questo comando per ogni pool di nodi nel cluster. Se il cluster ha un solo pool di nodi, ometti il flag
--node-pool.
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud .
Fai clic sul nome del cluster da modificare.
In Networking, nel campo Provider DNS, fai clic su edit Modifica provider DNS.
Fai clic su Cloud DNS.
Fai clic su Ambito del cluster.
Fai clic su Salva modifiche.
Abilita l'ambito VPC additivo
Questa sezione descrive i passaggi per attivare o disattivare l'ambito VPC additivo, come componente aggiuntivo dell'ambito cluster Cloud DNS.
Abilitare l'ambito VPC additivo in un nuovo cluster
Puoi abilitare il DNS con ambito VPC additivo in un nuovo cluster GKE utilizzando gcloud CLI o la console Google Cloud .
Crea un cluster Autopilot con ambito VPC additivo
gcloud container clusters create-auto CLUSTER_NAME \
--additive-vpc-scope-dns-domain=UNIQUE_CLUSTER_DOMAIN
Sostituisci quanto segue:
CLUSTER_NAME: il nome del cluster.UNIQUE_CLUSTER_DOMAIN: il nome di un dominio. Devi assicurarti che questo nome sia univoco all'interno del VPC perché GKE non conferma questo valore. Non puoi modificare questo valore dopo averlo impostato. Non devi utilizzare un dominio che termina con.local, altrimenti potresti riscontrare errori di risoluzione DNS.
Crea un cluster standard con ambito VPC additivo
gcloud container clusters create CLUSTER_NAME \
--cluster-dns=clouddns \
--cluster-dns-scope=cluster \
--additive-vpc-scope-dns-domain=UNIQUE_CLUSTER_DOMAIN
Il flag --cluster-dns-scope=cluster è facoltativo perché cluster è il
valore predefinito.
Sostituisci quanto segue:
CLUSTER_NAME: il nome del cluster.UNIQUE_CLUSTER_DOMAIN: il nome di un dominio. Devi assicurarti che questo nome sia univoco all'interno del VPC perché GKE non conferma questo valore. Non puoi modificare questo valore dopo averlo impostato. Non devi utilizzare un dominio che termina con.local, altrimenti potresti riscontrare errori di risoluzione DNS.
Abilita l'ambito VPC additivo in un cluster Standard esistente
L'abilitazione dell'ambito VPC additivo in un cluster Autopilot esistente non è supportata.
Per abilitare l'ambito VPC additivo in un cluster Standard esistente, esegui questo comando:
gcloud container clusters update CLUSTER_NAME \
--additive-vpc-scope-dns-domain=UNIQUE_CLUSTER_DOMAIN \
--location=COMPUTE_LOCATION
Sostituisci quanto segue:
CLUSTER_NAME: il nome del cluster.UNIQUE_CLUSTER_DOMAIN: il nome di un dominio. Devi assicurarti che questo nome sia univoco all'interno del VPC perché GKE non conferma questo valore. Non puoi modificare questo valore dopo averlo impostato. Non devi utilizzare un dominio che termina con.local, altrimenti potresti riscontrare errori di risoluzione DNS.COMPUTE_LOCATION: la posizione di Compute Engine per il cluster.
Abilita DNS con ambito VPC
Nel DNS con ambito VPC, i nomi DNS di un cluster sono risolvibili all'interno dell'intero VPC. Qualsiasi client nel VPC può risolvere i record DNS del cluster.
Il DNS con ambito VPC consente i seguenti casi d'uso:
- Service Discovery headless per client non GKE all'interno della stessa VPC.
- Risoluzione dei servizi GKE da client on-premise o cloud di terze parti. Per saperne di più, consulta Policy del server in entrata.
- Risoluzione del servizio in cui un client può decidere con quale cluster comunicare utilizzando il dominio DNS del cluster personalizzato.
Nel seguente diagramma, due cluster GKE utilizzano il DNS
con ambito VPC nello stesso VPC. Entrambi i cluster hanno un dominio DNS personalizzato,
.cluster1 e .cluster2, anziché il dominio .cluster.local predefinito. Una VM comunica con il servizio di backend headless risolvendo
backend.default.svc.cluster1. Cloud DNS risolve il servizio headless negli indirizzi IP dei singoli pod nel servizio e la VM comunica direttamente con gli indirizzi IP dei pod.
Puoi anche eseguire questo tipo di risoluzione da altre reti quando ti connetti al VPC tramite Cloud Interconnect o Cloud VPN. Le policy dei server DNS consentono ai client delle reti connesse al VPC di risolvere i nomi in Cloud DNS, inclusi i servizi GKE se il cluster utilizza il DNS con ambito VPC.
Abilita l'ambito VPC in un cluster esistente
La migrazione all'ambito VPC è supportata solo in Standard e non in Autopilot.
Puoi eseguire la migrazione di un cluster Standard esistente da kube-dns all'ambito VPC di Cloud DNS utilizzando gcloud CLI o la console Google Cloud .
Quando esegui la migrazione all'ambito VPC, devi ricreare i nodi affinché la modifica venga applicata.
gcloud
Aggiorna il cluster esistente:
gcloud container clusters update CLUSTER_NAME \ --cluster-dns=clouddns \ --cluster-dns-scope=vpc \ --cluster-dns-domain=CUSTOM_DOMAIN \ --location=COMPUTE_LOCATIONSostituisci quanto segue:
CLUSTER_NAME: il nome del cluster.COMPUTE_LOCATION: la posizione di Compute Engine per il cluster.CUSTOM_DOMAIN: il nome di un dominio. Devi assicurarti che questo nome sia univoco all'interno del VPC perché GKE non conferma questo valore. Non puoi modificare questo valore dopo averlo impostato. Non devi utilizzare un dominio che termina con.local, altrimenti potresti riscontrare errori di risoluzione DNS.
La risposta è simile alla seguente:
All the node-pools in the cluster need to be re-created by the user to start using Cloud DNS for DNS lookups. It is highly recommended to complete this step shortly after enabling Cloud DNS. Do you want to continue (Y/n)?Dopo la conferma, il controller Cloud DNS viene eseguito sul control plane GKE. I pod non utilizzano Cloud DNS per la risoluzione DNS finché non esegui l'upgrade del pool di nodi o non aggiungi nuovi node pool al cluster.
Esegui l'upgrade dei pool di nodi nel cluster per utilizzare Cloud DNS:
gcloud container clusters upgrade CLUSTER_NAME \ --node-pool=POOL_NAMESostituisci quanto segue:
CLUSTER_NAME: il nome del cluster.POOL_NAME: il nome del pool di nodi di cui eseguire l'upgrade.
Se il pool di nodi e il control plane eseguono la stessa versione, esegui l'upgrade del control plane prima, come descritto in Upgrade manuale del control plane. Poi esegui l'upgrade del pool di nodi.
Conferma la risposta e ripeti questo comando per ogni pool di nodi nel cluster. Se il cluster ha un solo pool di nodi, ometti il flag
--node-pool.
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud .
Fai clic sul nome del cluster da modificare.
In Networking, nel campo Provider DNS, fai clic su edit Modifica provider DNS.
Fai clic su Cloud DNS.
Fai clic su Ambito VPC.
Fai clic su Salva modifiche.
Verifica Cloud DNS
Verifica che Cloud DNS per GKE funzioni correttamente per il tuo cluster:
Verifica che i nodi utilizzino Cloud DNS connettendoti a un pod su un nodo ed eseguendo il comando
cat /etc/resolv.conf:kubectl exec -it POD_NAME -- cat /etc/resolv.conf | grep nameserverSostituisci
POD_NAMEcon il nome del pod.In base alla modalità del cluster, l'output è simile al seguente:
Cluster GKE Autopilot
nameserver 169.254.20.10Poiché NodeLocal DNSCache è abilitato per impostazione predefinita in GKE Autopilot, il pod utilizza NodeLocal DNSCache.
Se la cache locale non contiene una voce per il nome che viene cercato, NodeLocal DNSCache inoltra la richiesta a Cloud DNS.
Cluster GKE Standard
nameserver 169.254.169.254Questo pod di esempio utilizza
169.254.169.254comenameserver, ovvero l'indirizzo IP del server dei metadati in cui il piano dati di Cloud DNS è in ascolto delle richieste sulla porta53. I nodi non utilizzano più l'indirizzo del serviziokube-dnsper la risoluzione DNS e tutta la risoluzione DNS avviene sul nodo locale.Se l'output è un indirizzo IP simile a
10.x.y.10, il pod utilizzakube-dns. Per capire perché il tuo pod utilizza ancorakube-dns, consulta la sezione Risoluzione dei problemi .Se l'output è
169.254.20.10, hai abilitato NodeLocal DNSCache nel tuo cluster e il pod utilizza NodeLocal DNSCache.Esegui il deployment di un'applicazione di esempio nel cluster:
kubectl run dns-test --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:2.0Esporre l'applicazione di esempio con un servizio:
kubectl expose pod dns-test --name dns-test-svc --port 8080Verifica che il deployment del servizio sia andato a buon fine:
kubectl get svc dns-test-svcL'output è simile al seguente:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dns-test-svc ClusterIP 10.47.255.11 <none> 8080/TCP 6m10sIl valore della colonna
CLUSTER-IPè l'indirizzo IP virtuale del cluster. In questo esempio, l'indirizzo IP virtuale è10.47.255.11.Verifica che il nome del servizio sia stato creato come record nella zona DNS privata per il tuo cluster:
gcloud dns record-sets list \ --zone=PRIVATE_DNS_ZONE \ --name=dns-test-svc.default.svc.DOMAIN_NAME.Sostituisci quanto segue:
PRIVATE_DNS_ZONE: il nome della zona DNS gestita creata da GKE. Puoi trovare i nomi delle zone nella pagina Zone Cloud DNS della console Google Cloud o consultando la convenzione di denominazione.DOMAIN_NAME:cluster.localse utilizzi l'ambito cluster senza l'ambito VPC additivo; oppure il dominio personalizzato che hai configurato quando hai attivato l'ambito VPC o l'ambito VPC additivo.
L'output è simile al seguente:
NAME: dns-test-svc.default.svc.cluster.local. TYPE: A TTL: 30 DATA: 10.47.255.11
Disabilita Cloud DNS nei cluster standard
La disattivazione di Cloud DNS non è supportata nei cluster Autopilot creati con Cloud DNS abilitato per impostazione predefinita.
La disattivazione dell'ambito VPC in Standard non è supportata. Devi
ricreare il cluster con kube-dns come provider DNS.
Puoi disattivare l'ambito del cluster e ripristinare kube-dns in un
cluster Standard utilizzando gcloud CLI o la
consoleGoogle Cloud .
gcloud
Aggiorna il cluster in modo che utilizzi kube-dns:
gcloud container clusters update CLUSTER_NAME \
--cluster-dns=kube-dns \
--location=COMPUTE_LOCATION
Sostituisci quanto segue:
CLUSTER_NAME: il nome del cluster.COMPUTE_LOCATION: la posizione di Compute Engine per il tuo cluster.
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud .
Fai clic sul nome del cluster da modificare.
In Networking, nel campo Provider DNS, fai clic su edit Modifica provider DNS.
Fai clic su Kube-dns.
Fai clic su Salva modifiche.
Dopo aver disattivato Cloud DNS, devi ricreare i pool di nodi prima che i nodi possano utilizzare kube-dns per la risoluzione. Se in precedenza hai scalato kube-dns a zero
nodi,
devi scalare kube-dns prima che i nodi possano utilizzarlo per la risoluzione DNS. Se non ricrei i pool di nodi, i pod sui nodi esistenti continueranno a utilizzare Cloud DNS per la risoluzione DNS perché il file /etc/resolv.conf non viene aggiornato finché il nodo non viene ricreato.
Disattiva l'ambito VPC additivo
Quando disabiliti l'ambito VPC additivo per il cluster, vengono eliminati solo i record DNS nelle zone private collegate alla rete VPC. I record nelle zone DNS private per il cluster GKE rimarranno e verranno gestiti da Cloud DNS per GKE finché il servizio headless non verrà eliminato dal cluster.
Per disattivare l'ambito VPC additivo, esegui questo comando:
gcloud container clusters update CLUSTER_NAME \
--disable-additive-vpc-scope
Sostituisci CLUSTER_NAME con il nome del cluster.
Questa impostazione mantiene il cluster con l'ambito cluster Cloud DNS abilitato, il che fornisce la risoluzione DNS dall'interno del cluster.
Esegui la pulizia
Dopo aver completato gli esercizi descritti in questo documento, segui questi passaggi per rimuovere le risorse ed evitare addebiti indesiderati sul tuo account:
Elimina il servizio:
kubectl delete service dns-test-svcElimina il pod:
kubectl delete Pod dns-testPuoi anche eliminare il cluster.
Risoluzione dei problemi
Per informazioni sulla risoluzione dei problemi di Cloud DNS, consulta le seguenti pagine:
- Per suggerimenti su Cloud DNS in GKE, consulta Risolvere i problemi di Cloud DNS in GKE.
- Per suggerimenti specifici su Cloud DNS, consulta la pagina Risoluzione dei problemi di Cloud DNS.
- Per suggerimenti generali sulla diagnosi dei problemi DNS di Kubernetes, consulta la pagina Debug della risoluzione DNS.
Passaggi successivi
- Leggi una panoramica di come GKE fornisce DNS gestito.
- Leggi DNS per servizi e pod per una panoramica generale di come viene utilizzato il DNS nei cluster Kubernetes.
- Scopri di più su ambiti e gerarchie in Cloud DNS.
- Scopri di più su come abilitare e disabilitare il logging per le zone gestite private.