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

5분 분량
0

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

간략한 설명

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

  • 워커 노드의 IAM 역할에 연결되는 CNI 정책을 포함한 AWS Identity and Access Management(IAM) 권한. 또는 서비스 계정 IAM 역할을 통해 제공하는 IAM 권한.
  • 워커 노드에서 연결할 수 있는 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 포드가 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 보안 그룹 요구 사항 및 고려 사항을 참조하세요.

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

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

3.    kube-proxy 포드가 각 워커 노드에서 Running 상태인지 확인합니다.

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)"'

참고: AvailableIpAddressCount는 포드가 시작되는 서브넷에 대해 0보다 커야 합니다.

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

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

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

안정적인 최신 버전의 CNI 플러그 인을 실행하고 있는지 확인합니다.

최신 버전의 CNI 플러그인이 있는지 확인하려면 Amazon VPC CNI plugin for Kubernetes 자체 관리형 추가 기능 업데이트를 참조하세요.

추가 문제 해결에 대한 자세한 내용을 보려면 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 컨테이너에 대한 도커 컨테이너 이미지를 가져오지 않으면 다음 오류가 발생합니다.

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 구성 변수를 참조하세요.

서브넷의 예약된 공간 확인

참고: 이는 접두사 위임이 켜져 있는 경우에만 적용됩니다. 접두사 위임이 켜져 있는 경우 다음과 같이 기록된 오류 메시지를 확인합니다.

InsufficientCidrBlocks

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

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

코드형 인프라(IaC)를 사용하여 수행한 업데이트가 충돌과 함께 롤백됩니다.

Amazon EKS 관리형 추가 기능을 사용하는 경우 충돌 메서드가 정의되지 않은 경우 다음 서비스를 사용하는 업데이트 오류가 롤백됩니다.

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

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

노드가 NotReady 상태입니다.

Running 상태가 아닌 aws-nodes가 있는 경우 노드가 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 모범 사례 안내서 를 참조하세요.


AWS 공식
AWS 공식업데이트됨 일 년 전
댓글 없음

관련 콘텐츠