title: "AWS **CNI(Container Network Interface) plugin**"
description: "AWS CNI plugin 구조 검토"
cleanUrl: /sw-engineer/aws-cni-plugin
floatFirstTOC: right
CNI 기본 사항
- container가 주어진 network 환경에서 동작 가능케 함
- 노드 to 노드 communication을 가능케 함
AWS CNI plugin
기본 사항
- AWS CNI plugin은 AWS에서 공식 관리하는 open source plugin
- private IPv4, IPv6 주소를 VPC에서 pod 및 Service에 할당
- 기본 VPC 네트워킹을 지원(ENI 간에는 k8s와는 관계 없이 연결 가능 - k8s와 관계 없이 VPC 기반의 AWS 인프라를 pod에도 적용 가능하다는 의미)
- EC2 노드에는 다수의 ENI(Elastic Network Interface) 할당 가능
- 기본적으로 1개가 자동 할당되며 이를 가리켜 primary network interface라고 함
- 이외 추가되면 이들은 secondary network interface라고 함
- 각 ENI에는 다수의 IP가 할당될 수 있으며 pod에 할당되는 IP는 secondary IP임(primary는 해당 pod의 외부 통신용으로 사용)
- 각 노드에는 해당 노드 만의 CIDR block이 형성됨
- ALB ingress controller에서 ip mode 지원(외부 connection을
NodePort
를 통하지 않고 직접 pod로 연결)
- 각 노드에 허용 가능한 IP 개수
- min((ENI 개수 * IP 개수 - ENI 개수), 해당 subnet의 free IP)
pod로의 ENI 할당 절차
-
plugin을 클러스터에 설치하면 L-IPAM
(Local IP Address Manager), CNI plugin
으로 구성된 aws-node
란 이름의 DaemonSet
이 각 노드에 생성됨
-
pod 배포 명령은 해당 노드의 kubelet
프로세스에 전달됨
-
kubelet
프로세스는 L-IPAM
에 해당 pod를 네트워크에 추가하라는 request를 전달
-
L-IPAM
은 warm-pool에서 IP 하나를 선택해 pod에 할당
![Untitled](https://prod-files-secure.s3.us-west-2.amazonaws.com/7570d2fc-66b1-4e23-bb3c-ff7b56842b0d/e7e79d72-2fd6-4023-93ca-3d7463629627/Untitled.png)
References