soft guideINFRASTRUCTURE & ADVISORY

Note 02

Cilium from the first node, and why not the VPC CNI

Why the platform creates EKS without the VPC CNI and kube-proxy, what Cilium in ENI mode gives that the default does not, and what it costs.

The default, and why it is not enough

An EKS cluster comes with the Amazon VPC CNI for pod networking and kube-proxy for Services. They work, and for many clusters they are the right choice. The platform replaces both with Cilium, for reasons that are about security and operations rather than taste.

Why Cilium

Why from the first node

The common path is to create the cluster with the VPC CNI, install Cilium later, and remove the old CNI with a script. That means two applies, a period where nodes run two datapaths, and a cleanup step that has to be right on every cluster.

The platform instead creates EKS with no self-managed add-ons, installs Cilium with Terraform right after the control plane, and only then creates node groups. Nodes carry a node.cilium.io/agent-not-ready taint until Cilium is running on them, and CoreDNS tolerates it. One apply builds a working cluster.

resource "helm_release" "cilium" {
  chart = "cilium"
  wait  = false # nodes join after this release
  values = [yamlencode({
    ipam                 = { mode = "eni" }
    eni                  = { enabled = true, awsEnablePrefixDelegation = true }
    routingMode          = "native"
    kubeProxyReplacement = true
  })]
}
module "node_group_system" { depends_on = [helm_release.cilium] }

Why ENI mode

In ENI mode Cilium gives each pod an address from its node's subnet, as the VPC CNI does. That keeps pods routable in the VPC without overlays, and it is what makes subnet tiers mean something for pods: a pod on a private-tier node is in the private tier and has no route to the internet; a pod on an egress-pool node leaves through that pool's NAT and fixed IP.

What it costs

For a platform whose security model is built on identity-aware policy, FQDN egress and flow visibility, those costs are worth paying. For a single small cluster with no network policy, the default is fine.

Start a conversation

Bring your infrastructure
into focus.

Tell me what you are building, operating, or trying to improve.

Let’s talk