Estou tentando definir um limite de conexão por ip em um nó do kubernetes usando o iptables connlimit. Como cada contêiner na VM tem um IP de origem diferente (rede de sobreposição), o uso de connlimit deve funcionar. Eu adicionei a regra
iptables -I FORWARD 1 -p tcp --syn -m connlimit --connlimit-above 25 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
Estou testando fazendo um contêiner fazer um monte de conexões no burst de 50 para um serviço externo. Isso inicialmente funciona nesse primeiro burst. 25 conectar e 25 têm conexão recusada. Eu posso ver 25 entradas na tabela conntrack com o ip de origem correto.
Quando eu aguardo alguns segundos e executo o script para tentar criar outras 50 conexões (enquanto 25 ainda estão em ESTABELECIDO), ele permite outras 25 até. Agora posso ver 50 conexões com o mesmo IP de origem na tabela conntrack, todas ESTABELECIDAS. O resultado desejado é que nenhum vai passar enquanto os 25 originais ainda estiverem conectados.
O que estou fazendo de errado?
Eu estou usando o forward em vez da cadeia de entrada por causa de como a rede de contêineres é configurada.