Pod IP 주소용 서브넷 선택 구성
Pod IP 주소용 서브넷 선택 구성
적용 대상: Amazon EC2 인스턴스가 있는 Linux 노드
Amazon VPC CNI 플러그인 for Kubernetes는 노드에 보조 탄력적 네트워크 인터페이스(ENI)를 만들고 해당 ENI의 IP 주소를 Pod에 할당합니다. 기본적으로 VPC CNI는 노드의 기본 네트워크 인터페이스와 같은 서브넷에 보조 ENI를 만듭니다. 다음 방법을 통해 VPC CNI가 Pod IP 주소에 사용하는 서브넷을 제어할 수 있습니다.
- 향상된 서브넷 검색(Enhanced subnet discovery) – VPC CNI가 같은 VPC와 가용 영역(Availability Zone)에서
kubernetes.io/role/cni로 태그된 서브넷을 자동으로 검색하여 사용합니다. VPC CNI 버전 1.18.0 이상이 필요합니다. 대부분의 사용 사례에 이 방법을 권장합니다. - 사용자 지정 네트워킹(Custom networking) –
ENIConfig사용자 지정 리소스를 사용해 가용 영역별로 서브넷과 보안 그룹을 직접 지정합니다. 자세한 내용은 사용자 지정 네트워킹으로 대체 서브넷에 Pod 배포를 참조하세요.
참고
두 기능이 모두 활성화된 경우 사용자 지정 네트워킹이 우선합니다.
출처: 문서
본문
향상된 서브넷 검색
VPC CNI 버전 1.18.0 이상은 향상된 서브넷 검색을 기본적으로 활성화합니다(ENABLE_SUBNET_DISCOVERY=true). VPC CNI는 노드와 같은 VPC 및 가용 영역의 서브넷을 자동으로 검색한 다음 서브넷을 사용해 보조 ENI를 만들고 Pod IP 주소를 할당합니다. 이 기능은 수동 ENIConfig 구성 없이도 사용 가능한 IP 주소 공간을 확장합니다.
기능이 활성화되었는지 확인하려면 다음을 실행합니다.
kubectl describe ds aws-node -n kube-system | grep ENABLE_SUBNET_DISCOVERY
이 기능을 비활성화하려면 aws-node DaemonSet에서 ENABLE_SUBNET_DISCOVERY=false로 설정합니다.
서브넷 태그 동작(kubernetes.io/role/cni)
kubernetes.io/role/cni 태그는 VPC CNI가 ENI 작업과 Pod IP 할당에서 서브넷을 다루는 방식을 제어합니다. 이 태그는 VPC CNI가 새 ENI를 만들 때와 기존 ENI를 재조정(reconcile)할 때 서로 다른 효과를 냅니다.
중요
클러스터 범위 및 제외(exclusionary) 태깅 메커니즘은 VPC CNI 버전
v1.22.2부터 사용할 수 있습니다. 이 버전 이전에는kubernetes.io/role/cni=1태그를 통한 표준 opt-in 동작만 사용할 수 있습니다.
태그 값
다음 표는 각 태그 값이 서브넷 동작에 미치는 영향을 요약합니다.
| 태그 값 | 새 ENI 생성 | 기존 ENI 재조정 |
|---|---|---|
1 |
opt-in: VPC CNI가 이 서브넷에 새 ENI를 만듭니다. | ENI는 Pod IP 할당에 계속 사용됩니다. |
0 |
제외: VPC CNI가 이 서브넷에 새 ENI를 만들지 않습니다. | 제외: VPC CNI가 이 서브넷의 기존 ENI를 Pod IP 할당에서 제외합니다. 이 ENI에서 새 Pod IP는 할당되지 않습니다. |
| 없음(태그 없음) | 새 ENI에 사용 안 함: VPC CNI는 태그가 없는 보조 서브넷을 새 ENI 생성에 선택하지 않습니다. 기본 서브넷(노드가 시작된 서브넷)은 태그가 없어도 하위 호환성을 위해 새 ENI 생성에 계속 사용됩니다. | 중단 없음: 태그가 없는 서브넷의 기존 ENI는 Pod IP 할당에 계속 사용됩니다. VPC CNI는 이 ENI를 제거하거나 제외하지 않습니다. |
생성과 재조정 동작
VPC CNI는 새 ENI를 만들 때와 기존 ENI를 재조정할 때 의도적으로 다른 정책을 적용합니다.
- 생성(보조 서브넷에 대해 fail-closed): VPC CNI가 새 보조 ENI를 만들어야 할 때
kubernetes.io/role/cni=1로 명시적으로 태그된 보조 서브넷만 사용합니다. 태그가 없는 보조 서브넷은 새 ENI 생성에 절대 선택되지 않습니다. 이는 새 네트워크 인터페이스가 관리자가 명시적으로 승인한 서브넷에만 배치되도록 보장합니다. - 재조정(태그 없는 서브넷에 대해 fail-open): VPC CNI가 시작되거나 노드에 이미 연결된 기존 ENI를 재조정할 때, 서브넷에
kubernetes.io/role/cni태그가 없다는 이유로 ENI를 제외하지 않습니다. 이는 해당 ENI의 IP 주소를 이미 사용 중인 실행 중인 Pod의 중단을 방지합니다.
VPC CNI는 이 설계를 의도적으로 사용합니다. 태그가 없는 서브넷에서 이미 연결된 ENI를 강제로 제외하면 현재 그 ENI의 IP 주소를 사용하는 Pod가 깨질 수 있습니다.
중요
서브넷이 새 Pod IP를 제공하지 못하게 하려면(기존 ENI 포함) 서브넷을
kubernetes.io/role/cni=0으로 태그하세요. 태그가 없는 경우 해당 서브넷에서 새 ENI 생성만 방지할 뿐, 기존 ENI를 할당에서 제외하지는 않습니다.
기본 서브넷 처리
VPC CNI는 kubernetes.io/role/cni 태그가 없어도 항상 노드의 기본 서브넷(노드가 시작된 서브넷)을 ENI 생성에 포함합니다. 이는 기존 클러스터와의 하위 호환성을 유지합니다. 기본 서브넷 동작:
- 태그 유무와 관계없이 ENI 생성에 포함됩니다(
0으로 태그된 경우 제외). kubernetes.io/role/cni=0으로 태그되면 VPC CNI는 기본 서브넷을 새 ENI 생성과 기존 ENI 할당 모두에서 제외합니다.
클러스터 범위 서브넷 필터링
서브넷이 kubernetes.io/role/cni=1로 태그되면 VPC CNI는 cni.networking.k8s.aws/cluster/ 키 형식의 클러스터별 태그도 추가로 확인합니다. 서브넷에 이 형식의 클러스터 태그가 있으면 이름이 일치하는 클러스터만 그 서브넷을 사용합니다. kubernetes.io/role/cni=1 태그가 있고 클러스터별 태그가 없는 서브넷은 VPC의 모든 클러스터가 사용할 수 있습니다.
예를 들어 서브넷을 특정 클러스터로 제한하려면:
aws ec2 create-tags --resources subnet-example \
--tags Key=kubernetes.io/role/cni,Value=1 Key=cni.networking.k8s.aws/cluster/my-cluster,Value=shared
이 기능은 여러 EKS 클러스터가 VPC를 공유하고 각 클러스터가 Pod IP 주소에 서로 다른 서브넷을 사용하길 원할 때 유용합니다.
권장 워크플로
Pod IP 주소용 새 서브넷을 추가하려면:
- 노드와 같은 VPC 및 가용 영역에 새 서브넷을 만듭니다.
- 서브넷을
kubernetes.io/role/cni=1로 태그합니다. - 서브넷에 적절한 라우팅 테이블과 네트워크 ACL이 있는지 확인합니다.
- VPC CNI가 새 서브넷을 검색해 사용하기 시작하는지 확인합니다.
Pod IP 할당에서 서브넷을 제거하려면:
- 서브넷을
kubernetes.io/role/cni=0으로 태그합니다. - 해당 서브넷의 IP를 사용하는 Pod가 자연스럽게 종료되거나 재예약될 때까지 기다립니다.
- VPC CNI가 해당 서브넷의 ENI에서 새 Pod IP 할당을 중단하는지 확인합니다.
중요
서브넷 사용을 중단하기 위해
kubernetes.io/role/cni태그를 제거하지 마세요. 태그를 제거하면 새 ENI 생성을 방지할 뿐 기존 ENI를 할당에서 제외하지는 않습니다. 서브넷을 적극적으로 제외하려면kubernetes.io/role/cni=0으로 태그하세요.
고려 사항
- 향상된 서브넷 검색에는 Amazon VPC CNI 버전 1.18.0 이상이 필요합니다.
- 이 기능은 VPC CNI IAM 역할에
ec2:DescribeSubnets권한이 필요합니다.AmazonEKS_CNI_Policy관리형 정책에 이 권한이 포함되어 있습니다. IPv6 self-managed IAM 정책에는 포함되어 있지 않습니다. self-managed IAM 정책(예: IPv6 클러스터)을 사용한다면 서브넷 검색을 활성화하기 위해ec2:DescribeSubnets를 직접 추가하세요. - 이 기능은 보조 IP 주소 모드와 프리픽스 위임(prefix delegation) 모드 모두에서 동작합니다.
- 검색된 모든 서브넷은 노드와 같은 VPC에 있어야 합니다.
- VPC CNI는 노드와 같은 가용 영역에 있는 서브넷에만 ENI를 만듭니다.
- VPC CNI는 태그 변경과 관계없이 Pod에 IP 주소가 여전히 할당된 ENI는 할당 해제하지 않습니다.
- 공유 VPC(교차 계정 서브넷)를 사용할 때는 클러스터가 시작된 참여 계정의 서브넷에 태그를 지정하세요.
- 향상된 서브넷 검색은 Pod용 보안 그룹, 네트워크 정책, 프리픽스 위임, SNAT과 함께 사용할 수 있습니다.