발생 상황
AWS EKS 클러스터를 만드는 도중, 워커 노드 그룹 생성에 실패한 상황.
AWS 콘솔을 찾아보니 이런 상태 문제가 발생해 있었습니다.
노드로 쓰일 컴퓨팅 리소스는 잘 생성이 되었으나 한참을 생성중인 상태더니 결국 이런 상태가 뜬 겁니다.
발생 원인
관리형 노드 그룹의 노드가 15분 내에 클러스터에 연결되지 않으면, NodeCreationFailure 라는 상태 문제가 발생합니다.
콘솔 상태가 Create failed로 설정됩니다.
AWS 사용자 가이드에서 NodeCreationFailure를 찾아보면 이렇게 설명되어 있습니다.
NodeCreationFailure
시작된 인스턴스를 Amazon EKS 클러스터에 등록할 수 없습니다. 이러한 오류의 일반적인 원인은 노드 IAM 역할 권한이 충분하지 않거나 노드에 대한 아웃바운드 인터넷 액세스가 부족하기 때문입니다. 노드는 다음 요구 사항 중 하나를 충족해야 합니다.
- 퍼블릭 IP 주소를 사용하여 인터넷에 액세스할 수 있습니다. 노드가 있는 서브넷에 연결된 보안 그룹은 통신을 허용해야 합니다. 자세한 내용은 서브넷 요구 사항 및 고려 사항 및 Amazon EKS 보안 그룹 요구 사항 및 고려 사항 단원을 참조하세요.
- 노드와 VPC는 프라이빗 클러스터 요구 사항의 요구 사항을 충족해야 합니다.
대처
워커 노드 생성을 위한 사용자 역할에 이런 권한을 연결했었는데요.
- AmazonEKSWorkerNodePolicy
- VPC의 Amazon EC2 리소스를 설명할 수 있는 kubelet 권한.
- 이 정책은 Amazon EKS Pod Identity Agent에 대한 권한도 제공합니다.
- AmazonEC2ContainerRegistryReadOnly
- Amazon ECR 의 컨테이너 이미지를 사용할 수 있는 kubelet 권한
- 네트워킹용 내장 애드온이 Amazon ECR의 컨테이너 이미지를 사용하는 포드를 실행하기 때문입니다.
ipv4 주소 체계를 사용하는 EKS이기 때문에 추가로 아래 역할을 연결해주었습니다.
(IPv6 주소체계는 다른 방법을 사용해야 하는 모양입니다. AWS 사용자 가이드를 참고하세요 👉 link)
- AmazonEKS_CNI_Policy
- Amazon VPC CNI 플러그인(amazon-vpc-cni-k8s)에 EKS 워커 노드에서 IP 주소 구성을 수정하는 데 필요한 권한을 제공합니다.
이 권한이 없었기 때문에 워커노드를 생성하며 IP주소 구성을 노드-파드 간 통신이 불가능하게 구성되어 `Unhealthy nodes in the kubenetes cluster` 오류가 나지 않았을까 싶습니다.
IRSA(IAM Roles for Service Account) 또는 EKS Pod Identity를 사용하여 VPC CNI 포드에 권한을 부여하지 않는 경우
인스턴스 역할에서 VPC CNI에 대한 권한을 제공해야 합니다.
그러나 이 역할에 정책을 연결하는 것보다 Amazon VPC CNI 추가 기능에 사용되는 별도의 역할에 정책을 연결하는 것이 좋다고 합니다.
Amazon EKS 노드 IAM 역할에 현재 AmazonEKS_CNI_Policy IAM(IPv4) 정책 또는 IPv6 정책이 연결되어 있고 별도의 IAM 역할을 생성한 경우, 정책을 대신 연결한 다음 aws-node Kubernetes 서비스 계정에 할당한 후 클러스터의 IP 패밀리와 일치하는 AWS CLI 명령을 사용하여 노드 역할에서 정책을 제거하는 것이 좋습니다.
참고 : AWS VPC CNI
Amazon EKS implements cluster networking through the Amazon VPC Container Network Interface(VPC CNI) plugin. The CNI plugin allows Kubernetes Pods to have the same IP address as they do on the VPC network. More specifically, all containers inside the Pod share a network namespace, and they can communicate with each-other using local ports.
아마존 EKS는 아마존 VPC 컨테이너 네트워크 인터페이스(VPC CNI) 플러그인을 통해 클러스터 네트워킹을 구현한다. CNI 플러그인을 사용하면 쿠버네티스 파드가 VPC 네트워크에서와 동일한 IP 주소를 가질 수 있다. 더 구체적으로, 파드 내부의 모든 컨테이너는 네트워크 네임스페이스를 공유하며, 로컬 포트를 사용하여 서로 통신할 수 있다.