Что делать, если развернутый в Kubernetes сайт не открывается?

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

Ответ

Я пройду по всей цепочке от пода до внешнего пользователя, используя методологию отладки "от внутреннего к внешнему".

1. Проверка Pod'ов:

kubectl get pods -n <namespace> -o wide
kubectl describe pod <pod-name> # Смотрю Events, Conditions
kubectl logs <pod-name> --tail=50 # Ищу ошибки инициализации или рантайма

Цель: Убедиться, что поды в статусе Running и прошли все Readiness/Liveness пробы.

2. Проверка Service:

kubectl get svc -n <namespace>
kubectl describe svc <service-name>
kubectl get endpoints <service-name> # Есть ли активные эндпоинты (IP:Port подов)?

Цель: Убедиться, что сервис селектирует правильные поды и у него есть активные эндпоинты.

3. Проверка Ingress:

kubectl get ingress -n <namespace>
kubectl describe ingress <ingress-name>
# Проверяю логи ingress-контроллера (часто это nginx)
kubectl logs -n ingress-nginx deployment/ingress-nginx-controller --tail=20

Цель: Убедиться, что Ingress правильно маршрутизирует трафик на бэкенд-сервис, нет ошибок в TLS-сертификатах или аннотациях.

4. Проверка изнутри кластера:

# Запускаю отладочный под и пытаюсь достучаться до сервиса изнутри сети кластера
kubectl run -it --rm debug --image=busybox --restart=Never -- sh
# Внутри контейнера:
wget -O- http://<service-name>.<namespace>.svc.cluster.local:80

Если изнутри кластера сайт работает, проблема во внешней маршрутизации (Ingress, LoadBalancer, DNS, фаервол).

5. Проверка внешних факторов:

  • DNS: dig +short <мой-сайт.ru> — резолвится ли в IP адрес LoadBalancer'а или NodePort?
  • Фаервол/Cloud Security Groups: Разрешён ли входящий трафик на порты 80/443 к нодам кластера или IP балансировщика?