Comparing 3 Cilium Installation Modes on EKS: ENI vs CNI Chaining vs BYOCNI (Overlay)

Contents

Overview

Choosing how to install Cilium on EKS effectively means deciding who assigns Pod IPs and how (VPC ENI vs overlay), whether the VPC can route Pod IPs directly (Direct routing vs Encapsulation), and to what extent to retain the default AWS add-ons (AWS VPC CNI, kube-proxy).

This post reviews the following 3 sources: what each covers, how each setup works, and the differences, advantages, and disadvantages of the configurations.

Source Type Main Topic
https://cilium.io/blog/2025/06/19/eks-eni-install/ Blog (tutorial) Install Cilium on EKS in ENI mode (= replace AWS VPC CNI + kube-proxy replacement)
https://cilium.io/blog/2025/07/08/byonci-overlay-install/ Blog (tutorial, part 2 of a series) Install Cilium on EKS in CNI chaining mode and BYOCNI(overlay) mode
https://docs.cilium.io/en/stable/installation/cni-chaining-aws-cni/ Official documentation (reference) Prerequisites, precautions, and validation steps for AWS VPC CNI + Cilium chaining (hybrid)

Writing/validation criteria: Compare the documents and blogs from the perspectives of "Can the instructions be reproduced as written?" and "What operational constraints arise?" (Versions/defaults can change over time, so always check the latest documented Helm values and EKS add-on status before applying a configuration.)


TL;DR (Conclusion)


Line guide

  • CNI 호출 순서
  • Pod IP 할당(IPAM) 책임. 체이닝은 ENI 디바이스 구성도 같은 선
  • eBPF 부착
  • 라우팅·캡슐레이션

ENI 모드

ENI 모드: 누가 무엇을 맡는가Kubelet이 Cilium CNI를 호출하고, Cilium ENI IPAM이 Pod에 ENI 기반 VPC IP를 할당한다. AWS VPC ENI로 VPC가 직접 라우팅하고 캡슐레이션은 필요 없다. AWS VPC CNI는 제거하거나 비활성화한다.CNI 호출Pod IP 할당Cilium 역할라우팅AWS VPC CNIKubeletCilium CNICilium agentCNI 호출CiliumENI IPAMPodENI 기반 VPC IPPod IP할당Cilium이 ENI/IPAM까지 담당AWS VPC ENIVPC 라우팅직접라우팅캡슐레이션 필요 없음제거/비활성화
  • AWS VPC CNI(aws-node) 제거/비활성화
  • 블로그 예시는 kube-proxy 대체(kubeProxyReplacement=true) 사용

CNI chaining 모드

CNI chaining 모드: 누가 무엇을 맡는가Kubelet이 첫 CNI로 AWS VPC CNI, 다음 CNI로 Cilium을 호출한다. AWS VPC CNI가 ENI 디바이스 구성과 IPAM을 맡고, Cilium agent는 그 Pod netdev에 eBPF를 부착한다. Pod IP는 ENI 기반이라 VPC 네이티브 라우팅이다. AWS VPC CNI는 유지한다.CNI 호출Pod IP 할당Cilium 역할라우팅AWS VPC CNIKubeletAWS VPC CNI첫 CNI(aws-node)Cilium CNI다음 CNI(agent)AWS VPC CNIENI IPAMPod netdevENI 기반 Pod IP디바이스구성·IPAMCilium agentPod netdeveBPF부착Pod IP는 ENI 기반VPC 네이티브 라우팅캡슐레이션 필요 없음유지
  • 기존 Pod 재시작 필요(공식 문서에 명시)
  • L7 Policy·IPsec Transparent Encryption 등 일부 기능 제한 가능

BYOCNI(Overlay) 모드

BYOCNI(Overlay) 모드: 누가 무엇을 맡는가Kubelet이 Cilium CNI를 호출하고, Cilium 클러스터 IP 풀이 overlay Pod IP를 할당한다. 노드 간 트래픽은 VXLAN 또는 Geneve 터널로 캡슐레이션되고 VPC는 노드 IP를 라우팅한다. AWS VPC CNI는 사용하지 않는다.CNI 호출Pod IP 할당Cilium 역할라우팅AWS VPC CNIKubeletCilium CNICilium agentCNI 호출Cilium클러스터 IP 풀Pod IPoverlayPod IP할당Cilium이 오버레이로 Pod 네트워크 구성VXLAN 또는Geneve 터널캡슐레이션VPC노드 IP 라우팅노드 IP라우팅Pod IP 직접 라우팅 아님제거/미사용
  • MTU·캡슐레이션 오버헤드·트러블슈팅 부담
  • kube-proxy 대체는 설계에 따라 가능
