Дополнительные рекомендации см. в руководстве Устранение проблем с подключением к модулям pod или службам в кластере AKS (внутренний трафик)
В этой статье описывается, как устранять проблемы с подключением к модулям pod или службам в качестве внутреннего трафика из того же кластера Microsoft Служба Azure Kubernetes (AKS).
Предварительные требования
Средство Kubernetes kubectl или аналогичное средство для подключения к кластеру. Чтобы установить kubectl с помощью Azure CLI, выполните команду az aks install-cli.
Средство командной строки apt-get для обработки пакетов.
Средство URL-адреса клиента (cURL) или аналогичное средство командной строки.
Средство командной строки Netcat (
nc
) для TCP-подключений.
Контрольный список по устранению неполадок
Шаг 1. Настройка тестового модуля pod и порта удаленного сервера
Настройте тестовый модуль pod и убедитесь, что необходимый порт открыт на удаленном сервере. В исходном модуле pod (или тестовом модуле pod, который находится в том же пространстве имен, что и исходный pod), выполните следующие действия:
Запустите тестовый модуль pod в кластере, выполнив команду выполнения kubectl:
kubectl run -it --rm aks-ssh --namespace <namespace> --image=debian:stable
После получения доступа к 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
После установки пакетов выполните следующую команду cURL, чтобы проверить подключение к IP-адресу pod:
curl -Iv http://<pod-ip-address>:<port>
Выполните команду Netcat, чтобы проверить, открыл ли удаленный сервер необходимый порт:
nc -z -v <endpoint> <port>
Шаг 2. Просмотр операционных сведений о модулях pod, контейнерах, службах Kubernetes и конечных точках
С помощью kubectl и cURL в командной строке выполните следующие действия, чтобы убедиться, что все работает должным образом:
Убедитесь, что целевой модуль 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
Выполните поиск журналов pod для ошибок доступа:
kubectl logs <pod-name> -n <namespace-name>
Выполните поиск журналов pod для отдельного контейнера в многоконтайнерном модуле pod:
kubectl logs <pod-name> -n <namespace-name> -c <container-name>
Если приложение, которое находится внутри pod, повторно перезапускается, просмотрите журналы pod предыдущего экземпляра контейнера, чтобы получить сообщения о выходе:
kubectl logs <pod-name> --previous
В случае с несколькимиконтайнерами используйте следующую команду:
kubectl logs <pod-name> -c <container-name> --previous
Проверьте наличие политик сети, которые могут блокировать трафик:
kubectl get networkpolicies -A
Выходные данные должны быть примерно такими, как в следующей таблице.
NAMESPACE NAME POD-SELECTOR AGE kube-system konnectivity-agent app=konnectivity-agent 4d1h
Если есть другая сетевая политика, созданная пользователем, проверьте, не блокирует ли эта политика доступ к модулям pod или из них.
Проверьте, можно ли связаться с приложением с 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
Получите более подробные сведения о службе:
kubectl describe services <service-name> -n <namespace-name>
Проверьте 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
Убедитесь, что 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
Проверьте конечные точки напрямую:
kubectl get endpoints
NAME ENDPOINTS AGE my-cluster-ip-service 10.244.0.15:80 14m
Если подключение к службе не работает, перезапустите
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
Убедитесь, что узел не перепользовался:
kubectl top nodes
Примечание.
Вы также можете использовать Azure Monitor для получения данных об использовании кластера.
Свяжитесь с нами для получения помощи
Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.