Container/Kubernetes

[EKS] 버전 업그레이드 중 failed to assign an IP address to container 에러 해결

ywopsx 2024. 8. 8. 20:55

운영계 AWS EKS 버전 EOL로 인한 업그레이드 작업 (v1.26 > v1.27) 을 하고, 서비스 확인 중 ArgoCD 에서 다음과 같은 로그를 확인하였다.

 

(combined from similar events): Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox "9fc96afb68b14756a148eac4b2898fb180809cdf5eeef45f6611d5af5a5d4f9f": plugin type="aws-cni" name="aws-cni" failed (add): add cmd: failed to assign an IP address to container

 

 

1. 에러 의미: aws-cni 네트워크 플러그인이 컨테이너에 ip 주소를 할당하지 못했음을 의미

2. 확인 내용: 서브넷 구성 및 AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG 옵션값 문제로 인해 IP 할당이 제대로 되지 않음

☆ pod 에 할당되어야하는 ip 대역(secondary subnet) 이 아닌 nodegroup 의 ip 대역으로 할당되면서, container 에 ip 주소를 할당하지 못하여 발생한 이슈였다.

☆ kubectl describe daemonset aws-node -n kube-system 로 AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG 옵션값을 확인했을 때, false 이면 해당 이슈가 발생할 수 있다.

 

3. 조치내용:  옵션 수정 및 pod 를 재배포 하여 옵션 적용 및 ip 정상 할당 확인

$ kubectl edit daemonset aws-node -n kube-system
AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG ="true"			# 해당 옵션 값 (false -> true 변경)

 

 

 

개발계 > 검증계 > 운영계 순으로 버전 업그레이드 작업 (v1.26 > v1.27 > v1.28)  을 진행하며, 개발계 에서부터 해당 이슈를 확인하였다. 해당 이슈는 addons(vpc-cni) 의 버전 충돌이 발생하였을 때, 옵션의 기존 설정값(true)이 보존되지 않아 자동 수정 적용되어서 발생한다. 따라서, 이와 관련하여, addons 에 대해 resolve_conflicts 옵션 및 값을 추가해두었다. 

 

그런데 그 과정에서 해당 에러가 발생하지 않고, AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG 옵션이 true 로 적용 유지되면서 업그레이드가 된 적이 있고, false 로 변경되며 에러가 발생하여 수동으로 조치하여 해결하기도 했다. (결국 운영계까지..)

 

운영계 작업을 할 때 사용자 UI 에 서비스 점검 페이지 파킹 및 새벽 작업이여서 부담이 없었고, 내부적으로 known 이슈라 바로 해결을 하였지만, 개발/검증 단에서도 업그레이드 작업을 진행하였음에도 왜 때마다 상황이 달라지는지 정확히 확인을 못한 부분이 아쉽다. (확인하면 추가로 업데이트 하겠다.)

 

 

 

다음 버전 업그레이드 작업 전까지 k8s 및 EKS 공부를 열심히 할 예정이니, 부족한 부분을 만회할 수 있기를 바란다.