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, Service Discovery viene implementato con nomi di servizi generati automaticamente che mappano all'indirizzo IP del servizio. I nomi dei servizi seguono una specifica standard: come segue: my-svc.my-namespace.svc.cluster-domain.example. I pod possono anche accedere ai servizi esterni tramite i relativi 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 di servizio e i nomi esterni:

  • kube-dns: un componente aggiuntivo del cluster che viene eseguito 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 in-cluster come kube-dns.

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

GKE fornisce anche NodeLocal DNSCache come plug-in 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 deployment che pianifica i pod kube-dns sui nodi del cluster.

Per scoprire di più su kube-dns, consulta 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 dei pod e dei servizi senza un provider DNS ospitato in cluster come kube-dns. Il controller Cloud DNS esegue automaticamente il provisioning dei record DNS per i pod e i servizi in Cloud DNS per i servizi di nome ClusterIP, headless ed esterni.

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

NodeLocal DNSCache

NodeLocal DNSCache viene eseguito come DaemonSet che pianifica un pod della cache DNS su ogni nodo del cluster. Questa cache DNS migliora la latenza della ricerca DNS, rende più coerenti i tempi di ricerca DNS 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.

Discovery dei servizi al di fuori di un singolo cluster

Puoi configurare Service Discovery oltre l'ambito di un singolo cluster utilizzando uno dei seguenti metodi.

Ambito VPC Cloud DNS

Un cluster che utilizza Cloud DNS per il DNS del cluster deve funzionare 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. Si tratta dello stesso comportamento di kube-dns.

Quando configuri un cluster nell'ambito del VPC, i record DNS per i servizi del cluster sono risolvibili nell'intero VPC. Ciò significa che i client nella stessa VPC o connessi alla VPC tramite Cloud VPN o Cloud Interconnect possono risolvere direttamente i record DNS per i servizi nel cluster GKE. Puoi anche configurare nomi DNS univoci del cluster 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 a livello di VPC, consulta Utilizzo di Cloud DNS per GKE.

Servizi multi-cluster

I servizi multi-cluster forniscono Service Discovery e il bilanciamento del carico multi-cluster per GKE che sfrutta l'oggetto Service esistente. I servizi multi-cluster sono rilevabili e accessibili in qualsiasi cluster GKE con un unico indirizzo IP virtuale. Si tratta dello stesso comportamento di un servizio ClusterIP accessibile in un singolo cluster.

I servizi multi-cluster aggregano i servizi nei 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, coerente e indirizzabile da qualsiasi cluster GKE che utilizza i servizi multi-cluster.

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

Service Directory per GKE

Service Directory per GKE fornisce una singola visualizzazione dei servizi in tutti i tuoi deployment Kubernetes. Service Directory può registrare sia i servizi GKE sia quelli non GKE in un unico registry. Service Directory è particolarmente utile se vuoi:

  • Un unico registry per consentire alle applicazioni Kubernetes e non Kubernetes di rilevarsi tra loro.
  • Uno strumento di Service Discovery gestiti.
  • Per archiviare metadati sul tuo servizio a cui altri client possono accedere.
  • 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 corrispondenti ai servizi in Service Directory.

Per scoprire di più, consulta la pagina sulla configurazione di Service Directory per GKE.

/etc/resolv.conf

Per i pod che utilizzano il ClusterFirst criterio DNS, il valore di /etc/resolv.conf dipende dalle funzionalità abilitate sul 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 elevati volumi di query DNS utilizzando NodeLocal DNSCache.