Amazon EKS의 kubelet 또는 CNI 플러그인 문제를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2023년 2월 16일

Amazon Elastic Kubernetes Service(Amazon EKS)용 kubelet 또는 CNI 플러그인 문제를 해결하고 싶습니다.

간략한 설명

CNI 플러그인(Kubernetes 웹사이트)을 사용하여 워커 노드의 포드에 IP 주소를 할당하고 실행하려면 다음이 구성되어 있어야 합니다.

  • AWS Identity and Access Management(IAM) 권한(워커 노드의 IAM 역할에 연결되어 있는 CNI 정책 포함) 또는 서비스 계정 IAM 역할을 통해 제공하는 IAM 권한
  • 워커 노드에서 연결할 수 있는 Amazon EKS API 서버 엔드포인트.
  • Amazon Elastic Compute Cloud(Amazon EC2), Amazon Elastic Container Registry(Amazon ECR) 및 Amazon Simple Storage Service(S3)의 API 엔드포인트에 대한 네트워크 액세스.
  • 서브넷에서 사용할 수 있는 충분한 IP 주소.
  • aws-node 포드가 Ready 상태로 전환되도록 실행되는 kube-proxy
  • 해당 Amazon EKS 버전을 지원하는 kube-proxy 버전VPC CNI 버전.

해결 방법

각 워커 노드에서 aws-node 포드가 Running 상태인지 확인

워커 노드에서 aws-node 포드가 Running 상태인지 확인하려면 다음 명령을 실행합니다.

kubectl get pods -n kube-system -l k8s-app=aws-node -o wide

명령 출력에 RESTARTS 수가 0으로 표시되면 aws-node 포드가 Running 상태입니다. 서브넷에 사용 가능한 여유 IP 주소가 충분히 있는지 확인 섹션의 단계를 시도해보세요.

명령 출력에 RESTARTS 수가 0보다 큰 것으로 표시되면 워커 노드가 Amazon EKS 클러스터의 API 서버 엔드포인트에 연결할 수 있는지 확인하세요. 다음 명령을 실행합니다.

curl -vk https://eks-api-server-endpoint-url

Amazon EKS 클러스터에 대한 연결 확인

1.    Amazon EKS에 대한 워커 노드의 보안 그룹 설정이 올바르게 구성되어 있는지 확인합니다. 자세한 내용은 Amazon EKS security group requirements and considerations(Amazon EKS 보안 그룹 요구 사항 및 고려 사항)을 참조하세요.

2.    서브넷에 대한 작업자 노드의 네트워크 액세스 제어 목록(네트워크 ACL) 규칙이 Amazon EKS API 서버 엔드포인트와의 통신을 허용하는지 확인합니다.

중요: 포트 443에서 인바운드 및 아웃바운드 트래픽을 허용합니다.

3.    각 작업자 노드에서 kube-proxy 포드가 실행 상태인지 확인합니다.

kubectl get pods -n kube-system -l k8s-app=kube-proxy -o wide

4.    워커 노드가 Amazon EC2, Amazon ECR 및 Amazon S3의 API 엔드포인트에 액세스할 수 있는지 확인합니다.

참고: 퍼블릭 엔드포인트 또는 AWS PrivateLink를 통해 이러한 서비스를 구성하세요.

서브넷에 사용 가능한 여유 IP 주소가 충분히 있는지 확인

Amazon Virtual Private Cloud(VPC) ID의 각 서브넷에서 사용 가능한 IP 주소를 나열하려면 다음 명령을 실행합니다.

aws ec2 describe-subnets --filters "Name=vpc-id,Values= VPCID" | jq '.Subnets[] | .SubnetId + "=" + "\(.AvailableIpAddressCount)"'

참고: 포드가 시작되는 서브넷의 경우 AvailableIpAddressCount0보다 커야 합니다.

보안 그룹 한도에 도달했는지 확인

탄력적 네트워크 인터페이스당 보안 그룹의 한도에 도달하면 포드 네트워킹 구성이 실패할 수 있습니다.

자세한 내용은 Amazon VPC quotas(Amazon VPC 할당량)를 참조하세요.

CNI 플러그인의 안정적인 최신 버전을 실행 중인지 확인

최신 버전의 CNI 플러그인이 있는지 확인하려면 Updating the Amazon VPC CNI plugin for Kubernetes self-managed add-on(Kubernetes 자체 관리형 추가 기능용 Amazon VPC CNI 플러그인 업데이트)을 참조하세요.

추가 문제 해결은 AWS GitHub 문제 페이지 및 CNI 플러그인에 대한 릴리스 노트를 참조하세요.

워커 노드에서 VPC CNI 플러그인의 로그 확인

포드를 생성했는데 IP 주소가 컨테이너에 할당되지 않은 경우 다음 오류가 발생합니다.

failed to assign an IP address to container

