kubernetes 노드에서 IP당 연결 제한을 설정하기 위해 iptables connlimit를 사용하려고 합니다. VM의 각 컨테이너에는 서로 다른 소스 IP(오버레이 네트워크)가 있으므로 connlimit를 사용하면 작동합니다. 규칙을 추가했어요
iptables -I FORWARD 1 -p tcp --syn -m connlimit --connlimit-above 25 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
컨테이너가 외부 서비스에 대해 50개의 연결을 버스트하도록 하여 이를 테스트하고 있습니다. 이는 처음에 첫 번째 발병 중에 작동합니다. 25개의 연결, 25개의 연결이 거부되었습니다. conntrack 테이블에서 올바른 소스 IP를 가진 25개의 항목을 볼 수 있습니다.
몇 초간 기다렸다가 스크립트를 실행하여 또 다른 50개의 연결(그 중 25개는 아직 ESTABLISHED 상태임)을 생성하려고 시도하면 추가로 25개의 연결이 통과할 수 있습니다. 이제 conntrack 테이블에서 동일한 소스 IP를 사용하여 모두 설정된 50개의 연결을 볼 수 있습니다. 원하는 결과는 원본 25개가 여전히 연결되어 있는 한 아무 일도 일어나지 않는다는 것입니다.
내가 뭘 잘못했나요?
컨테이너 네트워크 구성 방식으로 인해 입력 체이닝 대신 전달을 사용하고 있습니다.