Я работаю в Kubernetes с AWS EKS.Я выполняю некоторые нагрузочные тесты для службы узлового порта и вижу ограничение одновременного соединения ~ 16k-20k при попадании на узел, на котором модуль не работает.Мне интересно, есть ли какой-нибудь способ увеличить количество одновременных подключений.
Итак, я запускаю службу нодпорта с только 1 модулем, который запланирован на узле А. Запущенный тест загрузки пытаетсяподключите как можно больше одновременных подключений к веб-сокету.Веб-сокеты просто спят и посылают сердцебиения каждые 30 секунд, чтобы поддерживать соединение.
Когда я указываю нагрузочный тестер (tsung) на узел A, я могу получить до 65k одновременных веб-сокетов, прежде чем модуль получит OOMKilled, поэтому память будетограничивающий фактор, и это нормально.Реальная проблема заключается в том, что когда я указываю нагрузочный тестер на узел B, и iptables kube-proxy перенаправляет соединение на узел A, внезапно я могу получить только около 16k-20k одновременных соединений websocket до того, как соединения начнут зависать.Согласно netstat, они застревают в состоянии SYN_SENT
.
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -n
...
20087 ESTABLISHED
30969 SYN_SENT
Единственное, что я могу проверить, это мой лимит контратаки, и он выглядит нормально.Вот что я получу для узла B.
net.netfilter.nf_conntrack_buckets = 16384
net.netfilter.nf_conntrack_max = 131072
net.nf_conntrack_max = 131072
Вот диапазон портов.Я не уверен, имеет ли это значение (я не уверен, что DNAT и SNAT используют порты), но диапазон, кажется, намного выше 16 тыс.
net.ipv4.ip_local_port_range = 32768 60999
Ограничение дескриптора файла и настройки TCP ядраодинаковы для узла A и узла B, поэтому я думаю, что исключает их.
Есть ли что-то еще, что может ограничивать число одновременных соединений, пересылаемых через iptables / netfilter?