CNI는 리눅스 컨테이너를 위한 네트워크 인터페이스를 의미한다. 그 중에서도 AWS CNI는 AWS에서 제공하는 플러그인으로, Amazon EKS와 ECS에서 네트워크 연결을 관리하는 역할을 한다. AWS CNI를 사용하면 Kubernetes Pod가 AWS VPC의 기본 네트워크 인터페이스인 ENI를 직접 사용하여 고성능, 저지연의 네트워크 통신이 가능하다.
01. AWS CNI 기능
우선 AWS CNI는 다음과 같은 특징을 갖는다. AWS에 있어서 가지는 특징이다.
- Pod 별 IP 할당: Pod가 EC 인스턴스의 ENI에 직접 연결되어 VPC 내에서 IP를 할당 받을 수 있다. 노드에 배포되는 파드 수가 증가하면 그에 맞춰 ENI가 자동으로 생성된다.
- VPC 네트워크: Pod 간 통신이 VPC 네트워크 내에서 이루어진다. 고성능을 보장받는다.
- 보안 그룹 및 VPC 라우팅 : Kubernetes 네트워크 정책뿐만 아니라 AWS 보안 그룹과 라우팅 정책을 적용할 수 있다.
- ENI Trunking 지원: 여러 개의 Pod가 하나의 ENI를 공유할 수 있어 확장성이 높다.
02.CNI Configuration
CNI의 기본적인 컨피그 설정을 알아보자. Warm 상태는 사용되지 않고 대기 중인 상태를 의미한다.
- WARM_ENI_TARGET (기본값: 1): Warm 상태로 유지할 ENI의 개수
- WARM_IP_TARGET (기본값: None): Warm 상태로 유지할 보조 IP의 개수
- MINIMUM_IP_TARGET (기본값: None): 각 노드가 가져야 할 최소 보조 IP 개수 (노드 생성 시 할당)
노드의 IP 개수는 다음 공식으로 계산할 수 있다:
(ENI 개수 × (ENI당 IP 주소 개수 - 1)) + 2
예시: c5.xlarge 인스턴스의 경우
- ENI 최대 4개
- ENI당 IP 최대 15개
- WARM_ENI_TARGET이 1이므로 노드 생성 시 ENI 2개 할당
따라서 (2 × (15 - 1)) + 2 = 30개의 IP가 생성되며,
이 중 Pod가 사용 가능한 보조 IP는 28개(30 - 2)이다.
03. CNI Process
일반적으로, CNI 바이너리는 L-IPAM 데몬을 호출하여 다음과 같은 상황별 작업을 수행한다. 이 과정을 이해하면 참 좋겠다.
- 새로운 Node가 생성될 때: AWS EKS 노드는 ENI 2개를 가진 상태로 생성된다(기본 WARM_ENI_TARGET이 1이므로).
- 새로운 Pod가 생성 및 할당될 때: ENI의 secondary IP 중 하나가 Pod에 할당된다. hostNetwork: true가 설정된 경우 노드와 동일한 IP를 가질 수도 있다.
- 새로운 IP가 생성될 때: Pod에 할당할 IP가 부족하면 ENI와 IP가 새로 생성된다.
03. AWS CNI 통신
파드 ~ 내부통신
파드가 클러스터 내부와 통신할 때는 대부분 직접통신이 가능하다.
- 노드가 서로 다르더라도 파드는 private IP를 통해 직접 통신할 수 있다.
- Node와 Pod가 동일한 IP 대역을 사용하므로 직접 통신이 가능하다.
파드 ~ 외부통신
파드가 클러스터 외부와 통신할 때는 보통 SNAT기능을 사용하거나 Natgateway를 구성해 사용한다.
- CNI를 통해 iptables 규칙에 따라 Node의 Public IP로 SNAT되어 외부로 전달된다.
- public subnet의 Natgateway를 통해 외부로 전달된다.
IDEA💡
- AWS VPC CNI는 워커 노드에 aws-node라는 이름으로 배포된다.
- 대부분의 노드(인스턴스)에는 하나가 아닌 여러 개의 private IP가 연결되어 있다.
- AWS내에서 보안그룹으로 제어할 수 있으며 ALB 사용이 편리하다.
- 연관 포스트: [EKS] Network Design - AWS VPC 고려사항
'Public Cloud > AWS' 카테고리의 다른 글
[EKS] Network Design - AWS VPC 고려사항 (0) | 2025.03.19 |
---|---|
[Serverless] AWS API Gateway 개념과 lambda와 사용 예시 (0) | 2023.06.06 |
[Serverless] AWS Lambda 내부 동작방식과 스로틀링 (1) | 2023.06.06 |
[Serverless] AWS Lambda 개념과 Workshop (0) | 2023.06.06 |
[Container] 도커, 쿠버네티스 Basic (0) | 2023.06.06 |