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 del clúster.

Descubrimiento de servicios

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.cluster-domain.example. Los Pods también pueden acceder a servicios externos por medio de sus nombres, como example.com. Si deseas obtener más información sobre cómo funciona DNS en Kubernetes, consulta DNS para servicios y Pods.

DNS de clúster en GKE

Los clústeres nuevos de Autopilot usan Cloud DNS y no puedes modificar el proveedor de DNS.

Para Standard, GKE proporciona las siguientes opciones de DNS de clúster para resolver los nombres de los servicios y los nombres externos:

  • kube-dns: un complemento de clúster que se implementa de forma predeterminada en todos los clústeres de GKE
  • Cloud DNS: una infraestructura de DNS de clúster administrada por la nube que aprovecha Cloud DNS y no requiere la administración de servidores DNS dentro del clúster, como kube-dns.

También puedes registrar tus servicios en el Directorio de servicios para GKE.

GKE también proporciona NodeLocal DNSCache como un complemento opcional que se puede usar con kube-dns o Cloud DNS.

kube-dns

kube-dns es el proveedor de DNS predeterminado para los clústeres estándar y el único proveedor de DNS para los clústeres de Autopilot que ejecutan versiones anteriores a 1.25.9-gke.400 y 1.26.4-gke.500.

kube-dns se ejecuta como un Deployment que programa los pods de kube-dns en nodos del clúster.

Para obtener más información sobre kube-dns, consulta Usa kube-dns.

Cloud DNS

Cloud DNS es el único proveedor de DNS para los clústeres Autopilot que ejecutan la versión 1.25.9-gke.400 y posteriores, y la versión 1.26.4-gke.500 y posteriores.

Cloud DNS proporciona la resolución de DNS del Pod y del servicio sin un proveedor de DNS alojado en el clúster como kube-dns. El controlador de Cloud DNS aprovisiona automáticamente registros DNS para Pods y servicios en Cloud DNS para ClusterIP, y servicios de nombre externo y sin interfaz gráfica.

Para obtener información sobre cómo configurar Cloud DNS, consulta Usar Cloud DNS para GKE.

NodeLocal DNSCache

NodeLocal DNSCache se ejecuta como un DaemonSet que programa un Pod de caché de DNS en cada nodo del clúster. Esta caché de DNS mejora la latencia de búsqueda de DNS, hace que los tiempos de búsqueda de DNS sean más coherentes y puede reducir la cantidad de consultas de DNS a kube-dns o Cloud DNS.

Para obtener información sobre cómo configurar NodeLocal DNSCache, consulta Configura NodeLocal DNSCache.

Descubrimiento de servicios fuera de un único clúster

Puedes configurar el descubrimiento de servicios más allá del permiso de un único clúster usando uno de los siguientes métodos.

Permiso de la VPC de Cloud DNS

Un clúster que usa Cloud DNS para el DNS del clúster debe operar en uno de estos dos modos disponibles: permiso del clúster de GKE o permiso de la nube privada virtual (VPC).

Cuando configuras el permiso de un clúster, los registros DNS solo se pueden resolver dentro del clúster mediante el esquema <svc>.<ns>.svc.cluster.local. Este es el mismo comportamiento que tiene kube-dns.

Cuando configuras un clúster en el permiso de la VPC, los registros DNS de los servicios del clúster se pueden resolver en toda la VPC. Esto significa que los clientes en la misma VPC o conectados a la VPC mediante Cloud VPN o Cloud Interconnect pueden resolver directamente los registros DNS de los servicios en el clúster de GKE. También puedes configurar nombres de DNS de clúster únicos para que los clientes que no sean de GKE puedan resolver los registros DNS. Por ejemplo, un cliente que no sea de GKE podría resolver gke-svc.ns.svc.cluster1 desde gke-svc.ns.svc.cluster2.

Si deseas obtener más información sobre el DNS de permiso de la VPC, consulta Usa Cloud DNS para GKE.

Service de varios clústeres

Los servicios de varios clústeres proporcionan un descubrimiento de servicios de varios clústeres y un balanceo de cargas para GKE que aprovecha el objeto de servicio existente. Los servicios de varios clústeres son detectables y accesibles en cualquier clúster de GKE con una sola dirección IP virtual. Este es el mismo comportamiento que tiene un servicio ClusterIP al que se puede acceder en un solo clúster.

Los servicios de varios clústeres agregan servicios entre clústeres y permiten que se estos puedan direccionar como un solo registro DNS de varios clústeres mediante el esquema <svc>.<ns>.svc.clusterset.local. Esto proporciona un nombre único para un servicio determinado que es coherente y que se puede direccionar desde cualquier clúster de GKE que use los servicios de varios clústeres.

Para obtener más información sobre los servicios de varios clústeres, consulta Servicios de varios clústeres.

Directorio de servicios para GKE

El Directorio de servicios para GKE proporciona una sola vista de los servicios en todas tus implementaciones de Kubernetes. El Directorio de servicios puede registrar servicios de GKE y de terceros en un solo registro. El Directorio de servicios es particularmente útil si deseas lo siguiente:

  • Un solo registro para las aplicaciones de Kubernetes y de terceros para que se detecten entre sí
  • Una herramienta de descubrimiento de servicios administrados
  • Almacenar metadatos sobre el servicio a los que otros clientes puedan acceder
  • Configurar permisos de acceso en un nivel por servicio

Los servicios del Directorio de servicios se pueden resolver mediante DNS, HTTP y gRPC. El Directorio de servicios está integrado en Cloud DNS y puede propagar registros de Cloud DNS que coinciden con los servicios del Directorio de servicios.

Si deseas obtener más información, consulta Configura el Directorio de servicios para GKE.

/etc/resolv.conf

Para los pods que usan la Política de DNS ClusterFirst, el valor de /etc/resolv.conf depende de las funciones habilitadas en el clúster:

Cloud DNS para GKE NodeLocal DNSCache Valor /etc/resolv.conf
Habilitado Enabled 169.254.20.10
Habilitado Inhabilitado 169.254.169.254
Inhabilitado Habilitado Dirección IP del servicio de kube-dns
Inhabilitado Inhabilitado Dirección IP del servicio de kube-dns

¿Qué sigue?

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