내용으로 건너뛰기

Amazon EKS 클러스터에서 포드의 특정 IP 주소 서브넷을 선택하려면 어떻게 해야 합니까?

4분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS)에서 포드의 사용자 지정 서브넷 또는 IP 주소 범위를 사용하고 싶습니다.

해결 방법

워커 노드의 서브넷과 다른 서브넷의 포드 IP 주소를 할당하려면 사용자 지정 네트워킹을 사용하십시오.

사용자 지정 네트워킹 활성화

사용자 지정 네트워킹을 구성하기 전에 다음과 같은 기본 동작을 검토하십시오.

  • 노드와 포드는 Amazon Virtual Private Cloud(VPC) 클러스터에서 동일한 CIDR 범위의 IP 주소를 사용합니다. Amazon VPC에 IP 주소 CIDR 범위를 더 추가하려면 Amazon EKS로 여러 CIDR 범위를 사용하려면 어떻게 해야 합니까?를 참조하십시오.
  • Amazon EKS는 워커 노드의 서브넷에서 포드 IP 주소를 할당합니다.
  • 어떤 서브넷이 포드에 IP 주소를 할당하는지 제어할 수 없습니다.
  • 노드의 서브넷에 사용할 수 있는 IP 주소가 없는 경우 다른 서브넷에 사용 가능한 주소가 있어도 새 포드가 시작되지 않습니다.
  • 포드에서 Amazon EKS 클러스터 CIDR 블록의 Amazon VPC 외부 IP 주소로 향하는 모든 트래픽은 노드의 기본 인터페이스와 IP 주소를 사용합니다. 트래픽은 보안 그룹과 노드의 기본 탄력적 네트워크 인터페이스의 서브넷을 사용합니다. ENIConfig 객체에 정의된 서브넷 및 보안 그룹은 사용하지 않습니다.
  • 포드에 보안 그룹을 사용하는 경우, 포드는 SecurityGroupPolicy에 지정된 보안 그룹을 사용합니다. 포드는 ENIConfig 객체에 지정된 보안 그룹을 사용하지 않습니다.
    참고: 포드 트래픽 라우팅에 대한 자세한 내용은 포드의 아웃바운드 인터넷 액세스 사용을 참조하십시오.

Kubernetes용 Amazon VPC Container Network Interface(Amazon VPC CNI) 플러그인에서 사용자 지정 네트워킹을 활성화합니다. Kubernetes 버전과 일치하는 Amazon VPC CNI 플러그인 버전을 사용하십시오. 플러그인에 액세스하려면 GitHub 웹 사이트에서 amazon-vpc-cni-k8s를 참조하십시오.

다음 명령을 실행하여 Amazon EKS 클러스터의 Amazon VPC 버전을 확인합니다.

kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

올바른 플러그인 버전이 없는 경우 Amazon VPC CNI를 업데이트하십시오.

다음 명령을 실행하여 사용자 지정 네트워킹을 활성화합니다.

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

VPC CNI v1.18 이상 버전은 사용 가능한 서브넷의 IP 주소 사용을 기반으로 자동 서브넷 검색 및 동적 주소 할당을 지원합니다. 자세한 내용은 Amazon VPC CNI의 향상된 서브넷 검색 도입을 참조하십시오.

Amazon VPC CNI 플러그인을 사용하여 다음 작업을 수행할 수도 있습니다.

  • 포드에 사용할 Amazon VPC 서브넷을 지정합니다.
  • 포드에 대한 별도의 보안 그룹을 정의합니다.

ENIConfig 객체 만들기

ENIConfig 객체를 만들기 전에 다음과 같은 기본 동작을 검토하십시오.

  • ENIConfig 객체는 하나의 서브넷과 보안 그룹 목록을 정의합니다.
  • 각 노드에는 ENIConfig 객체를 하나만 할당할 수 있습니다. 그러나 동일한 ENIConfig 객체를 여러 노드에 할당할 수 있습니다.
  • ENIConfig 객체를 노드에 할당하면 노드에 예약된 포드는 ENIConfig 객체의 서브넷과 보안 그룹을 사용합니다.
  • ENIConfig 객체 이름은 가용 영역의 이름이어야 합니다.

