Сервис A не может подключиться к сервису B. Как вы будете искать причину?
- Какими утилитами проверить сеть?
- Connection refused или timeout — в чём разница?
Идти по уровням снизу вверх: DNS (dig b.internal — резолвится ли и в тот ли адрес) → маршрут и доступность (ping, traceroute/mtr) → порт (nc -zv host 8080) → TLS (openssl s_client) → HTTP (curl -v). Характер ошибки подсказывает уровень: connection refused — хост доступен, но порт никто не слушает; timeout — пакеты теряются, чаще всего файрвол или маршрутизация.
- На стороне B: ss -tlnp — слушает ли сервис и на каком адресе (127.0.0.1 или 0.0.0.0)
- ping может быть запрещён, а TCP работать — не делать выводов по одному ping
- tcpdump — последний аргумент: видно, доходят ли пакеты
А ещё В Kubernetes: Service, метки, Endpoints, NetworkPolicy, DNS внутри пода
Подробно
Команды по шагам:
dig +short b.internal # DNS
nc -zv b.internal 8080 # TCP-порт
curl -v --max-time 5 http://b.internal:8080/health
openssl s_client -connect b.internal:443 -servername b.internal
ss -tlnp | grep 8080 # на хосте B: кто слушает
sudo tcpdump -i any port 8080 -nn # доходят ли пакеты
Разбор симптомов:
| симптом | вероятная причина |
|---|---|
| не резолвится имя | DNS, опечатка, search-домены |
| connection refused | процесс не запущен, слушает не тот интерфейс |
| timeout | файрвол, security group, маршрутизация |
| TLS-ошибка | истёк сертификат, нет SNI, не доверен CA |
| 4xx/5xx | соединение есть, проблема в приложении или прокси |
Что ещё проверить: прокси-переменные окружения (HTTP_PROXY), кэш DNS в приложении, MTU в туннелях и VPN (большие пакеты теряются, мелкие проходят), исчерпание исходящих портов или пула соединений.
Что хотят услышать
- Последовательный разбор по уровням.
- Различие refused и timeout.
- Конкретные утилиты и что они показывают.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Начинать нужно с перезапуска сервиса A
- ✗Connection refused — пакеты отбрасывает файрвол, timeout — сервис B вернул 500
- ✓По уровням: DNS → маршрут → порт → TLS → HTTP; refused — порт не слушают, timeout — файрвол
- ✗Timeout означает, что сервис B вернул ошибку 500
Разбор темы
- Сети на сервере — подсети, firewall, reverse proxy и диагностика
Как читать CIDR и планировать подсети, как ограничивать сетевой доступ, зачем nginx перед приложением и как искать, почему сервис A не видит сервис B.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.