Search

AWS CNI

AWS CNI(Amazon VPC Container Network Interface)는 Amazon Elastic Kubernetes Service(EKS)에서 사용되는 네트워크 플러그인이다. AWS CNI는 Kubernetes 클러스터 내의 파드(Pod)들이 Amazon VPC(Virtual Private Cloud) 네트워크와 통합되도록 한다. 이를 통해 파드들이 VPC 내의 다른 리소스와 원활하게 통신할 수 있다.

주요 기능

1.
VPC 네트워크 통합
파드들이 VPC의 서브넷 내에서 직접 IP 주소를 할당받아 네트워크 통신을 수행한다.
이를 통해 파드들은 VPC 내의 다른 리소스(예: EC2 인스턴스, RDS 데이터베이스)와 동일한 네트워크 환경에서 통신할 수 있다.
2.
고성능 네트워킹
AWS CNI는 고성능 네트워킹을 제공하여 낮은 지연 시간과 높은 처리량을 보장한다.
ENA(Elastic Network Adapter)와 같은 고성능 네트워크 어댑터를 활용한다.
3.
네트워크 정책 지원
Kubernetes 네트워크 정책을 지원하여 파드 간의 네트워크 트래픽을 제어할 수 있다.
이를 통해 보안 규칙을 적용하고, 네트워크 접근을 제한할 수 있다.

VPC CNI 주요 구성 요소

구성 요소
설명
CNI 바이너리(CNI Binary)
Pod의 네트워크 인터페이스를 생성하고 삭제하는 역할을 수행
IP 주소 관리(IPAM, IP Address Management)
VPC 서브넷 내에서 Pod에 할당할 IP 주소를 효율적으로 관리

동작 방식

1.
파드 생성
Kubernetes에서 새로운 파드가 생성될 때, AWS CNI는 해당 파드에 VPC의 서브넷에서 IP 주소를 할당 한다.
이 IP 주소는 ENI(Elastic Network Interface)에 연결된다.
2.
ENI와 IP 주소 할당
AWS CNI는 EC2 인스턴스에 ENI를 생성하고, 해당 ENI에 IP 주소를 할당한다.
파드는 이 ENI를 통해 네트워크 통신을 수행한다.
3.
네트워크 트래픽 처리
파드의 네트워크 트래픽은 ENI를 통해 VPC 네트워크로 전달된다.
이를 통해 파드들은 VPC 내의 다른 리소스와 통신할 수 있다.

ENI (Elastic Network Interface)

ENI는 AWS에서 제공하는 가상 네트워크 인터페이스이다. ENI는 EC2 인스턴스에 연결되어 네트워크 통신을 수행할 수 있도록 한다.

주요 기능

1.
다중 네트워크 인터페이스
하나의 EC2 인스턴스에 여러 개의 ENI를 연결할 수 있다.
이를 통해 다중 네트워크 인터페이스를 사용하여 다양한 네트워크 구성을 할 수 있다.
2.
고가용성
ENI는 고가용성을 제공하여 네트워크 장애 시에도 안정적인 네트워크 통신을 보장한다.
ENI를 다른 EC2 인스턴스로 이동할 수 있어 유연한 네트워크 구성이 가능하다.
3.
보안 그룹 및 네트워크 ACL
ENI는 보안 그룹과 네트워크 ACL(Access Control List)을 적용하여 네트워크 트래픽을 제어한다.
이를 통해 네트워크 보안을 강화할 수 있다.

동작 방식

1.
ENI 생성
ENI는 VPC 내에서 생성되며, 서브넷과 연결된다.
ENI는 하나 이상의 IP 주소를 할당받을 수 있다.
2.
ENI 연결
ENI는 EC2 인스턴스에 연결되어 네트워크 통신을 수행한다.
ENI는 EC2 인스턴스의 기본 네트워크 인터페이스로 사용될 수 있다.
3.
네트워크 트래픽 처리
ENI는 네트워크 트래픽을 처리하여 VPC 내의 다른 리소스와 통신할 수 있도록 한다.
ENI는 보안 그룹과 네트워크 ACL을 통해 네트워크 트래픽을 제어한다.

정리

AWS CNI: Amazon EKS에서 사용되는 네트워크 플러그인으로, 파드들이 VPC 네트워크와 통합되게 한다. 파드들은 VPC의 서브넷에서 IP 주소를 할당받아 네트워크 통신을 수행한다.
ENI: AWS에서 제공하는 가상 네트워크 인터페이스로, EC2 인스턴스에 연결되어 네트워크 통신을 수행한다. ENI는 다중 네트워크 인터페이스, 고가용성, 보안 그룹 및 네트워크 ACL을 지원한다.
AWS CNI와 ENI를 통해 Kubernetes 클러스터와 VPC 네트워크를 원활하게 통합하고, 고성능 네트워킹과 보안을 제공할 수 있다.

ENI vs Secondary IP vs Prefix Delegation

VPC CNI는 Secondary IP Mode가 default다.

ENI (Elastic Network Interface)

Elastic Network Interface는 VPC의 논리적 구성 요소이며 가상 네트워크 카드를 나타냅니다. 즉, ENI는 아래와 같은 속성을 가지고 EC2 인스턴스가 네트워크에 액세스할 수 있게 해준다.
구성 요소:
하나의 기본 프라이빗 IP
다수의 보조(secondary) 프라이빗 IP
보안 그룹
서브넷
MAC 주소

Secondary IP

ENI에 붙일 수 있는 추가 IP 주소이다.
하나의 ENI에 기본 프라이빗 IP 외에 여러 개의 secondary IP를 설정 가능
각 secondary IP에 별도 Elastic IP (EIP) 연결 가능
동일 EC2에서 여러 IP로 통신 가능 (ex. 여러 서비스를 다른 IP로 운영)
한 ENI에 최대 할당 가능한 secondary IP 수는 인스턴스 타입에 따라 다름

Prefix Delegation

AWS에서 서브넷 블록의 일부를 ENI에 붙이는 기능
ENI에 /28, /27 같은 작은 프리픽스(서브넷)를 붙여서, 내부적으로 많은 IP를 EC2 내부에 동적으로 사용 가능
EC2 내부에서 이 IP들을 컨테이너에 할당하는 데 주로 씀
기존 secondary IP 방식은 IP를 하나씩 할당해야 했는데, Prefix Delegation은 대량의 IP 풀을 한 번에 붙여서 관리 효율 증가
EC2에서 Prefix Delegation으로 받은 IP들은 로컬에서 자유롭게 쪼개서 사용 가능
Prefix Delegation Mode
kubectl set env daemonset aws-node -n kube-system ENABLE_PREFIX_DELEGATION=true
Shell
복사
test Pod 생성
kubectl run nginx --image nginx kubectl run nginx2 --image nginx kubectl run nginx3 --image nginx kubectl run nginx4 --image nginx
Shell
복사
ENI에 접속하게 되면 IPv4 Prefix를 확인하게 되면 Pod IP/28이라고 적혀있다.