Guide to enabling, configuring, and testing the Cilium ingress controller on Kubernetes, deploying example apps, creating an Ingress with the cilium class, and validating routing
This guide demonstrates how to enable and use the Cilium ingress controller on a Kubernetes cluster where Cilium was installed (for example via Helm) with the default values (ingress disabled by default). You’ll learn the required Cilium Helm values, how to enable the Cilium ingress controller, deploy example apps, create an Ingress resource using the Cilium ingress class, and validate routing.
# kubectl get nodesNAME STATUS ROLES AGE VERSIONmy-cluster-control-plane Ready control-plane 14m v1.32.2my-cluster-worker Ready <none> 14m v1.32.2my-cluster-worker2 Ready <none> 14m v1.32.2
Cilium’s ingress support requires one of two approaches. Choose either NodePort-based ingress or kube-proxy replacement plus L7 proxy. Below is a summary to compare the two options.
Resource / Option
Use case
nodePort.enabled: true
Use NodePort-based ingress if you prefer not to replace kube-proxy and want a simple, direct way to expose the Cilium ingress LoadBalancer through a node port.
kubeProxyReplacement: "strict" + l7proxy: true
Use kube-proxy replacement with Cilium’s L7 proxy if you want Cilium to replace kube-proxy functionality and handle load balancing at L7. This is more feature-rich but requires kube-proxy replacement.
Minimum required Helm values examples (pick one approach):
# Option B: enable kube-proxy replacement + L7 proxykubeProxyReplacement: "strict" # or "true" depending on your Cilium versionl7proxy: true
If your environment is kind (or another local cluster without a cloud LB), provide a LoadBalancer implementation such as MetalLB so the Cilium ingress LoadBalancer can obtain an external IP.
Local clusters often lack a cloud load balancer. Install MetalLB or another LoadBalancer provider and configure an address pool so the cilium-ingress LoadBalancer acquires an external IP address for testing.
You have enabled the Cilium ingress controller, configured load balancer behavior, deployed demo applications, created an Ingress resource using the Cilium ingress class, and tested routing. For production or multi-environment use, consider DNS automation to point hostnames to the Cilium LoadBalancer external IP(s) and review TLS configuration and enforceHttps behavior.