Red de conocimiento informático - Conocimiento informático - Cómo configurar Kubernetes DNS

Cómo configurar Kubernetes DNS

Crea un Pod simple para usarlo como entorno de prueba

Crea un archivo llamado Busybox.yaml con el siguiente contenido:

busybox.yaml?

p>

apiVersion: v1

tipo: Pod

metadatos:

nombre: ocupadobox

espacio de nombres: predeterminado

especificación:

contenedores:

- nombre: ocupadobox

imagen: ocupadobox

comando:

- dormir

- "3600"

imagePullPolicy: IfNotPresent

restartPolicy: Siempre

Luego crea un pod usando este archivo y verificar su estado:

$ kubectl create -f busybox.yaml

pod "busybox" creado

$ kubectl get pods togetherbox

NOMBRE ?LISTO ESTADO REINICIA ? EDAD

busybox ? 1/1 ? En ejecución ?lt;some-timegt;

Una vez que el pod se está ejecutando, puede realizar nslookup en el ambiente . Si ve algo como lo siguiente, DNS está funcionando bien.

$ kubectl exec -ti ocupadobox -- nslookup kubernetes.default

Servidor: 10.0.0.10

Dirección 1: 10.0.0.10

Nombre: ?kubernetes.default

Dirección 1: 10.0.0.1

Si el comando nslookup falla, verifique lo siguiente:

Primero verifique la configuración DNS local

Eche un vistazo al archivo resolv.conf.

(Para obtener más información, consulte Herencia de DNS de nodos y problemas conocidos a continuación)

$ kubectl exec busybox cat /etc/resolv.conf

Verifique que las rutas de búsqueda y los servidores de nombres estén configurados de la siguiente manera (tenga en cuenta que las rutas de búsqueda pueden variar entre diferentes proveedores de nube):

buscar default.svc.cluster.local svc.cluster.local cluster.local google.internal c .gce_project_id.internal

nameserver 10.0.0.10

opciones ndots: 5

Los siguientes errores indican un problema con el complemento kube-dns o servicios relacionados:

$ kubectl exec -ti ocupadobox -- nslookup kubernetes.default

Servidor: 10.0.0.10

Dirección 1: 10.0.0.10

nslookup: no se puede resolver 'kubernetes .default'

o

$ kubectl exec -ti ocupadobox -- nslookup kubernetes.default

Servidor: 10.0.0.10

Dirección 1: 10.0.0.10 kube-dns.kube-system.svc.cluster.local

nslookup: no se puede resolver 'kubernetes.default'

Compruebe si el pod DNS se está ejecutando

Utilice el comando kubectl get pods para verificar si el pod DNS se está ejecutando.

$ kubectl get pods --namespace=kube-system -l k8s-app=kube-dns

NOMBRE LISTO ESTADO REINICIA EDAD

...

kube-dns-v19-ezo1y ?3/3 ? Ejecutando ? 0 ?

Si ve que no hay pods en ejecución o el pod ha fallado o se ha completado, entonces en su En el entorno actual, es posible que el complemento DNS no esté implementado de forma predeterminada y tendrá que implementarlo manualmente.

Compruebe si hay errores en el pod DNS

Utilice el comando kubectl logs para ver los registros del demonio DNS.

$ registros de kubectl --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o nombre) -c kubedns

$ registros de kubectl --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o nombre) -c dnsmasq

$ registros de kubectl --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c sidecar

Vea si hay registros sospechosos. Las letras 'W', 'E', 'F' representan advertencias, errores y fallas. Busque entradas con estos niveles de registro y utilice "problemas de Kubernetes" para informar errores inesperados.

¿Está activo el servicio DNS?

Verifique que el servicio DNS esté iniciado utilizando el comando kubectl get service.

$ kubectl get svc --namespace=kube-system

NOMBRE ?CLUSTER-IP EXTERNAL-IP ? PUERTO(S) EDAD

...

kube-dns ?10.0.0.10 ?lt; nonegt; 53/UDP, 53/TCP 1h

...

Si ya has creado el servicio , o debería crearse de forma predeterminada pero no aparece, consulte "Servicios de depuración" para obtener más información.

¿Están expuestos los puntos finales DNS?

Puedes verificar si los puntos finales DNS están expuestos usando el comando kubectl get endpoints.

$ kubectl obtiene ep kube-dns --namespace=kube-system

NOMBRE ¿PUNTOS FINALES? EDAD

kube-dns ? 10.180.3.17:53 1h

Si no ve los puntos finales, consulte la sección Puntos finales en la documentación del servicio de depuración.

Para otros ejemplos de DNS de Kubernetes, consulte el ejemplo de ?cluster-dns en el repositorio de Kubernetes GitHub.

Problemas conocidos

Las instalaciones de Kubernetes no configuran el archivo resolv.conf del nodo para usar el DNS del clúster de forma predeterminada, ya que este proceso es específico de la distribución. Esto puede suceder eventualmente.

La libc de Linux no puede eludir (ver este error de 2005) la limitación de sólo 3 registros de servidor de nombres DNS y 6 registros de búsqueda de DNS. Kubernetes requiere 1 registro de servidor de nombres y 3 registros de búsqueda.

Esto significa que si la instalación local ya utiliza 3 servidores de nombres o utiliza más de 3 búsquedas, algunas de estas configuraciones se perderán. Como solución parcial, el nodo puede ejecutar dnsmasq, lo que proporcionará más entradas de servidor de nombres, pero no más entradas de búsqueda. También puedes usar el indicador kubelet?--resolv-conf?

Si está utilizando Alpine 3.3 o una versión anterior como imagen base, es posible que DNS no funcione correctamente debido a algunos problemas conocidos con Alpine.

resolución DNS de depuración de Kubernetes