로그를 확인하려면 /var/log/aws-routed-eni/ 디렉터리로 이동한 다음 plugin.logipamd.log라는 파일 이름을 찾습니다.

kubelet이 도커 컨테이너 이미지를 가져오는지 확인

kubelet이 kube-proxyamazon-k8s-cni 컨테이너에 대한 도커 컨테이너 이미지를 가져오지 않으면 다음 오류가 발생합니다.

network plugin is not ready: cni config uninitialized

워커 노드에서 Amazon EKS API 서버 엔드포인트에 연결할 수 있는지 확인합니다.

WARM_PREFIX_TARGET 값이 올바르게 설정되었는지 확인

참고: 이 섹션은 접두사 위임이 활성화되어 있는 경우에만 적용됩니다. 접두사 위임이 활성화되어 있는 경우 다음 오류 메시지가 로깅되었는지 확인합니다.

Error: Setting WARM_PREFIX_TARGET = 0 is not supported while WARM_IP_TARGET/MINIMUM_IP_TARGET is not set. 
Please configure either one of the WARM_{PREFIX/IP}_TARGET or MINIMUM_IP_TARGET env variable

WARM_PREFIX_TARGET1 이상의 값으로 설정해야 합니다. 0으로 설정하면 다음 오류가 발생합니다.

자세한 내용은 GitHub 웹 사이트에서 CNI configuration variables(CNI 구성 변수)를 참조하세요.

서브넷에서 예약된 공간 확인

참고: 이 섹션은 접두사 위임이 활성화되어 있는 경우에만 적용됩니다. 접두사 위임이 활성화되어 있는 경우 다음 오류 메시지가 로깅되었는지 확인합니다.

InsufficientCidrBlocks

서브넷의 사용 가능한 /28 IP CIDR(16개 IP) 블록이 충분한지 확인합니다. 16개 IP는 모두 연속적이어야 합니다. /28 범위의 연속 IP가 없는 경우 InsufficientCidrBlocks 오류가 발생합니다.

오류를 해결하려면 새 서브넷을 생성하고 거기서 포드를 시작하세요. 또한 Amazon EC2 서브넷 CIDR 예약을 사용하여 접두사가 할당된 서브넷 내의 공간을 예약하세요. 자세한 내용은 서브넷 CIDR 예약 사용을 참조하세요.

충돌이 발생하면서 코드형 인프라(IaC)를 사용하여 수행한 업데이트가 롤백됨

Amazon EKS 관리형 추가 기능을 사용하는 경우, 충돌 메서드가 정의되어 있지 않으면 다음 서비스를 사용한 업데이트에서 오류가 발생할 때 업데이트가 롤백됩니다.

올바른 메서드는 NONE, OVERWRITE 또는 PRESERVE입니다.

  • 정의된 메서드가 없는 경우 기본값은 NONE입니다. 시스템에서 충돌이 감지되면 CloudFormation 스택에 대한 업데이트가 롤백되고 변경 사항이 적용되지 않습니다.
  • 추가 기능의 기본 구성을 설정하려면 overwrite 메서드를 사용합니다. 자체 관리형 추가 기능에서 Amazon EKS 관리형 추가 기능으로 전환할 때는 OVERWRITE를 사용해야 합니다.
  • WARM_IP_TARGET이나 사용자 지정 네트워킹과 같은 사용자 정의 구성을 사용할 경우 PRESERVE 메서드를 사용합니다.

노드가 NotReady 상태임

Running 상태가 아닌 aws-node가 있는 경우, 일반적으로 해당 노드는 NotReady 상태입니다. 자세한 내용은 노드 상태를 NotReady 또는 Unknown에서 Ready 상태로 변경하려면 어떻게 해야 합니까?를 참조하세요.

사용자 지정 네트워킹 구성 문제

VPC CNI의 사용자 지정 네트워킹이 활성화되어 있는 경우 ENIConfig 사용자 지정 리소스 정의(CRD)에서 올바른 서브넷과 보안 그룹을 정의해야 합니다.

사용자 지정 네트워킹이 활성화되었는지 확인하려면 kube-system 네임스페이스에서 aws-node 포드를 기술합니다. 그리고 다음 환경 변수가 true로 설정되어 있는지 확인합니다.

AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG

사용자 지정 네트워킹이 활성화된 경우 CRD가 제대로 구성되었는지 확인합니다.

kubectl get ENIConfig -A -o yaml

가용 영역 이름과 일치하는 각 항목을 기술합니다. 서브넷 ID가 VPC 및 워커 노드 배치와 일치합니다. 보안 그룹이 액세스 가능하거나 클러스터 보안 그룹과 공유됩니다. 모범 사례에 대한 자세한 내용은 GitHub 웹 사이트에서 Amazon EKS 모범 사례 안내서를 참조하세요.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?