Поделиться через


Дополнительные рекомендации см. в руководстве Устранение проблем с подключением к модулям pod или службам в кластере AKS (внутренний трафик)

В этой статье описывается, как устранять проблемы с подключением к модулям pod или службам в качестве внутреннего трафика из того же кластера Microsoft Служба Azure Kubernetes (AKS).

Предварительные требования

Контрольный список по устранению неполадок

Шаг 1. Настройка тестового модуля pod и порта удаленного сервера

Настройте тестовый модуль pod и убедитесь, что необходимый порт открыт на удаленном сервере. В исходном модуле pod (или тестовом модуле pod, который находится в том же пространстве имен, что и исходный pod), выполните следующие действия:

  1. Запустите тестовый модуль pod в кластере, выполнив команду выполнения kubectl:

    kubectl run -it --rm aks-ssh --namespace <namespace> --image=debian:stable
    
  2. После получения доступа к pod выполните следующие apt-get команды, чтобы установить пакеты DNS Utils, cURL и Netcat:

    apt-get update -y
    apt-get install dnsutils -y
    apt-get install curl -y
    apt-get install netcat-openbsd -y
    
  3. После установки пакетов выполните следующую команду cURL, чтобы проверить подключение к IP-адресу pod:

    curl -Iv http://<pod-ip-address>:<port>
    
  4. Выполните команду Netcat, чтобы проверить, открыл ли удаленный сервер необходимый порт:

    nc -z -v <endpoint> <port>
    

Шаг 2. Просмотр операционных сведений о модулях pod, контейнерах, службах Kubernetes и конечных точках

С помощью kubectl и cURL в командной строке выполните следующие действия, чтобы убедиться, что все работает должным образом:

  1. Убедитесь, что целевой модуль pod запущен и работает:

    kubectl get pods -n <namespace-name>
    

    Если целевой модуль pod работает правильно, состояние pod отображается как Running, а модуль pod отображается как READY.

    NAME           READY   STATUS    RESTARTS   AGE
    my-other-pod   1/1     Running   0          44m
    my-pod         1/1     Running   0          44m
    
  2. Выполните поиск журналов pod для ошибок доступа:

    kubectl logs <pod-name> -n <namespace-name>
    
  3. Выполните поиск журналов pod для отдельного контейнера в многоконтайнерном модуле pod:

    kubectl logs <pod-name> -n <namespace-name> -c <container-name>
    
  4. Если приложение, которое находится внутри pod, повторно перезапускается, просмотрите журналы pod предыдущего экземпляра контейнера, чтобы получить сообщения о выходе:

    kubectl logs <pod-name> --previous                      
    

    В случае с несколькимиконтайнерами используйте следующую команду:

    kubectl logs <pod-name> -c <container-name> --previous  
    
  5. Проверьте наличие политик сети, которые могут блокировать трафик:

    kubectl get networkpolicies -A
    

    Выходные данные должны быть примерно такими, как в следующей таблице.

    NAMESPACE     NAME                 POD-SELECTOR             AGE
    kube-system   konnectivity-agent   app=konnectivity-agent   4d1h
    

    Если есть другая сетевая политика, созданная пользователем, проверьте, не блокирует ли эта политика доступ к модулям pod или из них.

  6. Проверьте, можно ли связаться с приложением с IP-адреса службы. Сначала выведите сведения о ресурсе службы, например внешний IP-адрес и порт, выполнив kubectl get services команду:

    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
    

    Затем запустите cURL с помощью IP-адреса службы и порта, чтобы проверить, можно ли связаться с приложением:

    curl -Iv http://20.119.121.232:80
    .
    .
    .
    < HTTP/1.1 200 OK
    HTTP/1.1 200 OK
    
  7. Получите более подробные сведения о службе:

    kubectl describe services <service-name> -n <namespace-name>
    
  8. Проверьте IP-адрес 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. Убедитесь, что IP-адрес pod существует в качестве конечной точки в службе:

    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. Проверьте конечные точки напрямую:

    kubectl get endpoints
    
    NAME                      ENDPOINTS           AGE
    my-cluster-ip-service     10.244.0.15:80      14m
    
  11. Если подключение к службе не работает, перезапустите kube-proxy модули pod CoreDNS:

    kubectl delete pods -n kube-system -l component=kube-proxy
    kubectl delete pods -n kube-system -l k8s-app=kube-dns
    
  12. Убедитесь, что узел не перепользовался:

    kubectl top nodes
    

    Примечание.

    Вы также можете использовать Azure Monitor для получения данных об использовании кластера.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.