[kubernetes] IP/ENI 예비 할당 정책

2025. 6. 24. 00:16·Kubernetes & EKS/k8s 공부 기록

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
'Kubernetes & EKS/k8s 공부 기록' 카테고리의 다른 글
  • [kubernetes] Horizontal Pod Autoscaling (HPA)
  • [kubernetes] Network Policy 02
  • [kubernetes] Network Policy 01
  • [kubernetes] API Groups
Hyukops
Hyukops
안녕하세요
  • Hyukops
    Hyukops 님의 Tech Blog
    Hyukops
    • 분류 전체보기 (141)
      • Introduction (1)
      • Kubernetes & EKS (43)
        • k8s in action (9)
        • k8s 공부 기록 (17)
        • k8s 운영 가이드 (10)
        • k8s 운영 특이사항 (7)
      • Service Mesh (29)
        • Istio 공부 기록 (20)
        • Istio 운영 특이사항 (9)
      • CICD (10)
        • argoCD 공부 기록 (6)
        • argoCD 운영 특이사항 (4)
      • Logging & Monitoring (5)
        • Prometheus 운영 특이사항 (0)
        • fluent bit 운영 특이사항 (5)
      • Infrastructure as Code (8)
        • terraform 공부 기록 (3)
        • terraform 운영 특이사항 (5)
      • AWS (40)
        • aws 공부 기록 (29)
        • 솔루션 사례 & 문제 해결 (11)
      • Database (5)
        • postgreSQL (5)
  • 태그

    argocd
    MSK
    kubernetes
    aws saa
    k8s in action
    PostgreSQL
    prometheus
    Logging
    AWS
    eks
    fluentbit
    Database
    canary
    fluent bit
    Terraform
    Istio
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Hyukops
[kubernetes] IP/ENI 예비 할당 정책
상단으로

티스토리툴바