세 모드의 같은 행을 맞춰 Pod IP 할당, Cilium 역할, 라우팅, AWS VPC CNI의 처리를 비교한다. ENI와 체이닝은 Pod가 계속 VPC IP를 써서 주소 고갈이 남을 수 있고(Prefix Delegation도 서브넷 주소 부족을 없애지 않음), Overlay는 VXLAN/Geneve로 Pod 대역을 따로 쓴다.
Read the diagram as text
  1. CNI 호출: 세 모드 모두 Kubelet이 CNI를 호출한다. 체이닝은 AWS VPC CNI가 첫 CNI, Cilium이 다음 CNI다.
  2. Pod IP 할당: ENI는 Cilium ENI IPAM, 체이닝은 AWS VPC CNI(ENI IPAM), Overlay는 Cilium 클러스터 IP 풀이 맡는다.
  3. Cilium 역할: ENI는 ENI/IPAM까지 담당, 체이닝은 AWS VPC CNI가 만든 디바이스에 eBPF 부착, Overlay는 오버레이로 Pod 네트워크를 구성한다.
  4. 라우팅: ENI와 체이닝은 VPC가 Pod IP를 직접 라우팅하고 캡슐레이션이 필요 없다. Overlay는 VXLAN 또는 Geneve로 캡슐레이션하고 VPC는 노드 IP를 라우팅한다.
  5. AWS VPC CNI: ENI는 제거/비활성화, 체이닝은 유지, Overlay는 제거/미사용이다.

1) What Does Each Source Cover?

(1) eks-eni-install: A Tutorial on Installing Cilium in ENI Mode on EKS

This post walks through installing Cilium in ENI mode on EKS.

The post notes a limitation: the cluster and node group cannot be created together when default add-ons are disabled. Since this depends on the evolving support in eksctl/EKS, checking the eksctl documentation at the time of implementation is prudent.

(2) byonci-overlay-install: A Comparison/Installation Tutorial for Chaining vs Overlay(BYOCNI)

Part 2 of the series covers 2 additional installation modes.

  1. CNI chaining mode
  1. BYOCNI(Overlay) mode

(3) cni-chaining-aws-cni: The Official Reference for Chaining Mode

The official documentation defines clear responsibilities for the AWS VPC CNI + Cilium combination.

It also highlights operational details that are easy to miss.


2) How Do the Components and Workflow Differ?

The key is which CNI runs first when a Pod is created, and which component is responsible for its IP.

(A) ENI Mode: Cilium Handles ENI/IPAM Too

Diagram 1ENI 모드: Kubelet이 부른 Cilium CNI와 Cilium agent가 Pod netdev를 만들고 AWS VPC ENI를 다뤄, Pod 트래픽이 VPC 라우팅으로 나간다.KubeletCilium CNICilium agentPod netdevPodAWS VPC ENIVPC routing
ENI 모드: Kubelet이 부른 Cilium CNI와 Cilium agent가 Pod netdev를 만들고 AWS VPC ENI를 다뤄, Pod 트래픽이 VPC 라우팅으로 나간다.

(B) CNI Chaining Mode: AWS VPC CNI Handles IPAM, Cilium Handles eBPF

Diagram 2CNI Chaining: Kubelet이 AWS VPC CNI(aws-node)로 ENI를 받고, 이어서 Cilium CNI와 agent가 Pod netdev를 맡는다.KubeletAWS VPC CNI aws nodeAWS VPC ENICilium CNICilium agentPod netdevPod
CNI Chaining: Kubelet이 AWS VPC CNI(aws-node)로 ENI를 받고, 이어서 Cilium CNI와 agent가 Pod netdev를 맡는다.

(C) BYOCNI(Overlay) Mode: Cilium Builds the Pod Network with an Overlay

