AWS EKS에 생성된 Pod들에는 EKS Cluster 생성시 선택하였던 Subnet의 IP들이 할당되며 이를 VPC 네트워킹이라고 한다. 이전 포스팅에서 EKS가 이러한 동작을 할 수 있도록 VPC_CNI 플러그인 설정을 해주었다. 이 VPC_CNI는 EKS kube-system 네임스페이스에서 aws-node라는 이름의 DaemonSet 형태로 배포되어있다.
이 aws-node가 정상적으로 동작되지 않으면 노드그룹의 인스턴스들이 모두 NotReady 상태가 된다 (Pod가 생성될 공간이 존재하지 않게 됨).
AWS에서는 다음 글과 같이 aws-node가 정상 동작하지 않을 때 확인해야할 부분 (서브넷 내 가용 IP 수, CNI)을 알려주고있다 (https://aws.amazon.com/ko/premiumsupport/knowledge-center/eks-cni-plugin-troubleshooting/).
[증상]
본 오류는 kube-proxy는 Running이나, aws-node가 정상적으로 생성되지 않았었다 (반복적으로 재생성 시도).
aws-node에서 발생되는 로그는 아래와 같았다 (다음 로그에서 멈춰져있었다).
$ kubectl logs pod/aws-node-25xl4 -n kube-system
{"level":"info","ts":"2022-05-01T07:45:15.055Z","caller":"entrypoint.sh","msg":"Validating env variables ..."}
{"level":"info","ts":"2022-05-01T07:45:15.056Z","caller":"entrypoint.sh","msg":"Install CNI binary.."}
{"level":"info","ts":"2022-05-01T07:45:15.068Z","caller":"entrypoint.sh","msg":"Starting IPAM daemon in the background ... "}
{"level":"info","ts":"2022-05-01T07:45:15.070Z","caller":"entrypoint.sh","msg":"Checking for IPAM connectivity ... "}
I0501 07:45:16.178456 11 request.go:621] Throttling request took 1.044116002s, request: GET:https://10.100.0.1:443/apis/elbv2.k8s.aws/v1beta1?timeout=32s
이 부분을 확인해도 안된다면 마지막으로 관련 리소스가 수정/삭제된 것은 아닌지 확인해본다.
- AmazonEKS_CNI_Policy가 연결되어있는 IAM Role (vpc-cni plugin에 적용)
- 해당 역할의 신뢰 관계 확인 (OIDC 정보 및 관련 namespace, service 이름 확인)
- 자격 증명 공급자 존재 여부 확인 (EKS Cluster ODIC Provider URL과 일치하는지 확인)
나의 경우 원인은 자격 증명 공급자 삭제 때문이었다.
- 위치: IAM > 자격증명 공급자
EKS Cluster의 자격 증명 공급자를 다시 생성한다.
EKS Cluster의 OIDC Provider URL은 아래 위치에 존재한다.
AWS IAM 자격 증명 공급자 재생성 후 aws-node pod들을 재시작 해주었으며, 그 결과 aws-node가 정상 동작하고, 각 노드 인스턴스가 EKS Cluster에 정상 조인 된 것을 확인할 수 있었다.
$ kubectl logs pod/aws-node-gdknp -n kube-system
{"level":"info","ts":"2022-05-01T07:55:40.418Z","caller":"entrypoint.sh","msg":"Validating env variables ..."}
{"level":"info","ts":"2022-05-01T07:55:40.419Z","caller":"entrypoint.sh","msg":"Install CNI binary.."}
{"level":"info","ts":"2022-05-01T07:55:40.432Z","caller":"entrypoint.sh","msg":"Starting IPAM daemon in the background ... "}
{"level":"info","ts":"2022-05-01T07:55:40.433Z","caller":"entrypoint.sh","msg":"Checking for IPAM connectivity ... "}
I0501 07:55:41.527829 11 request.go:621] Throttling request took 1.044246955s, request: GET:https://10.100.0.1:443/apis/elbv2.k8s.aws/v1beta1?timeout=32s
{"level":"info","ts":"2022-05-01T07:55:46.464Z","caller":"entrypoint.sh","msg":"Copying config file ... "}
{"level":"info","ts":"2022-05-01T07:55:46.469Z","caller":"entrypoint.sh","msg":"Successfully copied CNI plugin binary and config file."}
{"level":"info","ts":"2022-05-01T07:55:46.470Z","caller":"entrypoint.sh","msg":"Foregrounding IPAM daemon ..."}
+ 추가로 CloudTrail을 사용하고 있으며 비교적 최근 발생 된 일이라면 어느 사용자, 역할 등을 통해 삭제되었는지 확인 가능하다.
IAM은 글로벌 서비스이므로 검색시 미국 동부 (버지니아 북부 us-east-1)에서 검색해야한다.
본 포스팅 오류 원인은 OIDC Provider 삭제였으므로 DeleteOpenIDConnectProvider를 검색하였음
[참고]
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/pod-networking.html
https://aws.amazon.com/ko/premiumsupport/knowledge-center/eks-cni-plugin-troubleshooting/
'AWS > EKS' 카테고리의 다른 글
[AWS/EKS] Container Insights와 Fluent-bit로 EKS 모니터링, 로그 수집 하기 (0) | 2022.04.26 |
---|---|
[AWS/EKS] AWS IAM 사용자에 대한 RBAC (Role-based Access Control) 설정하기 (0) | 2022.04.11 |
[AWS/EKS] 콘솔로 생성하는 EKS - ④ ingress로 서비스 외부 노출 시키기 (AWS LoadBalancer Controller 설치) (0) | 2022.03.17 |
[AWS/EKS] 콘솔로 생성하는 EKS - ③ 노드 그룹 생성 (0) | 2022.01.17 |
[AWS/EKS] 콘솔로 생성하는 EKS - ② EKS Cluster 생성, OIDC 구성 (0) | 2022.01.10 |
댓글