Linux хранит состояния отслеживаемых соединений в таблице conntrack. Она используется в том числе при NAT для Kubernetes Services. Если таблица переполняется, новые соединения могут терять пакеты.
Симптомы: периодические тайм-ауты, сбои DNS и ошибки API при нормальных показателях приложений.
Как проверить на проблемном узле:
# Текущее число записей и лимит
sysctl net.netfilter.nf_conntrack_count
sysctl net.netfilter.nf_conntrack_max
# Сообщения ядра
sudo journalctl -k | grep -i conntrack
Характерная запись:
nf_conntrack: table full, dropping packet
Что делать:
• Увеличить лимит с учётом доступной памяти. Универсального значения для всех узлов нет.
• Проверить настройки
conntrack.maxPerCore и conntrack.min в kube-proxy: он может управлять лимитом. Одного изменения через sysctl недостаточно для устойчивой настройки.• Сократить создание новых соединений: использовать пулы, HTTP keep-alive, проверить лавину повторных запросов.
• Пересматривать тайм-ауты по состояниям соединений после диагностики. Слишком короткие значения могут нарушить работу долгоживущих подключений.
Следите за заполнением таблицы на каждом узле. Свободные ресурсы соседних нод не спасают таблицу перегруженной.
https://kubernetes.io/docs/reference/config-api/kube-proxy-config.v1alpha1/
