Твои действия, если Kubernetes не может обратиться к какому-либо сервису

«Твои действия, если Kubernetes не может обратиться к какому-либо сервису» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я начинаю с проверки состояния ресурсов и логики в порядке от простого к сложному:

  1. Базовые проверки:
    # Существует ли сервис и под?
    kubectl get svc,po -n <namespace>
    # Проверка селекторов сервиса и лейблов пода
    kubectl describe svc <service-name> -n <namespace>
    kubectl get po -n <namespace> --show-labels
    # Доступны ли эндпоинты?
    kubectl get endpoints <service-name> -n <namespace>
  2. Проверка сети и DNS:
    # Запускаю временный под для тестирования DNS и сетевой связности
    kubectl run dns-test --image=busybox:1.28 -it --rm --restart=Never -- nslookup <service-name>.<namespace>.svc.cluster.local
    kubectl run curl-test --image=curlimages/curl -it --rm --restart=Never -- curl -v http://<service-name>.<namespace>.svc.cluster.local:8080
  3. Анализ политик сети и логов:
    • Проверяю NetworkPolicy: kubectl get networkpolicy -n <namespace>.
    • Смотрю логи пода приложения: kubectl logs <pod-name> -n <namespace>.
    • Проверяю события кластера: kubectl get events -n <namespace> --sort-by='.lastTimestamp'.
  4. Проверка конфигурации пода: Убеждаюсь, что контейнер слушает правильный порт, указанный в манифесте сервиса. Если проблема системная, проверяю состояние CNI-плагина (Calico, Cilium) и kube-proxy.