Diagram 3Overlay: Cilium이 Pod IP를 오버레이로 주고 vxlan 또는 geneve 터널로 감싸며, VPC는 노드 IP 경로만 안다.KubeletCilium CNICilium agentPod IP overlayTunnel vxlan or geneveVPC routes node IPs
Overlay: Cilium이 Pod IP를 오버레이로 주고 vxlan 또는 geneve 터널로 감싸며, VPC는 노드 IP 경로만 안다.

3) Configuration Differences (Decision Points)

Comparison at a Glance

Category ENI Mode CNI Chaining Mode BYOCNI(Overlay) Mode
IPAM provider Cilium (ENI IPAM) AWS VPC CNI (ENI IPAM) Cilium (cluster IP pool)
Pod IPs directly routable in the VPC? Yes Yes No (usually encapsulated)
AWS VPC CNI (aws-node) Removed/disabled Retained Removed/unused
Encapsulation Not needed Not needed Required (usually VXLAN/Geneve)
kube-proxy-free (replacement) Yes (used in the blog) Possible, depending on design Possible (depending on design)
Importance of restarting existing Pods Medium High (explicitly stated in official docs) Medium
Operational complexity Medium (replacement) Medium–high (2 coexisting CNIs) High (MTU/tunnels/debugging)

4) Advantages and Disadvantages (Operational Perspective)

ENI Mode

Advantages

Disadvantages/precautions

CNI Chaining Mode

Advantages

Disadvantages/precautions

BYOCNI(Overlay) Mode

Advantages

Disadvantages/precautions


5) Which Should I Choose? (A Practical Guide)


5.1) If Pod IP Exhaustion Is the Starting Point (Avoiding Misunderstandings)

Many teams consider Cilium because available Pod IPs run out quickly. First, clarify the following.

The conclusion is fairly simple.


5.2) Trade-offs for AWS-Native Integration

When changing networking to resolve Pod IP exhaustion, whether the VPC can route/observe Pod IPs directly has a major impact on the usability of AWS-native features.

CNI Chaining (Retain AWS VPC CNI)

Cilium ENI Mode (Replace AWS VPC CNI)

Overlay(BYOCNI)


5.3) AWS-Native Solutions to Check First for IP Shortages (Checklist)

Before moving to an overlay, these are among the most commonly used solutions on EKS.

(1) AWS VPC CNI Prefix Delegation

If the Pod count per node is restricted by ENI/IP limits, Prefix Delegation often makes a noticeable difference. However, if the subnet CIDR is too small, the overall address space will still run out first.

Conceptual example: Set Prefix Delegation environment variables on aws-node

bash
kubectl -n kube-system set env ds/aws-node \
  ENABLE_PREFIX_DELEGATION=true \
  WARM_PREFIX_TARGET=1

(2) Expand/Add Subnet CIDRs (Address Planning)

If the entire VPC is running short of addresses, changing the CNI eventually reaches the same limit, so expanding/adding subnet CIDRs is the more direct approach.

(3) Node Instance Type/Node Count Strategy

Since ENI/IP limits vary by instance type, changing instance types or adding nodes is often the simplest solution when the IP bottleneck is per node.

(4) Consider IPv6/Dual Stack (If Feasible)

If organizational/service constraints allow it, IPv6 can structurally alleviate address exhaustion. However, ecosystem and integration requirements need review.


6) Reproducible Checklist (Common Steps)

(1) Check Cluster Add-on Status

bash
kubectl get ds -n kube-system
kubectl get pods -n kube-system

(2) Check API Server Host/Port (Common Blog Workflow)

bash
kubectl cluster-info

When setting k8sServiceHost, the ENI mode blog explicitly says to remove https://.

(3) Validate the Installation

bash
cilium status --wait
cilium connectivity test

(4) For Chaining Mode, Plan to Restart Existing Pods

According to the official documentation, chaining is not applied automatically to running Pods. Include a maintenance window (rolling restart plan).


Closing Notes

The three sources cover essentially the same topic at different depths.

Choose ENI for performance/simplicity/a conventional approach, chaining for gradual adoption, and overlay(BYOCNI) for avoiding ENI IP limits. Whatever you choose, planning for the cluster's add-on state at creation (aws-node/kube-proxy), Pod restarts, and validation routines greatly improves the chances of operational success.

Diagram

100%

Drag to pan; pinch or use the wheel to zoom. Keyboard: arrow keys pan, + − zoom, 0 fits, Esc closes. The same content is in “Read the diagram as text” below the figure.