pods용 SNAT - Amazon EKS

pods용 SNAT

IPv6 패밀리를 사용하여 클러스터를 배포한 경우 IPv6 주소는 네트워크로 변환되지 않기 때문에 이 주제의 정보는 클러스터에 적용되지 않습니다. 클러스터에서 IPv6 사용에 대한 자세한 내용을 알아보려면 자습서: pods 및 services에 IPv6 주소 할당 섹션을 참조하세요.

기본적으로 클러스터의 각 pod에는 pod에 배포된 VPC와 연결된 Classless Inter-Domain Routing(CIDR) 블록의 프라이빗 IPv4 주소가 할당됩니다. 동일한 VPC의 Pods는 이러한 프라이빗 IP 주소를 엔드포인트로 사용하여 서로 통신합니다. pod가 VPC에 연결된 CIDR 블록 내에 있지 않은 모든 IPv4 주소와 통신하는 경우 Kubernetes용 Amazon VPC CNI 플러그인은 pod's IPv4 주소를 기본적으로 pod가 실행 중인 노드의 기본 탄력적 네트워크 인터페이스의 기본 프라이빗 IPv4 주소로 변환합니다.*

이 동작으로 인해 다음이 발생합니다.

  • VPC 피어링, 전송 VPC 또는 Direct Connect를 사용하여 클러스터 VPC에 연결되는 네트워크 또는 VPC에 있는 리소스는 pods와 통신을 시작할 수 없습니다. 그럼에도 pods는 이러한 리소스와 통신을 시작하고 응답을 수신할 수 있습니다.

  • 실행 중인 노드가 퍼블릭 또는 탄력적 IP 주소를 할당받고 퍼블릭 서브넷에 있는 경우에만 pods가 인터넷 리소스와 통신할 수 있습니다. 퍼블릭 서브넷은 인터넷 게이트웨이로 향하는 라우팅이 있는 라우팅 테이블과 연결된 서브넷입니다. 가능하면 프라이빗 서브넷에 노드를 배포하는 것이 좋습니다.

IPv4 주소를 사용하여 pods와 통신을 시작해야 하는 VPC 피어링, 전송 VPC 또는 Direct Connect를 사용하여 클러스터 VPC에 연결되는 네트워크 또는 VPC에 리소스가 있는 경우에는 다음 명령으로 기본 구성을 변경해야 합니다.

kubectl set env daemonset -n kube-system aws-node AWS_VPC_K8S_CNI_EXTERNALSNAT=true

설정을 true로 변경한 후 pods에서 인터넷과 통신하게 하려는 경우에는 노드가 배포된 프라이빗 서브넷과 연결된 라우팅 테이블에 퍼블릭 NAT 게이트웨이로 향하는 라우팅이 포함되어 있어야 합니다.

* pod's 사양에 hostNetwork=true(기본값은 false)가 포함된 경우 해당 IP 주소가 다른 주소로 변환되지 않습니다. 이 경우는 기본적으로 클러스터에서 실행되는 kube-proxy 및 Amazon VPC CNI plugin for Kubernetes pods의 경우입니다. 이러한 pods의 경우 IP 주소는 노드의 기본 IP 주소와 동일하므로 pod's IP 주소는 변환되지 않습니다. pod's hostNetwork 설정에 대한 자세한 내용을 알아보려면 Kubernetes API 참조에서 PodSpec v1 코어를 참조하세요.