Utilizzo di kube-dns

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

In questa pagina viene descritto in che modo Google Kubernetes Engine (GKE) implementa il rilevamento dei servizi utilizzando kube-dns, il provider DNS predefinito per i cluster GKE.

Per i cluster Autopilot, non puoi modificare la configurazione predefinita di kube-dns.

Architettura

Quando crei un cluster, GKE esegue automaticamente il deployment di pod kube-dns nello spazio dei nomi kube-system. I pod accedono al deployment di kube-dns tramite un servizio corrispondente che raggruppa i pod kube-dns e assegna loro un singolo indirizzo IP (ClusterIP). Per impostazione predefinita, tutti i pod in un cluster utilizzano questo servizio per risolvere le query DNS. Il seguente diagramma mostra la relazione tra i pod e il servizio kube-dns.

Relazione tra i pod kube-dns e il servizio kube-dns

kube-dns consente di scalare per soddisfare le esigenze DNS del cluster. Questa scalabilità è controllata da kube-dns-autoscaler, un pod di cui viene eseguito il deployment per impostazione predefinita in tutti i cluster GKE. kube-dns-autoscaler regola il numero di repliche nel deployment di kube-dns in base al numero di nodi e core nel cluster.

Come si configura il DNS del pod

Il kubelet in esecuzione su ogni nodo configura il etc/resolv.conf del pod in modo che utilizzi il ClusterIP del servizio kube-dns. L'esempio di configurazione seguente mostra che l'indirizzo IP del servizio kube-dns è 10.0.0.10. Questo indirizzo IP è diverso negli altri cluster.

nameserver 10.0.0.10
search default.svc.cluster.local svc.cluster.local cluster.local c.my-project-id.internal google.internal
options ndots:5

kube-dns è il server dei nomi autorevole per il dominio del cluster (cluster.local) e risolve i nomi esterni in modo ricorsivo. I nomi brevi non completi, come myservice, vengono completati per primi con i percorsi di ricerca locale.

Aggiunta di resolver personalizzati per domini stub

Puoi modificare il ConfigMap per kube-dns per impostare domini stub come parte dell'infrastruttura DNS nei tuoi cluster.

I domini Stub consentono di configurare resolver personalizzati per dominio in modo che kube-dns inoltri le richieste DNS a server DNS specifici a monte durante la risoluzione di questi domini.

Il seguente manifest del ConfigMap per kube-dns include una configurazione stubDomains che imposta i resolver personalizzati per il dominio example.com.

apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    addonmanager.kubernetes.io/mode: EnsureExists
  name: kube-dns
  namespace: kube-system
data:
  stubDomains: |
    {
      "example.com": [
        "8.8.8.8",
        "8.8.4.4",
        "1.1.1.1",
        "1.0.0.1"
      ]
    }

Esegui il comando seguente per aprire un editor di testo:

kubectl edit configmap kube-dns -n kube-system

Sostituisci i contenuti del file con il manifest, quindi esci dall'editor di testo per applicare il manifest al cluster.

Server dei nomi a monte

Se modifichi l'oggetto ConfigMap per kube-dns in modo da includere upstreamNameservers, kube-dns inoltra tutte le richieste DNS ad eccezione di *.cluster.local a tali server. Sono inclusi metadata.internal e *.google.internal, che non sono risolvibili dal server a monte.

Se attivi Workload Identity o qualsiasi carico di lavoro che si basa sulla risoluzione di metadata.internal, per mantenere la risoluzione dei nomi di *.internal aggiungi un stubDomain al ConfigMap.

data:
  stubDomains: |
    {
      "internal": [
        "169.254.169.254"
      ]
    }
  upstreamNameservers: |
    ["8.8.8.8"]

Problemi noti

Limite dominio di ricerca

Esiste un limite di 6 domini di ricerca DNS per /etc/resolv.conf. Se definisci più di 6 domini di ricerca, viene visualizzato il seguente avviso quando esegui il comando kubectl describe pod:

Search Line limits were exceeded, some search paths have been omitted, the applied search line is: default.svc.cluster.local svc.cluster.local cluster.local c.<project ID>.internal google.internal

Questo avviso viene registrato in Cloud Logging nella sezione Log dei container.

Per risolvere il problema, rimuovi i percorsi di ricerca aggiuntivi dalla configurazione.

Limitazioni delle prestazioni con kube-dns

Se stai riscontrando un'elevata latenza con le ricerche DNS o errori di risoluzione DNS con il provider kube-dns predefinito, il problema potrebbe essere dovuto al fatto che il tuo carico di lavoro esegue frequenti ricerche DNS o utilizza una densità di pod per nodo più elevata.

Per migliorare i tempi di ricerca DNS, puoi scegliere una delle seguenti opzioni:

Passaggi successivi

  • Leggi una panoramica del DNS del cluster in GKE.
  • Consulta la pagina DNS per servizi e pod per una panoramica generale dell'utilizzo del DNS nei cluster Kubernetes.