Compartir a través de


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

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:

  1. 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
    
  2. 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
    
  3. 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>
    
  4. 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:

  1. 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 Runningy el pod se muestra como READY.

    NAME           READY   STATUS    RESTARTS   AGE
    my-other-pod   1/1     Running   0          44m
    my-pod         1/1     Running   0          44m
    
  2. Busque errores de acceso en los registros del pod:

    kubectl logs <pod-name> -n <namespace-name>
    
  3. 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>
    
  4. 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  
    
  5. 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.

  6. 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
    
  7. Obtenga más información detallada sobre el servicio:

    kubectl describe services <service-name> -n <namespace-name>
    
  8. 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  
    
  9. 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
    
  10. Compruebe los puntos de conexión directamente:

    kubectl get endpoints
    
    NAME                      ENDPOINTS           AGE
    my-cluster-ip-service     10.244.0.15:80      14m
    
  11. 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
    
  12. Compruebe que el nodo no está sobreutilizado:

    kubectl top nodes
    

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.