내 클러스터의 팟 (Pod) 에서 송신 연결을 위해 SNAT 포트가 부족한 이유는 무엇입니까?
Red Hat OpenShift on IBM Cloud 4.12 현재 소스 NAT (Network Address Translation) 포트 범위가 32768 - 65535
로 변경되었습니다. 여기서 이전에는 1024 - 65535
였습니다. 이 변경은 다음 시나리오가 발생할 수 있는 가능한 문제를 해결하기 위해 수행되었습니다.
- NLB 유형의 LoadBalancer 의 NodePort 와 충돌하는 VPC 클러스터에서 SNAT 포트를 선택합니다. 이 경우 해당 egress 연결이 실패합니다.
- 클러스터 서비스가 나중에 NodePort에 사용하려는 NodePort 범위 30,000-32,767의 장기 실행 송신 연결에 대해 SNAT 포트가 선택됩니다. 이 경우 해당 클러스터 서비스는 해당 SNAT 포트를 사용하는 연결이 완료되고 닫힐 때까지 해당 NodePort 에서 트래픽을 가져오지 않습니다.
- SNAT 포트는 Linux 서비스 또는
hostPort
팟 (Pod) 포트 또는hostNetwork
팟 (Pod) 포트가 나중에 사용하려는 장기 실행 송신 연결을 위해 선택됩니다. 이 경우 해당 SNAT 포트를 사용 중인 연결이 완료되고 닫힐 때까지 해당 서비스 또는 팟 (Pod) 이 시작되거나 작동하지 않습니다.
일반적으로 이 포트 범위를 제한하는 것이 좋습니다. 그러나 팟 (Pod) 네트워크 팟 (Pod) 에서 확장성이 높은 애플리케이션을 실행 중인 경우에는 단일 작업자에 다음 경우 중 하나가 있습니다.
- 클러스터의 팟 (Pod) 또는 노드 이외의 대상에 대한 30 ,000개가 넘는 송신 연결이 한 번에 열립니다.
- 30 ,000개의 송신 연결이 서로 몇 분 내에 열립니다.
32768-65535범위가 충분히 크지 않을 수 있습니다. 이에 대한 두 가지 가능한 솔루션은 다음 옵션입니다.
- 노드를 더 추가하고 각 노드에 30 ,000개 미만의 SNAT 포트가 필요하도록 이러한 모든 송신 연결을 작성하는 노드당 하나 이상의 팟 (Pod) 을 보유하십시오. 이것이 선호되는 솔루션입니다
- Calico 의 팟 (Pod)
natPortRange
를 명시적으로 더 큰 범위로 설정하십시오. VPC NLB를 사용하거나 특정 하드코딩된 포트를 사용하는 NodePort 서비스 또는hostPort
팟 (Pod) 을 추가하는 경우 이로 인해 이전에 나열된 포트 충돌이 발생할 수 있습니다.
이 포트 범위를 설정하려면 calicoctl
2진을 다운로드하고 클러스터에 대한 KUBECONFIG
환경 변수를 설정한 후 다음 명령을 실행해야 합니다. 여기서 LOWER_RANGE_LIMIT
는 1025
및 32767
사이에 있습니다.
이 변경사항은 즉시 적용되며, 클러스터 마스터를 1.25 로 업데이트하기 전에 이를 수행하면 업데이트가 사용자가 설정한 내용을 겹쳐쓰지 않습니다.
calicoctl patch felixconfiguration default --patch '{"spec":{"natPortRange": "LOWER_RANGE_LIMIT:65535"}}'