연재 시리즈

EKS 스터디 - 2주차 1편 - EKS는 어떤 CNI를 사용할까?

악분 2023. 4. 18. 23:51
반응형

EKS는 어떤 CNI를 사용할까?

쿠버네티스에서는 pod 네트워크 설정과 통신을 CNI에게 위임하고 있습니다. AWS는 VPC CNI를 개발하였고 EKS 네트워크에 적용했습니다. VPC CNI덕분에 쿠버네티스가 VPC기능(security group, vpc flow 등)을 사용할 수 있습니다.

EKS가 설치되면 VPC CNI POD가 자동으로 생성됩니다.  모든 노드에 VPC CNI를 설치하기 위해 쿠버네티스 Daemonset으로 생성되고 이름은 aws-node입니다.

kubectl -n kube-system get ds aws-node

 

CNI 버전은 컨테이너 이미지 태글르 참조하시면 됩니다. 아래 예제는 1.11.4버전을 사용합니다.

 kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

 

 

VPC CNI 기능

VPC CNI의 핵심기능은 EKS pod에 IP를 할당하고 pod간 통신을 담당합니다. 

 

EKS에서는 pod IP가 어떻게 할당될까?

VPC CNI는 pod에게 IP를 할당할 때, 노드가 속한 subnet IP대역을 할당합니다. 예를 들어 nodeA subnet이 10.0.10.0/24 CIDR를 갖는다면 nodeA의 pod IP는 10.0.10.0/24 범위에 속합니다.

 

CNI관점이 아닌 AWS관점으로 pod IP할당과정을 다시 봐볼까요? VPC CNI가 할당한 IP는 ENI에 IP가 할당된 것입니다.

 

AWS블로그를 참고하여 동작과정을 살펴보면, VCP CNI에 있는 L-IPAM 데몬이 IP를 할당하게 됩니다. 자세한 내용은 AWS블로그를 참고하시길 바랍니다.

참고자료: https://aws.amazon.com/ko/blogs/containers/amazon-vpc-cni-increases-pods-per-node-limits/

 

pod간 통신

pod간 통신은 이전 글(https://malwareanalysis.tistory.com/555)에서 다룬 적이 있어 자세한 내용은 생략합니다. 그 대신, 꼭 기억해야하는 것은 다른 노드간 pod통신은 VPC 통신이라는 것입니다.

 

앞에서 말씀드린 것처럼 EKS pod IP는 노드 subnet CIDR에 속합니다. 그래서 AWS블로그에서 설명한것처럼 AWS VPC에 속한 Real IP를 갖게 됩니다. pod가 VPC real IP를 갖게됨으로써 다른 노드간 통신에 이점을 갖게 됩니다. real IP가 있어 pod간 오버레이(overlay)통신을 하지 않습니다.

참고자료: https://aws.amazon.com/ko/blogs/opensource/networking-foundation-eks-aws-cni-calico/

 

overlay통신을 이해하기 위해 예제 그림을 준비했습니다. Calico CNI는 overlay통신을 하는 대표적인 CNI입니다. Calico CNI를 사용하면 pod간 통신임에도 불구하고, 출발지와 도착지가 노드IP가 설정됩니다.

 

Calcio CNI가 설치되면 pod IP는 쿠버네티스 클러스터에서만 존재하는 가상 IP입니다. 그래서 다른 노드에 있는 pod로 패킷을 전달하기 위해, 출발지와 도착지 IP를 실제 존재하는 노드 IP를 가지고 캡슐화합니다. 패킷을 받은 노드는 디캡슐하여 pod IP를 획득합니다.

 

VPC CNI는 pod가 VPC의 real IP이므로 캡슐화를 하지 않고 바로 통신합니다. VPC통신이기 때문에 AWS route table이 pod간 통신을 라우팅 합니다.

 

할당된 pod IP는 AWS 콘솔에서 확인할 수 있습니다.

 

반응형