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

최종 업데이트 날짜: 2021년 11월 15일

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

간략한 설명

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

  • AWS Identity and Access Management(IAM) 권한(작업자 노드의 IAM 역할에 연결되었거나 서비스 계정 IAM 역할을 통해 제공된 CNI 정책 등)
  • 작업자 노드에서 도달할 수 있는 Amazon EKS API 서버 엔드포인트
  • Amazon Elastic Compute Cloud(Amazon EC2), Amazon Elastic Container Registry(Amazon ECR) 및 Amazon Simple Storage Service(Amazon S3)의 API 엔드포인트에 대한 네트워크 액세스
  • 서브넷에서 사용할 수 있는 충분한 IP 주소
  • aws-node 포드가 준비 상태로 진행되도록 실행 중인 kube-proxy

해결 방법

각 작업자 노드에서 aws-node 포드가 실행 상태인지 확인

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

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

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

명령 출력에 RESTARTS 수가 0보다 큰 값으로 표시되면 다음 단계를 수행해 보세요.

작업자 노드가 Amazon EKS 클러스터의 API 서버 엔드포인트에 도달할 수 있는지 확인합니다.

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

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

1.    Amazon EKS에 대한 작업자 노드의 보안 그룹 설정이 올바르게 구성되어 있는지 확인합니다. 자세한 내용은 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(Amazon VPC) ID의 각 서브넷에서 사용 가능한 IP 주소를 나열하려면 다음 명령을 실행합니다.

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

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

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

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

자세한 내용은 Amazon VPC 할당량을 참조하세요.

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

최신 버전의 CNI 플러그인이 있는지 확인하려면 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이 Docker 컨테이너 이미지를 가져오는지 확인

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

network plugin is not ready: cni config uninitialized

작업자 노드에서 EKS API 서버 엔드포인트에 도달하는지 확인합니다.

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

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

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

자세한 내용은 CNI 플러그인 구성 변수를 참조하세요.

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

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

InsufficientCidrBlocks

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


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


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