Service Discovery und DNS

Auf dieser Seite wird beschrieben, wie in Google Kubernetes Engine (GKE) Service Discovery und verwaltetes DNS umgesetzt werden. Eine allgemeine Übersicht über die Verwendung von DNS in Kubernetes-Clustern finden Sie auf der Seite DNS für Services und Pods.

Service Discovery und das Add-on kube-dns

In Kubernetes wird Service Discovery mit automatisch generierten Servicenamen umgesetzt, die der IP-Adresse des Service zugeordnet sind. Servicenamen folgen einer Standardspezifikation: my-svc.my-namespace.svc.my-zone. Pods können auf externe Services wie example.com auch über deren Namen zugreifen. Weitere Informationen zum Verhalten von DNS in Kubernetes finden Sie auf der Seite DNS für Services und Pods.

GKE bietet verwaltetes DNS zum Zuordnen von Service- und externen Namen. Die Implementierung erfolgt mit kube-dns, einem Cluster-Add-on, das standardmäßig in allen GKE-Clustern bereitgestellt wird. kube-dns wird als Deployment ausgeführt, die redundante kube-dns-Pods auf Knoten im Cluster plant. Die kube-dns-Pods befinden sich im kube-system-Namespace. Auf das kube-dns-Deployment kann über einen entsprechenden Service zugegriffen werden, der die kube-dns-Pods gruppiert und ihnen eine einzige IP-Adresse zuweist. Standardmäßig verwenden alle Pods in einem Cluster diesen Service, um DNS-Abfragen zuzuordnen.

Ein Diagramm zur Beziehung zwischen Pods und dem kube-dns-Service, wie im vorherigen Abschnitt beschrieben

kube-dns skaliert, um die DNS-Anforderungen des Clusters zu erfüllen. Diese Skalierung wird vom kube-dns-autoscaler gesteuert, der standardmäßig in allen GKE-Clustern bereitgestellt wird. kube-dns-autoscaler passt die Anzahl der Replikate im Deployment von kube-dns an die Anzahl der Knoten und Kerne im Cluster an.

Pod-DNS konfigurieren

Der auf jedem Knoten ausgeführte kubelet-Agent konfiguriert das etc/resolv.conf des Pods für die Verwendung der ClusterIP des kube-dns-Service. Im Folgenden sehen Sie ein Beispiel für diese Konfiguration. In diesem Beispiel lautet die IP-Adresse des kube-dns-Service 10.0.0.10. Sie unterscheidet sich in anderen Clustern.

# cat /etc/resolv.conf
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 ist der autoritative Nameserver für die Cluster-Domain cluster.local und löst externe Namen rekursiv auf. Kurznamen, die nicht voll qualifiziert sind, wie myservice, werden zuerst mit lokalen Suchpfaden vervollständigt. Zum Beispiel myservice.default.svc.cluster.local, myservice.svc.cluster.local, myservice.cluster.local, myservice.c.my-project-id.internal und myservice.google.internal.

Nächste Schritte

  • Mit NodeLocal DNSCache eine skalierbare DNS-Zuordnung für Cluster bereitstellen, die große Mengen an DNS-Abfragen benötigen