View a markdown version of this page

포드 IP 주소에 대한 서브넷 선택 구성 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.

포드 IP 주소에 대한 서브넷 선택 구성

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

Kubernetes용 Amazon VPC CNI 플러그인은 노드에 보조 탄력적 네트워크 인터페이스(ENI)를 생성하고 해당 ENI의 IP 주소를 포드에 할당합니다. 기본적으로 VPC CNI는 노드의 기본 네트워크 인터페이스와 동일한 서브넷에 보조 ENI를 생성합니다. 다음 방법을 통해 VPC CNI가 포드 IP 주소에 사용하는 서브넷을 제어할 수 있습니다.

  • 향상된 서브넷 검색 – VPC CNI는 동일한 VPC 및 가용 영역에서 kubernetes.io/role/cni 태그가 지정된 서브넷을 자동으로 검색하고 사용합니다. VPC CNI 버전 1.18.0 이상이 필요합니다. 대부분의 사용 사례에 이 방법을 사용하는 것이 좋습니다.

  • 사용자 지정 네트워킹ENIConfig 사용자 지정 리소스를 사용하여 가용 영역별 서브넷 및 보안 그룹을 수동으로 지정합니다. 자세한 내용은 사용자 지정 네트워킹을 통해 대체 서브넷에 포드 배포 섹션을 참조하세요.

참고

두 기능이 모두 활성화된 경우 사용자 지정 네트워킹이 우선합니다.

향상된 서브넷 검색

VPC CNI 버전 1.18.0 이상에서는 기본적으로 향상된 서브넷 검색이 활성화됩니다(ENABLE_SUBNET_DISCOVERY=true). VPC CNI는 자동으로 노드와 동일한 VPC 및 가용 영역에서 서브넷을 검색한 다음 이를 사용하여 보조 ENI를 생성하고 포드 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 작업 및 포드 IP 할당을 위해 서브넷을 처리하는 방법을 제어합니다. 태그는 VPC CNI가 새 ENI를 생성하는지 아니면 기존 ENI를 조정하는지에 따라 효과가 다릅니다.

중요

클러스터 범위 및 제외 태그 지정 메커니즘은 VPC CNI v1.22.2 버전부터 사용할 수 있습니다. 그 이전 버전에서는 kubernetes.io/role/cni=1 태그를 통해 표준 옵트인 동작만 사용할 수 있습니다.

태그 값

다음 표에는 각 태그 값이 서브넷 동작에 미치는 영향이 요약되어 있습니다.

태그 값 새 ENI 생성 기존 ENI 조정

1

옵트인: VPC CNI가 이 서브넷에 새 ENI를 생성합니다.

ENI는 계속 포드 IP 할당에 사용할 수 있습니다.

0

제외됨: VPC CNI가 이 서브넷에 새 ENI를 생성하지 않습니다.

제외됨: VPC CNI가 이 서브넷의 기존 ENI를 포드 IP 할당에서 제외합니다. 이 ENI에서는 새 포드 IP가 할당되지 않습니다.

없음(태그 없음)

새 ENI에 사용되지 않음: VPC CNI가 새 ENI 생성을 위해 태그가 없는 보조 서브넷을 선택하지 않습니다. 기본 서브넷(노드가 시작된 서브넷)은 태그가 없더라도 이전 버전과의 호환성을 위해 새 ENI 생성에 계속 사용됩니다.

중단 없음: 태그가 지정되지 않은 서브넷의 기존 ENI를 포드 IP 할당에 계속 사용할 수 있습니다. VPC CNI는 이러한 ENI를 제거하거나 제외하지 않습니다.

생성 동작과 조정 동작

VPC CNI는 새 ENI를 생성할 때와 기존 ENI를 조정할 때 의도적으로 서로 다른 정책을 적용합니다.

  • 생성(보조 서브넷의 경우 페일 클로즈됨): VPC CNI가 새 보조 ENI를 생성해야 하는 경우 명시적으로 kubernetes.io/role/cni=1 태그가 지정된 보조 서브넷만 사용합니다. 태그가 지정되지 않은 보조 서브넷은 새 ENI 생성에 선택되지 않습니다. 이렇게 하면 관리자가 명시적으로 승인한 서브넷에만 새 네트워크 인터페이스가 배치됩니다.

  • 조정(태그가 지정되지 않은 서브넷의 경우 페일 오픈됨): VPC CNI가 시작할 때 또는 노드에 이미 연결된 기존 ENI를 조정할 때 서브넷에 kubernetes.io/role/cni 태그가 없다는 이유로 ENI를 제외하지 않습니다. 그러므로 이미 해당 ENI의 IP 주소를 사용하고 있는 실행 중인 포드가 중단되지 않습니다.

VPC CNI는 의도적으로 이 설계를 사용합니다. 태그가 지정되지 않은 서브넷에서 이미 연결된 ENI를 강제로 제외하면 현재 해당 ENI의 IP 주소를 사용하는 포드가 손상됩니다.

중요

서브넷이 기존 ENI를 포함하여 새 포드 IP를 제공하지 못하도록 하려면 서브넷에 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/<cluster-name>을 사용하여 클러스터별 태그를 추가로 확인합니다. 서브넷에 이 형식의 클러스터 태그가 있는 경우 이름과 일치하는 클러스터만 해당 서브넷을 사용합니다. 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를 공유하고 각 클러스터가 포드 IP 주소에 서로 다른 서브넷을 사용하도록 하려는 경우에 유용합니다.

권장 워크플로우

포드 IP 주소를 위한 새 서브넷을 추가하려면:

  1. 노드와 동일한 VPC 및 가용 영역에 새 서브넷을 생성합니다.

  2. 서브넷에 kubernetes.io/role/cni=1 태그를 지정합니다.

  3. 서브넷에 적절한 라우팅 테이블 및 네트워크 ACL이 있는지 확인합니다.

  4. VPC CNI가 새 서브넷을 검색하고 사용을 시작하는지 확인합니다.

포드 IP 할당에서 서브넷을 제거하려면:

  1. 서브넷에 kubernetes.io/role/cni=0 태그를 지정합니다.

  2. 해당 서브넷의 IP를 사용하는 포드가 자연스럽게 종료되거나 다시 예약될 때까지 기다립니다.

  3. VPC CNI가 해당 서브넷의 ENI에서 새 포드 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 자체 관리형 IAM 정책에는 포함되어 있지 않습니다. 자체 관리형 IAM 정책(예: IPv6 클러스터용)을 사용하는 경우 ec2:DescribeSubnets를 수동으로 추가하여 서브넷 검색을 활성화합니다.

  • 이 기능은 보조 IP 주소 모드와 접두사 위임 모드에서 모두 작동합니다.

  • 검색된 모든 서브넷은 노드와 동일한 VPC에 있어야 합니다.

  • VPC CNI는 노드와 동일한 가용 영역에 있는 서브넷에서만 ENI를 생성합니다.

  • VPC CNI는 태그 변경 여부와 관계없이 여전히 포드에 IP 주소가 할당되어 있는 ENI를 할당 해제하지 않습니다.

  • 공유 VPC(교차 계정 서브넷)를 사용하는 경우 클러스터가 시작되는 참가자 계정의 서브넷에 태그를 지정합니다.

  • 향상된 서브넷 검색을 포드용 보안 그룹, 네트워크 정책, 접두사 위임, SNAT와 함께 사용할 수 있습니다.