Что это значит

kubelet проверяет контейнер по расписанию: открывает соединение на порт или запрашивает адрес. connection refused значит, что по этому адресу никто не слушает. Варианты причин:

  • приложение ещё стартует и порт пока не открыт;
  • в проверке указан не тот порт;
  • приложение слушает только 127.0.0.1, и снаружи контейнера порт недоступен;
  • приложение упало, а процесс контейнера ещё жив.

Последствия зависят от проверки. Не прошла проверка готовности: под не получает запросы, но не перезапускается. Не прошла проверка жизни (liveness) или запуска (startup) положенное число раз: контейнер перезапускается, и при долгом старте получается бесконечный цикл перезапусков.

Как проверить

kubectl describe pod <под> -n <namespace> | grep -E -A3 "Liveness|Readiness|Startup"
kubectl logs <под> -n <namespace> --previous | tail -50
kubectl exec <под> -n <namespace> -- ss -ltn

Последняя команда показывает, какие порты и на каких адресах реально слушает приложение, если в образе есть ss.

Что сделать

  1. Долгий старт: добавить проверку запуска (startupProbe) с запасом по времени, а проверки готовности и жизни оставить быстрыми.
  2. Не тот порт или адрес: исправить порт в проверке или настроить приложение слушать 0.0.0.0.
  3. Проверку жизни делать простой, без обращений к базе и соседним сервисам: иначе сбой зависимости перезапускает все поды разом.