Pod에 대한 아웃바운드 인터넷 접근 활성화하기

Pod에 대한 아웃바운드 인터넷 접근 활성화하기 (Enable outbound internet access for Pods)

적용 대상: Linux IPv4 Fargate 노드, Amazon EC2 인스턴스가 있는 Linux 노드

클러스터를 IPv6 패밀리로 배포했다면 이 주제의 내용은 클러스터에 적용되지 않아요. IPv6 주소는 네트워크 변환되지 않기 때문이에요. 클러스터에서 IPv6를 사용하는 방법은 클러스터, Pod, 서비스에 대한 IPv6 주소 알아보기를 참고하세요.

기본적으로 클러스터의 각 Pod에는 Pod가 배포된 VPC와 연결된 CIDR(classless inter-domain routing) 블록에서 프라이빗 IPv4 주소가 할당돼요. 같은 VPC의 Pod는 이러한 프라이빗 IP 주소를 엔드포인트로 사용해 서로 통신해요. Pod가 VPC와 연결된 CIDR 블록 밖의 IPv4 주소와 통신할 때 Amazon VPC CNI 플러그인(Linux 및 Windows 모두)은 기본적으로 Pod의 IPv4 주소를 Pod가 실행 중인 노드의 기본 탄력적 네트워크 인터페이스의 기본 프라이빗 IPv4 주소로 변환해요*.

참고

Windows 노드에는 추가로 고려할 사항이 있어요. 기본적으로 Windows용 VPC CNI 플러그인은 같은 VPC 내 대상으로 가는 트래픽을 SNAT에서 제외하는 네트워킹 구성으로 정의돼요. 즉 내부 VPC 통신은 SNAT가 비활성화되고 Pod에 할당된 IP 주소는 VPC 내에서 라우팅 가능해요. 하지만 VPC 밖의 대상으로 가는 트래픽은 소스 Pod IP가 인스턴스 ENI의 기본 IP 주소로 SNAT돼요. Windows의 이 기본 구성은 호스트 인스턴스와 동일한 방식으로 Pod가 VPC 밖의 네트워크에 접근할 수 있게 보장해요.

출처: 문서

본문

이 동작 때문에:

  • Pod가 실행 중인 노드가 공용 또는 탄력적 IP 주소를 갖고 인터넷 게이트웨이로 가는 경로가 있는 라우팅 테이블을 가진 공용 서브넷에 있거나, NAT 게이트웨이로 가는 경로가 있는 라우팅 테이블을 가진 프라이빗 서브넷에 있다면 Pod는 인터넷 리소스와 통신할 수 있어요. 가능하면 노드를 프라이빗 서브넷에 배포하는 것을 권장해요.

  • 1.8.0보다 이전 버전의 플러그인에서는 VPC 피어링, 트랜짓 VPC, 또는 AWS Direct Connect로 클러스터 VPC에 연결된 네트워크나 VPC의 리소스가 보조 탄력적 네트워크 인터페이스 뒤의 Pod와 통신을 시작할 수 없어요. 하지만 Pod는 해당 리소스와 통신을 시작하고 응답을 받을 수는 있어요.

환경에서 다음 중 하나라도 해당한다면 아래 명령으로 기본 구성을 변경하세요.

  • VPC 피어링, 트랜짓 VPC, 또는 AWS Direct Connect로 클러스터 VPC에 연결된 네트워크나 VPC에 IPv4 주소를 사용해 Pod와 통신을 시작해야 하는 리소스가 있고 플러그인 버전이 1.8.0보다 이전인 경우.

  • 트래픽이 노드를 떠날 때 Pod의 소스 IP 주소를 보존하고 싶고, 노드 대신 NAT 게이트웨이가 SNAT를 수행하길 원할 때 — 예를 들어 네트워크 어플라이언스나 로그가 Pod의 IP 주소를 관찰하길 원하는 경우. Pod 소스 트래픽은 인터넷 게이트웨이로 라우팅될 수 없으므로 노드는 NAT 게이트웨이로 가는 경로가 있는 프라이빗 서브넷에 있어야 해요.

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

참고

AWS_VPC_K8S_CNI_EXTERNALSNAT 및 AWS_VPC_K8S_CNI_EXCLUDE_SNAT_CIDRS CNI 구성 변수는 Windows 노드에 적용되지 않아요. Windows에서는 SNAT 비활성화가 지원되지 않아요. SNAT에서 IPv4 CIDR 목록을 제외하는 것은 Windows 부트스트랩 스크립트에서 ExcludedSnatCIDRs 매개변수를 지정해 정의할 수 있어요. 이 매개변수 사용에 대한 자세한 내용은 부트스트랩 스크립트 구성 매개변수를 참고하세요.

호스트 네트워킹 (Host networking)

  • Pod의 spec에 hostNetwork=true(기본값은 false)가 포함되어 있다면 그 IP 주소는 다른 주소로 변환되지 않아요. 클러스터에서 실행되는 kube-proxy와 Kubernetes용 Amazon VPC CNI 플러그인 Pod가 기본적으로 이 경우에 해당해요. 이 Pod들의 IP 주소는 노드의 기본 IP 주소와 같으므로 Pod의 IP 주소는 변환되지 않아요. Pod의 hostNetwork 설정에 대한 자세한 내용은 Kubernetes API 참조의 PodSpec v1 core를 참고하세요.

더 알아보기 (Learn more)