Service Discovery e DNS


Questa pagina descrive in che modo Google Kubernetes Engine (GKE) implementa Service Discovery e il DNS del cluster.

Service Discovery

In Kubernetes, il Service Discovery viene implementato con nomi di servizio generati automaticamente mappati all'indirizzo IP del servizio. I nomi dei servizi sono conformi a una specifica standard, come segue: my-svc.my-namespace.svc.cluster-domain.example. I pod possono anche accedere a servizi esterni tramite il loro nome, ad esempio example.com. Per ulteriori informazioni sul funzionamento del DNS in Kubernetes, consulta DNS per servizi e pod.

DNS del 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 di servizio e i nomi esterni:

  • kube-dns: un componente aggiuntivo del cluster il cui deployment viene eseguito per impostazione predefinita in tutti i cluster GKE.
  • Cloud DNS: un'infrastruttura DNS di cluster gestita nel cloud che utilizza Cloud DNS e non richiede la gestione di server DNS in-cluster come kube-dns.

Puoi anche registrare i tuoi servizi con Service Directory per GKE.

GKE fornisce inoltre 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 a 1.25.9-gke.400 e 1.26.4-gke.500.

kube-dns viene eseguito come un deployment che pianifica i pod kube-dns per i nodi nel cluster.

Per scoprire di più su kube-dns, consulta Utilizzare kube-dns.

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 risoluzione DNS per 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 ClusterIP, i servizi headless e per i nomi esterni.

Per scoprire come configurare Cloud DNS, consulta Utilizzo di Cloud DNS per GKE.

NodeLocal DNSCache

NodeLocal DNSCache viene eseguito come un DaemonSet che pianifica un pod della cache DNS su ogni nodo del cluster. La cache DNS migliora la latenza della ricerca DNS, aumenta la coerenza dei tempi di ricerca DNS e può ridurre il numero di query DNS in kube-dns o Cloud DNS.

Per scoprire come configurare NodeLocal DNSCache, consulta Configurazione di NodeLocal DNSCache.

Service Discovery all'esterno di un singolo cluster

Puoi configurare 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. Si tratta dello stesso comportamento di kube-dns.

Quando configuri un cluster in 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 dei cluster univoci 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 saperne di più sul DNS in ambito VPC, consulta Utilizzo di Cloud DNS per GKE.

Servizi multi-cluster

I servizi multi-cluster forniscono il bilanciamento del carico e il rilevamento dei servizi multi-cluster per GKE che sfrutta l'oggetto Service esistente. I servizi multi-cluster 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.

I servizi multi-cluster aggregano il servizio in tutti i cluster e li rendono indirizzabili come un singolo record DNS multi-cluster utilizzando lo schema <svc>.<ns>.svc.clusterset.local. Fornisce un nome univoco per un determinato servizio, coerente e indirizzabile da qualsiasi cluster GKE che utilizza servizi multi-cluster.

Per saperne di più sui servizi multi-cluster, consulta Servizi multi-cluster.

Service Directory per GKE

Service Directory per GKE fornisce una vista unica dei servizi in tutti i tuoi deployment Kubernetes. Service Directory può registrare i servizi GKE e non GKE in un unico registro. Service Directory è particolarmente utile se vuoi:

  • Un unico registro per le applicazioni Kubernetes e non Kubernetes per conoscersi a vicenda.
  • Uno strumento di Service Discovery gestiti.
  • Per archiviare metadati relativi al tuo servizio accessibili da altri client.
  • 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ò completare 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 il criterio DNS ClusterFirst, il valore di /etc/resolv.conf dipende dalle funzionalità abilitate nel cluster:

Cloud DNS per GKE Cache DNSLocale Valore /etc/resolv.conf
Abilitato Abilitato 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 come fornire una risoluzione DNS scalabile per cluster che richiedono volumi elevati di query DNS utilizzando NodeLocal DNSCache.