Resolución DNS del módulo Kubernetes

Resolución DNS del módulo Kubernetes

Actualmente puedo resolver todos los servicios a direcciones IP y telnet y hacerles ping. No se pueden resolver pods en direcciones IP. Aunque puede buscar direcciones IP de pods con kubectl y telnet y hacerles ping. ¿Cómo necesito configurar DNS para resolver pods en Kubernetes 1.9.6, dns-controller:1.9.1?

Respuesta1

Es un poco más fácil trabajar con la respuesta de @mk_sta; puede ejecutar esta línea para probar su DNS:

kubectl run busybox --image=busybox --rm --attach --command -- sh -c "cat /etc/resolv.conf; nslookup $POD.$NAMESPACE.pod.cluster.local"

Salida de ejemplo:

If you don't see a command prompt, try pressing enter.

Server:         100.64.0.10
Address:        100.64.0.10:53


*** Can't find $POD.$NAMESPACE.pod.cluster.local: No answer

deployment.apps "busybox" deleted

La ventaja es que elimina la implementación/pods después de la ejecución.


Para mí, el problema fue que mis pods están en un conjunto con estado y, por lo tanto, la resolución DNS del pod es un poco diferente. Tienes que usar (por ejemplo):

web-{0..N-1}.nginx.default.svc.cluster.local

pod-N.$GOVERNING_STATEFULSET.$NAMESPACE.svc.cluster.local

https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

Eso es algo que puede salir mal. Es posible que desee proporcionar más información sobre su caso particular.

Respuesta2

Puede crear un Pod de prueba busyboxpara verificar la función de resolución de DNS y depurar el problema:

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - image: busybox
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
    name: busybox
  restartPolicy: Always

Verifique /etc/resolv.confel archivo en el busyboxPod:

kubectl exec busybox cat /etc/resolv.conf

El contenido debería ser así:

search default.svc.cluster.local svc.cluster.local cluster.local .....
nameserver 10.0.0.10
options ndots:5

Realice una solicitud de búsqueda al Pod de destino en su clúster:

kubectl exec -ti busybox -- nslookup XXX-XX-XX-XX.default.pod.cluster.local

En caso de que no haya resuelto el nombre DNS de los Pods, puede verificar los registros de los componentes DNS con kubectl logsel comando:

kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c kubedns
kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c dnsmasq
kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c healthz

Respuesta3

La mejor manera que he visto de resolver esto es creando un Jump Pod.

Paso 1. Cree el pod con un archivo de especificaciones.

cat << ENDL >> jumpod.yml
apiVersion: v1
kind: Pod
metadata:
  name: jumpod
  namespace: default
spec:
  containers:
  - name: busybox
    image: busybox:1.28
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
  restartPolicy: Always
ENDL

Paso 2. Aplique o cree Ether el pod en el clúster y luego en un nodo. Tenga en cuenta que estará ubicado en el espacio de nombres predeterminado.

kubectl apply -f jumpod.yml

Ahora puede usar este pod para obtener el DNS de un pod o servicio.

Por ejemplo:

Búsqueda de pods Paso 3. Obtenga la dirección IP del pod que está buscando.

kubectl get pods -o wide

Paso 4. Utilice el Jump Pod para realizar una búsqueda nslookup

kubectl exec -it jumpod ping 10.244.0.149

Servicio de búsqueda Paso 5. Busque la dirección IP de los servicios que desee utilizar.

kubectl get services --all-namespaces

Paso 6. Ahora use el módulo de salto para realizar una búsqueda en la dirección IP del servicio.

kubectl exec -it jumpod nslookup 10.245.150.103

A continuación se muestra un ejemplo de cómo el clúster principal que usa nslookup no funcionará y cómo funcionará el BusyBox (también conocido como Jump Pod).

$ kubectl exec -it jumpod nslookup 10.245.150.103
Server:    10.245.0.10
Address 1: 10.245.0.10 kube-dns.kube-system.svc.cluster.local
Name:      10.245.150.103
Address 1: 10.245.150.103 hello.develop.svc.cluster.local
$ nslookup 10.245.150.103
Server:     8.8.8.8
Address:    8.8.8.8#53
** server can't find 103.150.245.10.in-addr.arpa: NXDOMAIN

¡Espero que esto ayude!

PD: Si por casualidad necesitas exportar el archivo DNS que creaste dentro del pod, puedes usar esto.

kubectl cp default/POD_NAME:bin/FILE_NAME /Users/username/FILE_NAME

o simplemente use > para exportarlo a un archivo.

información relacionada