Service Discovery e DNS


Questa pagina descrive come Google Kubernetes Engine (GKE) implementa l'Service Discovery e il DNS del cluster.

Service Discovery

In Kubernetes, il Service Discovery viene implementato con nomi di servizio 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 ulteriori informazioni 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 che viene implementato per impostazione predefinita in tutti i cluster GKE.
  • Cloud DNS: un'infrastruttura DNS del cluster gestita dal 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 la sezione Utilizzo di 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 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 i servizi ClusterIP, headless e con nome esterno.

Per scoprire come configurare Cloud DNS, consulta Utilizzare Cloud DNS per GKE.

NodeLocal DNSCache

NodeLocal DNSCache viene eseguito come DaemonSet che pianifica un pod di memorizzazione nella 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 del 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 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 sfruttano l'oggetto Service esistente. I servizi multicluster sono rilevabili e accessibili in qualsiasi cluster GKE con un unico indirizzo IP virtuale. Questo è lo stesso comportamento di un servizio ClusterIP accessibile in un singolo cluster.

I servizi multi-cluster aggregano i servizi tra i cluster e li rendono 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 la sezione 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 gestiti.
  • 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ò compilare i record Cloud DNS che corrispondono ai servizi in Service Directory.

Per saperne di più, consulta la pagina 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 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 come fornire una risoluzione DNS scalabile per i cluster che richiedono volumi elevati di query DNS utilizzando NodeLocal DNSCache.