Чет потестил еще и реально беда. Для чистоты эксперемента развернул обычный nginx в кластере на налогочной ноде, тоже с hostNetwork: true. nginx той же версии что и в ingress controller (1.19.4). Подогнал настройки, выставив по возможности аналогичные важные настройки, что часто влияют на производительность nginx: ssl, gzip, worker_*, events, tcp_*, keepalive и т.д.)
И результаты такие-же.
При 3K rps nginx ingress controller потребляет 4 ядра cpu. А обычный nginx максимум одно ядро, но в среднем 0.7-0.8 ядра
в данном эксперименте и nginx ingress controller и обычный nginx проксировали все запросы на один и тот же бэкенд. В обычном nginx я вручную в upstream прописал все ип подов примерно с такими же опциями что должны быть в ingress controller:
upstream backend
{
keepalive 320;
keepalive_timeout 60s;
keepalive_requests 10000;
server 10.245.4.9:3000 max_fails=50;
server 10.245.4.10:3000 max_fails=50;
server 10.245.6.10:3000 max_fails=50;
server 10.245.6.3:3000 max_fails=50;
server 10.245.6.4:3000 max_fails=50;
server 10.245.6.6:3000 max_fails=50;
}
Ну то есть они выполняли одну и ту же работу - проксировали трафик. И. вот такая вот разица в потреблении CPU - на три ядра