Gateway API
Ingress replaced with three objects owned by three different people, plus weighted splits and header matching without a single annotation. The status conditions on a Gateway and an HTTPRoute are the whole diagnostic surface.
Services and Networking Guide 60 of 103 Advanced
- Kubernetes1.36.4
- Cluster4 nodes
- Runtimecontainerd 2.2.6
- CNICalico v3.32.1
- TimeAbout 45 min
Gateway API is a set of CRDs on its own release cycle, independent of Kubernetes. The controller here supports a slightly older version than the CRDs installed, which the GatewayClass reports.
- Gateway APIv1.4.0 standard
- ControllerNGINX Gateway Fabric v2.2.1
- LoadBalancerMetalLB v0.15.2
| Server Name | IP Address | OS | Roles | CPU | RAM | HDD |
|---|---|---|---|---|---|---|
| CKA1001 | 192.168.0.175 | Ubuntu 26.04 LTS | Control Plane Node | 2 Core | 4 GB | 50 GB |
| CKA1001-NODE01 | 192.168.0.176 | Ubuntu 26.04 LTS | Worker Node | 2 Core | 4 GB | 50 GB |
| CKA1001-NODE02 | 192.168.0.177 | Ubuntu 26.04 LTS | Worker Node | 2 Core | 4 GB | 50 GB |
| CKA1001-NODE03 | 192.168.0.178 | Ubuntu 26.04 LTS | Worker Node | 2 Core | 4 GB | 50 GB |
This guide includes
Use this when Ingress cannot express what you need - weighted splits, header matching - or when routing has to be owned by more than one team. This matters because Gateway API splits one object into three with different owners, and then enforces that split.
- confirming Gateway API is not in the cluster and is not part of Kubernetes
- creating a Gateway with no controller behind it, and reading the status that says so
- installing a controller with
--server-side, then declaring listeners it can actually provision - attaching an HTTPRoute through
parentRefs, and rewriting paths with no annotations at all - expressing weighted splits and header matches Ingress has no field for, and watching
allowedRoutesenforce the role split
Before you start
- The Ingress controllers and Ingress routing rules guides, since this is the API meant to replace them.
- The Custom resources and operators guide: Gateway API is entirely CRDs.
- A way to give the Gateway an external address. MetalLB here.
-
Not in the cluster, and not part of Kubernetes
-
CRDs without a controller, and the status that says so
-
The controller, and an apply that needs --server-side
-
The Gateway: where traffic enters
-
HTTPRoute: attachment, and rewriting without annotations
-
Weights and headers, which Ingress cannot express
-
The role split, enforced