Depuración de conexiones de red entre pods
Revise las opciones y estrategias para depurar problemas de conexión entre pods.
Compruebe el estado de los componentes del clúster y los pods de red
Siga estos pasos para comprobar el estado de los componentes. Se pueden producir problemas de red si los componentes del clúster no están actualizados o no están en buen estado.
-
Compruebe que el nodo maestro y los nodos trabajadores del clúster se ejecuten en una versión soportada y estén en buen estado. Si el maestro o los trabajadores del clúster no ejecutan una versión soportada, realice las actualizaciones necesarias para que ejecuten una versión soportada. Si el estado de alguno de los componentes no es
Normal
oReady
, revise los estados de salud del maestro del clúster, estados del clúster, estados de los nodos trabajadores, o pasos para solucionar problemas deCritical
oNotReady
nodos trabajadores para obtener más información. Asegúrese de que se resuelvan los problemas relacionados antes de continuar.Para comprobar la versión y el estado del nodo maestro del clúster:
ibmcloud ks cluster get -c <cluster-id>
Para comprobar las versiones y el estado del nodo trabajador:
ibmcloud ks workers -c <cluster-id>
-
Para cada nodo trabajador, verifique que Calico y los pods DNS del clúster están presentes y en ejecución en un estado correcto.
-
Ejecute el comando para obtener los detalles de los pods de su clúster.
kubectl get pods -A -o wide | grep -e calico -e coredns
-
En la salida, asegúrese de que el clúster incluya los pods siguientes. Asegúrese de que el estado de cada pod sea
Running
y de que los pods no tengan demasiados reinicios.- Exactamente un pod de
calico-node
por nodo trabajador. - Al menos un pod de
calico-typha
por clúster. Los clústeres más grandes pueden tener más de uno. - Exactamente un pod de
calico-kube-controllers
por clúster. - Al menos un pod de
coredns
por clúster. La mayoría de los racimos tienen trescoredns
vainas; los racimos más grandes pueden tener más. - Exactamente una vaina
coredns-autoscaler
.
Salida de ejemplo
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED READINESS GATES calico-system calico-kube-controllers-1a1a1a1 1/1 Running 0 16h 172.17.87.11 192.168.0.28 <none> <none> calico-system calico-node-1a1a1a1 1/1 Running 0 16h 192.168.0.28 192.168.0.28 <none> <none> calico-system calico-node-1a1a1a1 1/1 Running 0 16h 192.168.0.27 192.168.0.27 <none> <none> calico-system calico-typha-1a1a1a1 1/1 Running 0 16h 192.168.0.28 192.168.0.28 <none> <none> kube-system coredns-867bfb84df-1a1a1a1 1/1 Running 0 16h 172.17.87.1 192.168.0.28 <none> <none> kube-system coredns-867bfb84df-1a1a1a1 1/1 Running 0 16h 172.17.87.15 192.168.0.28 <none> <none> kube-system coredns-867bfb84df-1a1a1a1 1/1 Running 0 16h 172.17.87.14 192.168.0.28 <none> <none> kube-system coredns-autoscaler-1a1a1a1 1/1 Running 0 16h 172.17.87.2 192.168.0.28 <none> <none>
- Exactamente un pod de
-
Si alguno de los pods listados no está presente o no está en buen estado, pase por el clúster y por la documentación de resolución de problemas de nodo trabajador incluida en los pasos anteriores. Asegúrese de que los problemas con los pods en este paso se resuelvan antes de continuar.
-
Depurar con pods de prueba
Para determinar la causa de los problemas de red en los pods, puede crear un pod de prueba en cada uno de los nodos trabajadores. A continuación, puede ejecutar pruebas y observar la actividad de red dentro del pod, lo que puede revelar el origen del problema.
Configuración de los pods
-
Cree un nuevo espacio de nombres privilegiado para los pods de prueba. La creación de un nuevo espacio de nombres impide que las políticas o configuraciones personalizadas de los espacios de nombres existentes afecten a los pods de prueba. En este ejemplo, el nuevo espacio de nombres se denomina
pod-network-test
.Cree el espacio de nombres.
kubectl create ns pod-network-test
-
Cree y aplique el siguiente conjunto de demonios para crear un pod de prueba en cada nodo.
apiVersion: apps/v1 kind: DaemonSet metadata: labels: name: webserver-test app: webserver-test name: webserver-test spec: selector: matchLabels: name: webserver-test template: metadata: labels: name: webserver-test app: webserver-test spec: tolerations: - operator: "Exists" containers: - name: webserver securityContext: privileged: true image: us.icr.io/armada-master/network-alpine:latest env: - name: ENABLE_ECHO_SERVER value: "true" - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name restartPolicy: Always terminationGracePeriodSeconds: 1 ```
-
Aplique el daemonset para desplegar pods de prueba en los nodos trabajadores.
kubectl apply --namespace pod-network-test -f <daemonset-file>
- Compruebe que los pods se inician correctamente listando todos los pods del espacio de nombres.
kubectl get pods --namespace pod-network-test -o wide
Ejecución de pruebas dentro de los pods
Ejecute los mandatos curl
, ping
y nc
para probar la conexión de red de cada pod y el mandato dig
para probar el DNS del clúster. Revise cada salida y, a continuación, consulte Identificación de problemas para averiguar qué pueden significar los resultados.
-
Liste los pods de prueba y anote el nombre y la IP de cada pod.
kubectl get pods --namespace pod-network-test -o wide
Salida de ejemplo
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES webserver-test-1a1a1 1/1 Running 0 68s 172.17.36.169 10.245.0.4 <none> <none> webserver-test-1a1a1 1/1 Running 0 68s 172.17.61.240 10.245.0.5 <none> <none>
-
Ejecute el comando
exec
para iniciar sesión en un pod.kubectl exec -it --namespace pod-network-test <pod_name> -- sh
-
Ejecute el mandato
curl
en el pod y anote la salida. Especifique la IP del pod en el que no inició sesión. Esto prueba la conexión de red entre pods en nodos diferentes.curl <pod_ip>:8080
Salida satisfactoria de ejemplo.
Hostname: webserver-test-t546j Pod Information: node name: env var NODE_NAME not set pod name: webserver-test-t546j pod namespace: env var POD_NAMESPACE not set pod IP: env var POD_IP not set Connection Information: remote address: 172.17.36.169 remote port: 56042 local address: 172.17.61.240 local port: 8080
-
Ejecute el mandato
ping
en el pod y anote la salida. Especifique la IP del pod en el que no inició sesión con el comandoexec
. Esto prueba la conexión de red entre pods en nodos diferentes.ping -c 5 <pod_ip>
Salida satisfactoria de ejemplo.
PING 172.30.248.201 (172.30.248.201) 56(84) bytes of data. 64 bytes from 172.30.248.201: icmp_seq=1 ttl=62 time=0.473 ms 64 bytes from 172.30.248.201: icmp_seq=2 ttl=62 time=0.449 ms 64 bytes from 172.30.248.201: icmp_seq=3 ttl=62 time=0.381 ms 64 bytes from 172.30.248.201: icmp_seq=4 ttl=62 time=0.438 ms 64 bytes from 172.30.248.201: icmp_seq=5 ttl=62 time=0.348 ms --- 172.30.248.201 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4086ms rtt min/avg/max/mdev = 0.348/0.417/0.473/0.046 ms
-
Ejecute el mandato
nc
en el pod y anote la salida. Especifique la IP del pod en el que no inició sesión con el comandoexec
. Esto prueba la conexión de red entre pods en nodos diferentes.nc -vzw 5 <pod_ip> 8080
Salida satisfactoria de ejemplo.
nc -vzw 5 172.17.61.240 8080 172.17.61.240 (172.17.61.240:8080) open
-
Ejecute los mandatos
dig
para probar el DNS.dig +short kubernetes.default.svc.cluster.local
Salida de ejemplo
172.21.0.1
dig +short ibm.com
Salida de ejemplo
23.50.74.64
-
Ejecute los comandos
curl
para probar una conexión TCP o HTTPS completa al servicio. Este ejemplo prueba la conexión entre el pod y el maestro de clúster recuperando la información de versión del clúster. La recuperación correcta de la versión del clúster indica una conexión en buen estado.curl -k https://kubernetes.default.svc.cluster.local/version
Salida de ejemplo
{ "major": "1", "minor": "25", "gitVersion": "v1.25.14+bcb9a60", "gitCommit": "3bdfba0be09da2bfdef3b63e421e6a023bbb08e6", "gitTreeState": "clean", "buildDate": "2023-10-30T21:33:07Z", "goVersion": "go1.19.13 X:strictfipsruntime", "compiler": "gc", "platform": "linux/amd64" }
-
Salga del pod.
exit
-
Repita los pasos anteriores con los pods restantes.
Identificación de problemas
Revise las salidas de la sección anterior para ayudar a encontrar la causa de los problemas de red de pod. Esta sección lista algunas causas comunes que se pueden identificar en la sección anterior.
-
Si los mandatos funcionan normalmente en los pods de prueba, pero sigue teniendo problemas de red en los pods de aplicación en el espacio de nombres predeterminado, es posible que haya problemas relacionados específicamente con la aplicación.
- Es posible que tenga políticas de seguridad de red de Calico o Kubernetes que restrinjan el tráfico de red. Si se aplica una política de red a un pod, se descarta todo el tráfico que no está permitido específicamente por dicha política. Para obtener más información sobre las políticas de red, consulte la documentación deKubernetes.
- Si utiliza Istio o Red Hat OpenShift Service Mesh, es posible que haya problemas de configuración de servicio que descartan o bloquean el tráfico entre pods. Para obtener más información, consulte la documentación de resolución de problemas para Istio y Red Hat OpenShift Service Mesh.
- El problema puede estar relacionado con errores en la aplicación en lugar de con el clúster, y puede requerir su propia resolución de problemas independiente.
-
Si los mandatos
curl
,ping
onc
han fallado para determinados pods, identifique en qué nodos trabajadores están dichos pods. Si el problema sólo existe en algunos de los nodos trabajadores, sustituya estos nodos trabajadores o consulte información adicional sobre resolución de problemas de nodos trabajadores. -
Si las búsquedas de DNS de los mandatos
dig
han fallado, compruebe que el DNS del clúster de esté configurado correctamente.
Si todavía no puede resolver el problema de red de pod, abra un caso de soporte e incluya una descripción detallada del problema, cómo ha intentado resolverlo, qué tipos de pruebas ha ejecutado y registros relevantes para los pods y los nodos trabajadores. Para obtener más información sobre cómo abrir un caso de soporte y qué información incluir, consulte la guía de depuración general.