다음 명령을 실행하여 ENIConfig 객체를 만듭니다.

cat EOF | kubectl apply -f -  
apiVersion: crd.k8s.amazonaws.com/v1alpha1  
kind: ENIConfig  
metadata:  
  name: example-availability-zone  
spec:  
  securityGroups:   
    - example-security-group-id  
  subnet: example-subnet-id  
EOF

참고: example-availability-zone을 가용 영역으로 바꾸십시오. example-security-group-id를 보안 그룹의 ID로 바꾸십시오. example-subnet-id를 서브넷의 ID로 바꾸십시오.

ENIConfig 객체 할당

하나의 ENIConfig 객체에 가용 영역을 할당하려면 ENIConfig 객체를 노드에 자동으로 할당하십시오. 여러 ENIConfig 객체를 동일한 가용 영역에 연결하려면 ENIConfig 객체를 노드에 수동으로 할당하십시오.

ENIConfig 객체를 자동으로 할당

다음 명령을 실행합니다.

kubectl set env daemonset aws-node -n kube-system ENI_CONFIG_LABEL_DEF=topology.kubernetes.io/zone

ENIConfig 객체를 수동으로 연결

중요: 연결된 ENIConfig 객체의 노드와 서브넷이 동일한 가용 영역에 있는지 확인하십시오.

다음 명령을 실행합니다.

kubectl annotate node example-node-name k8s.amazonaws.com/eniConfig=example-availability-zone

참고: example-node-name을 노드의 전체 식별자로 바꾸십시오. example-availability-zoneENIConfig 객체를 만들 때 사용한 가용 영역의 이름으로 바꾸십시오.

새 노드 시작

ENIConfig 서브넷에서 보조 네트워크 인터페이스와 IP 주소를 할당하려면 새 노드를 시작해야 합니다. 기존 노드는 교체할 때까지 원래 네트워킹 구성을 계속 사용합니다.

다음 단계를 완료하십시오.

  1. 자체 관리형 노드 그룹의 관리형 노드 그룹에 사용자 지정 Amazon Machine Image(AMI) ID가 사용되는지 확인합니다.
  2. 사용자 지정 AMI ID를 사용하는 경우 각 노드 값의 최대 포드를 결정합니다. max-pods-calculator.sh 스크립트를 실행할 때 --cni-custom-networking-enabled 파라미터를 추가해야 합니다.
    참고: 시작 템플릿 또는 AMI ID를 사용하지 않는 경우 Amazon EKS에서 자동으로 최대 포드 수를 설정합니다.
  3. 운영 체제(OS)에 따라 최대 포드 수를 사용하도록 새 노드에서 사용자 데이터 스크립트를 업데이트합니다.
    Amazon Linux 2, Bottlerocket, Ubuntu 20.04 이상, Windows Server 2019 이상
    #!/bin/bash  
    /etc/eks/bootstrap.sh example-cluster-name --use-max-pods false --kubelet-extra-args '--max-pods=example-max-pods'
    --user-data '#!/bin/bash /etc/eks/nodeadm init \ --container-runtime containerd \ --cluster-name example-cluster-name \ --max-pods example-max-pods'
    참고: 이전 명령에서 example-cluster-name을 EKS 클러스터의 이름으로 바꾸십시오. example-max-pods를 노드당 최대 포드 값으로 바꾸십시오.
    부트스트랩에 대한 자세한 내용은 GitHub 웹 사이트의 awslabs/amazon-eks-ami를 참조하십시오. nodeadm에 대한 자세한 내용은 Amazon Linux 2에서 Amazon Linux 2023으로 업그레이드를 참조하십시오.
    Amazon Linux 2023(AL2023)
  4. 포드를 다시 만들어 새 사용자 지정 네트워킹 구성을 사용합니다.
AWS 공식업데이트됨 8달 전