Перейти к содержимому
1 / 10

Сеть внутри кластера: DNS, обнаружение сервисов и почему запросы иногда идут не туда

Внутри кластера сервисы находят друг друга по DNS-имени вида service.namespace.svc.cluster.local, а короткое имя service работает только внутри своего пространства имён благодаря поисковым суффиксам в /etc/resolv.conf. Отсюда первый источник сюрпризов: короткое имя разрешается через несколько попыток — сначала service.namespace.svc, потом service.svc, и на каждый неудачный запрос уходит время; в приложениях с большим числом внешних вызовов это заметная задержка, лечится ndots и полными именами с точкой на конце. Второй источник — балансировка на уровне соединения, а не запроса: обычный Service распределяет TCP-соединения, поэтому долгоживущие соединения (HTTP/2, gRPC, пулы к базе) прилипают к одному поду, и после масштабирования нагрузка не перераспределяется. Третий — headless-сервисы (clusterIP: None), которые возвращают адреса всех подов и нужны, когда клиент балансирует сам или адресует конкретный экземпляр.

Сеть внутри кластера: DNS, обнаружение сервисов и почему запросы иногда идут не туда | JScriptiser