Solución de problemas de conexión a pods o servicios en un clúster de AKS (tráfico interno)
En este artículo se describe cómo solucionar problemas de conexión con pods o servicios como tráfico interno desde el mismo clúster de Microsoft Azure Kubernetes Services (AKS).
Requisitos previos
La herramienta kubectl de Kubernetes o una herramienta similar para conectarse al clúster. Para instalar kubectl mediante la CLI de Azure, ejecute el comando az aks install-cli .
La herramienta de línea de comandos apt-get para controlar paquetes.
La herramienta Dirección URL de cliente (cURL) o una herramienta de línea de comandos similar.
La herramienta de línea de comandos Netcat (
nc
) para conexiones TCP.
Lista de comprobación de solución de problemas
Paso 1: Configurar el pod de prueba y el puerto de servidor remoto
Configure el pod de prueba y asegúrese de que el puerto necesario está abierto en el servidor remoto. Desde el pod de origen (o un pod de prueba que se encuentra en el mismo espacio de nombres que el pod de origen), siga estos pasos:
Inicie un pod de prueba en el clúster mediante la ejecución del comando kubectl run :
kubectl run -it --rm aks-ssh --namespace <namespace> --image=debian:stable
Después de obtener acceso al pod, ejecute los siguientes
apt-get
comandos para instalar los paquetes DNS Utils, cURL y Netcat:apt-get update -y apt-get install dnsutils -y apt-get install curl -y apt-get install netcat-openbsd -y
Una vez instalados los paquetes, ejecute el siguiente comando cURL para probar la conectividad con la dirección IP del pod:
curl -Iv http://<pod-ip-address>:<port>
Ejecute el comando Netcat para comprobar si el servidor remoto abrió el puerto necesario:
nc -z -v <endpoint> <port>
Paso 2: Visualización de información operativa sobre pods, contenedores, servicios de Kubernetes y puntos de conexión
Con kubectl y cURL en la línea de comandos, siga estos pasos para comprobar que todo funciona según lo previsto:
Compruebe que el pod de destino está en funcionamiento:
kubectl get pods -n <namespace-name>
Si el pod de destino funciona correctamente, el estado del pod se muestra como
Running
y el pod se muestra comoREADY
.NAME READY STATUS RESTARTS AGE my-other-pod 1/1 Running 0 44m my-pod 1/1 Running 0 44m
Busque errores de acceso en los registros del pod:
kubectl logs <pod-name> -n <namespace-name>
Busque los registros de pod de un contenedor individual en un pod de varios contenedores:
kubectl logs <pod-name> -n <namespace-name> -c <container-name>
Si la aplicación que está dentro del pod se reinicia repetidamente, vea los registros de pod de una instancia de contenedor anterior para obtener los mensajes de salida:
kubectl logs <pod-name> --previous
Para el caso de varios contenedores, use el siguiente comando:
kubectl logs <pod-name> -c <container-name> --previous
Compruebe si hay alguna directiva de red que pueda bloquear el tráfico:
kubectl get networkpolicies -A
Debería ver una salida similar a la tabla siguiente.
NAMESPACE NAME POD-SELECTOR AGE kube-system konnectivity-agent app=konnectivity-agent 4d1h
Si ve alguna otra directiva de red creada de forma personalizada, compruebe si esa directiva está bloqueando el acceso a los pods o desde ellos.
Compruebe si puede acceder a la aplicación desde la dirección IP del servicio. En primer lugar, muestre los detalles sobre el recurso de servicio, como la dirección IP externa y el puerto, ejecutando el
kubectl get services
comando :kubectl get services -n <namespace-name>
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-service LoadBalancer 10.0.21.43 20.119.121.232 80:31773/TCP 28s
A continuación, ejecute cURL mediante la dirección IP del servicio y el puerto para comprobar si puede acceder a la aplicación:
curl -Iv http://20.119.121.232:80 . . . < HTTP/1.1 200 OK HTTP/1.1 200 OK
Obtenga más información detallada sobre el servicio:
kubectl describe services <service-name> -n <namespace-name>
Compruebe la dirección IP del pod:
kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE my-pod 1/1 Running 0 12m 10.244.0.15 aks-agentpool-000000-vmss000000
Compruebe que la dirección IP del pod existe como punto de conexión en el servicio:
kubectl describe services my-cluster-ip-service
Name: my-cluster-ip-service Namespace: default Selector: app=my-pod Type: ClusterIP IP Family Policy: SingleStack IP Families: IPv4 IP: 10.0.174.133 IPs: 10.0.174.133 Port: <unset> 80/TCP TargetPort: 80/TCP Endpoints: 10.244.0.15:80 # <--- Here
Compruebe los puntos de conexión directamente:
kubectl get endpoints
NAME ENDPOINTS AGE my-cluster-ip-service 10.244.0.15:80 14m
Si la conexión a un servicio no funciona, reinicie los
kube-proxy
pods y CoreDNS:kubectl delete pods -n kube-system -l component=kube-proxy kubectl delete pods -n kube-system -l k8s-app=kube-dns
Compruebe que el nodo no está sobreutilizado:
kubectl top nodes
Nota:
También puede usar Azure Monitor para obtener los datos de uso del clúster.
Ponte en contacto con nosotros para obtener ayuda
Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.