1. 네트워킹의 세 가지 핵심 요소
- 각 파드는 고유한 IP 주소를 가진다.
- 모든 파드는 NAT 없이 서로 통신할 수 있다.
- 모든 노드는 NAT 없이 서로 통신할 수 있다. (참고: Kubernetes Core Concepts: Pod)
1.1 EKS의 네트워크 구성
- EKS는 VPC 서브넷과 Elastic Network Interface(ENI)를 활용하여 위 조건을 만족한다.
- 단, EC2 인스턴스 타입마다 지원 가능한 ENI 수와 각 ENI별 할당 가능한 IP 수에 제한이 있다.
1.2 예시: t3.medium 인스턴스 기준
t3.medium 인스턴스는 최대 3개의 ENI를 지원한다. 각 ENI에는 6개의 IPv4 주소가 할당될 수 있다. 따라서 총 3 ENI × 6 IP = 18개의 IP 주소가 있다. 이 중 1개는 노드 자체용으로 예약된다. 나머지 17개의 IP가 파드에 할당 가능하다.
즉, t3.medium 노드당 최대 17개의 파드를 실행할 수 있다. 더 많은 파드를 실행하려면 인스턴스 타입을 변경해야 한다. 최신 EKS 버전에는 ‘Prefix Mode’라는 IP 할당 최적화 기능이 있으나 본 글에서는 다루지 않는다.
1.3 인스턴스 타입별 최대 파드 수 계산법
- 공식 계산식: NUMBER_OF_ENI * (NUMBER_OF_IPV4_PER_ENI - 1) + 2
- t3.medium 예시: 3 * (6 - 1) + 2 = 17 → 최대 17 파드
2. WARM_ENI_TARGET 이란?
EKS 노드는 생성 시 자동으로 ENI(네트워크 인터페이스)가 연결되며, 여기에 할당된 IP를 파드가 사용한다. 파드 수가 증가하여 IP가 부족해지면 추가 ENI가 필요하다. 하지만 새로운 ENI를 생성하고 노드에 연결하는 과정은 시간이 걸려 파드 실행이 지연될 수 있다. 또한, 이 과정에서 Amazon API 호출이 잦아져 API 속도 제한(rate limiting)에 걸릴 위험도 있다.
WARM_ENI_TARGET 옵션은 이러한 지연을 방지하기 위해 사용된다. 이 옵션을 설정하면 노드에 미리 사용할 수 있는 여분의 ENI를 추가로 연결해 둔다. 예를 들어 WARM_ENI_TARGET=1로 설정할 경우, 기본 ENI 외에 1개의 추가 ENI가 항상 노드에 연결되어 대기한다. 따라서 노드가 IP 부족 상황이 되더라도 새 ENI 연결 대기 없이 즉시 사용하여 파드 지연을 최소화할 수 있다.
2.1 WARM_ENI_TARGET 동작 예시
현재 노드에는 총 두 개의 ENI가 연결되어 있다고 가정해 보자.
- 기본 ENI (Primary ENI): 현재 파드에 IP를 할당하며 사용 중.
- 대기 ENI (Secondary ENI): WARM_ENI_TARGET=1 설정에 따라 미리 연결되어 대기 중인 여분의 ENI.
이때, 기본 ENI는 최대 6개의 IP 주소를 가질 수 있다.
- 노드 자체에 사용되는 IP 1개와, 현재 실행 중인 파드 1개에 할당된 IP 1개를 제외하면,
- 기본 ENI에는 아직 4개의 여유 IP가 남아 있다.
클러스터가 새로운 파드 5개를 이 노드에 배치해야 하는 상황이 발생했다. 하지만 기본 ENI에 남은 여유 IP는 4개뿐이므로, 5개의 파드를 모두 수용하기에는 부족하다. 이때 WARM_ENI_TARGET=1 덕분에 이미 대기 중인 추가 ENI가 있으므로, EKS는 지연 없이 즉시 이 대기 ENI를 활용할 수 있다. 새로 배포되는 파드들은 이 대기 ENI에서 IP를 할당받아 바로 실행된다. 그리고 EKS는 이 대기 ENI가 사용되기 시작했으므로, 다시 WARM_ENI_TARGET=1 조건을 만족시키기 위해 세 번째 ENI를 노드에 미리 붙여서 새로운 대기 상태로 준비시킨다.
WARM_ENI_TARGET 값은 1 이상으로 설정할 수 있으며, 예를 들어 WARM_ENI_TARGET=2 로 설정하면 노드에는 항상 2개의 대기(여분) ENI 가 준비 상태로 유지된다.
2.2 ENI 제한 사항
- 인스턴스 타입별 ENI 최대 개수 제한이 있으므로, WARM_ENI_TARGET 값이 그 이상이 될 수 없다.
3. WARM_IP_TARGET 이란?
- WARM_ENI_TARGET과 유사하지만, ENI가 아니라 IP 개수를 기준으로 동작한다.
- WARM_IP_TARGET=1이면, 추가 IP 하나를 미리 확보해 둔다.
- 현재 ENI에 여유 IP가 없으면, 새 ENI를 추가로 붙인다.
- WARM_IP_TARGET도 1 이상 설정 가능하다.
WARM_ENI_TARGET 과 WARM_IP_TARGET 이 모두 설정되어 있다면, WARM_ENI_TARGET 값은 동작하지 않고, WARM_IP_TARGET 설정이 우선 동작합니다.
4. MINIMUM_IP_TARGET 이란?
- WARM_IP_TARGET과 비슷하게 동작하나, 최소 사용 + 여유 IP 수를 지정한다.
- 노드에 할당되어 있어야 하는 IP 총 개수(사용 중 + 여유)의 최소값을 설정한다.
4.1 WARM_IP_TARGET vs MINIMUM_IP_TARGET 차이점
- MINIMUM_IP_TARGET=3 → 사용 중 IP + 여유 IP 합이 최소 3개여야 함
- WARM_IP_TARGET=3 → 여유 IP가 최소 3개여야 함
4.2 동시 설정 예시
- MINIMUM_IP_TARGET=5, WARM_IP_TARGET=2
- 노드에 5개의 IP가 할당된다.
- 파드 5개가 실행될 때, 2개의 여유 IP가 확보된다.
- 총 IP = 5(사용) + 2(여유) = 7개
- MINIMUM_IP_TARGET=2, WARM_IP_TARGET=5
- 노드에 5개의 IP가 할당된다.
- 파드 5개가 실행될 때, 5개의 여유 IP가 확보된다.
- 총 IP = 5(사용) + 5(여유) = 10개
5. 설정 방법
5.1 kubectl 명령어를 통해 수정
VPC CNI 를 사용하고 있다면, 아래의 명령어를 통해 수정할 수 있습니다.
kubectl edit daemonset aws-node -n kube-system
spec:
template:
spec:
containers:
- name: aws-node
env:
- name: WARM_IP_TARGET
value: "3"
5.2 AWS 콘솔에서 Advanced Configuration 적용
AWS EKS 콘솔에서 "추가 기능" > "VPC CNI" > "편집" > "선택 구성 설정" 에서 값을 추가할 수 있다. 아래의 문서를 확인하면 지정된 Schema 가 있으며 변경하고자 하는 값이 존재하는 Schema 의 경우 변경할 수 있다.
https://aws.amazon.com/ko/blogs/containers/amazon-eks-add-ons-advanced-configuration/
Amazon EKS add-ons: Advanced configuration | Amazon Web Services
This post is a follow-up to our previous post, Amazon EKS add-ons preserve customer edits. Introduction In October 2022, the Amazon Elastic Kubernetes Service (Amazon EKS) add-ons team introduced the ability to preserve edits, enabling customers to safely
aws.amazon.com
아래는 Configuration 편집 예시이다.
{
"env": {
"WARM_IP_TARGET": "5"
}
}
6. 주의 사항
WARM_ENI_TARGET, WARM_IP_TARGET은 각각 Pod에 할당하기 위한 여유 IP를 확보하는 설정이다. WARM_IP_TARGET는 IP 주소가 여유롭지 않은 상황에서 ENI가 할당되지 못하는 상황을 방지하고자 채택할 수 있는 옵션 중 하나이다.
WARM_ENI_TARGET을 WARM_IP_TARGET으로 변경했을 때, WARM_IP 충분하게 준비되어있지 않은 상태로 많은 수의 pod가 생성되면 pod에 IP 할당이 늦어질 수 있다. 예를 들어, WARM_IP_TARGET=5 환경에서 pod 7개를 한 번에 생성하면, 여유 IP 부족으로 2개의 pod의 생성 시간이 10초 가량 지연될 수 있다.
https://github.com/aws/amazon-vpc-cni-k8s/blob/master/docs/eni-and-ip-target.md
amazon-vpc-cni-k8s/docs/eni-and-ip-target.md at master · aws/amazon-vpc-cni-k8s
Networking plugin repository for pod networking in Kubernetes using Elastic Network Interfaces on AWS - aws/amazon-vpc-cni-k8s
github.com
'Kubernetes & EKS > k8s 공부 기록' 카테고리의 다른 글
| [kubernetes] Horizontal Pod Autoscaling (HPA) (3) | 2025.08.06 |
|---|---|
| [kubernetes] Network Policy 02 (0) | 2025.06.03 |
| [kubernetes] Network Policy 01 (0) | 2025.06.03 |
| [kubernetes] API Groups (0) | 2025.06.03 |
| [kubernetes] 파드 자원관리 (Quality of Service, QOS) (0) | 2025.05.18 |