Descubrimiento de servicios y DNS

En esta página, se describe cómo Google Kubernetes Engine (GKE) implementa el descubrimiento de servicios y el DNS administrado. Para obtener una descripción general sobre cómo usar el DNS en los clústeres de Kubernetes, consulta el artículo sobre DNS para servicios y pods.

Descubrimiento de servicios y el complemento kube-dns

En Kubernetes, el descubrimiento de servicios se implementa con nombres de servicio generados de forma automática que se asignan a la dirección IP del servicio. Los nombres de servicios siguen una especificación estándar: my-svc.my-namespace.svc.my-zone. Los pods también pueden acceder a servicios externos, como example.com, a través de sus nombres. Consulta el artículo sobre DNS para servicios y pods a fin de obtener más información sobre el comportamiento del DNS en Kubernetes.

GKE proporciona un DNS administrado para la resolución de nombres de servicios y de nombres externos. kude-dns lo implementa, y es un complemento del clúster que se implementa de forma predeterminada en todos los clústeres de GKE. kude-dns se ejecuta como una implementación que programa pods kube-dns redundantes en nodos del clúster. Los pods kube-dns se encuentran en el espacio de nombres kube-system. Se puede acceder a la implementación de kube-dns a través del servicio correspondiente que agrupa los pods kube-dns y les proporciona una sola dirección IP. De forma predeterminada, todos los pods de un clúster usan este servicio para resolver las consultas de DNS.

Un diagrama de la relación entre los pods y el servicio de kube-dns, como se describe en el párrafo anterior

kube-dns escala para satisfacer las demandas del DNS del clúster. kube-dns-autoscaler controla el escalamiento que se implementa de forma predeterminada en todos los clústeres de GKE. kube-dns-autoscaler ajusta la cantidad de réplicas en la implementación kube-dns en función de la cantidad de nodos y núcleos del clúster.

Cómo se configura el DNS del pod

El agente kubelet que se ejecuta en cada nodo configura el etc/resolv.conf del pod para usar el ClusterIP del servicio kube-dns. A continuación, se muestra un ejemplo de esta configuración. En este ejemplo, la dirección IP del servicio kube-dns es 10.0.0.10 (esta dirección IP será diferente en otros clústeres):

# 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 es el servidor de nombres autorizado para el dominio del clúster (cluster.local) y resuelve los nombres externos de forma recurrente. Los nombres cortos que no están completamente calificados, como myservice, primero se completan con rutas de acceso de búsqueda local. Por ejemplo, myservice.default.svc.cluster.local, myservice.svc.cluster.local, myservice.cluster.local, myservice.c.my-project-id.internal y myservice.google.internal.

Próximos pasos

  • Obtén información sobre cómo proporcionar una resolución de DNS escalable con NodeLocal DNSCache para clústeres que requieren grandes volúmenes de consultas de DNS.