Ответ вслух Middle Service и Ingress спрашивают часто обновлено

Service есть, а запросы не доходят

Вопрос

Под приложения работает, Service создан, но curl http://api.prod из другого пода зависает или отдаёт ошибку. Как будешь искать причину?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Иду по цепочке от имени к процессу. Сначала из отладочного пода, например netshoot, nslookup api.prod: если имя не резолвится, проблема в DNS или опечатке в namespace.

Что должно прозвучать в ответе

  • DNS: резолвится ли имя (`nslookup api.prod` из пода), тот ли namespace

  • Эндпоинты: `kubectl get endpointslices`; пусто, значит не совпадает селектор или поды не Ready

  • Порты: `targetPort` совпадает с портом, который слушает приложение, и приложение слушает `0.0.0.0`

  • Прямой запрос на IP пода и порт: работает ли само приложение

  • NetworkPolicy, запрещающие трафик между namespace или подами

  • kube-proxy или CNI на узле: логи, правила, для Ingress ещё логи контроллера

Что могут спросить следом

  • Как запустить отладочный под с утилитами?
  • Чем отличается проблема с refused от таймаута в этом случае?

Разбор

Иду по цепочке от имени к процессу. Сначала из отладочного пода, например netshoot, nslookup api.prod: если имя не резолвится, проблема в DNS или опечатке в namespace. Потом смотрю эндпоинты: kubectl get endpointslices -l kubernetes.io/service-name=api. Пустой список, это самая частая причина: селектор сервиса не совпадает с метками подов, проверяю kubectl get pods --show-labels, или поды не проходят readiness, смотрю колонку READY и describe. Если адреса есть, иду в обход сервиса: curl на IP пода и targetPort. Не отвечает, значит порт не тот или приложение слушает 127.0.0.1. Отвечает на IP пода, но не через сервис: смотрю NetworkPolicy в обоих namespace и состояние kube-proxy или CNI на узле. Refused обычно значит неправильный порт, таймаут часто означает политику, которая молча отбрасывает пакеты. Если запрос идёт снаружи через Ingress, добавляю проверку логов Ingress-контроллера и его класса.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме