Search
Duplicate
🐍

AWS CNI(Container Network Interface) plugin

Category
S/W 엔지니어
Tags
k8s
Semantic Versioning
Created time
2022/09/22

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 할당 절차

1.
plugin을 클러스터에 설치하면 L-IPAM(Local IP Address Manager), CNI plugin으로 구성된 aws-node란 이름의 DaemonSet이 각 노드에 생성됨
L-IPAM은 해당 노드에 가용 secondary IP 주소의 warm-pool 관리
L-IPAM은 필요 시 secondary network interface를 생성 가능
2.
pod 배포 명령은 해당 노드의 kubelet 프로세스에 전달됨
3.
kubelet 프로세스는 L-IPAM에 해당 pod를 네트워크에 추가하라는 request를 전달