Deployment¶
In order to deploy gateway api we need to deploy different components
Gateway API CRDs¶
We need to deploy the official gateway api CRDs. We have all the releases in the official repository.
https://github.com/kubernetes-sigs/gateway-api/releases
We have 2 options here:
Standard¶
The standard installation, includes CRDs in GA or beta status
- GatewayClass
- Gateway
- HTTPRoute
- ReferenceGrant
Experimental¶
The experimental installation add some experimental CRDs:
- TCPRoute
- TLSRoute
- UDPRoute
Gateway Api Controller¶
Here we have a have a lot of implementations with different ways to be deployed.
- Implementation list from Gateway API doc
- AWS Load Balancer Controller
- Ingate (nginx ingress controller replacement)
Gateway Api Controller CDRs¶
The Gateway Api controller usually need to deploy its own CRDs. Read the documentation when deploying the controller. This CRDs permits to configure different aspects of the controller, sometime directly related with exclusive settings of its implementation.
Deployment Considerations¶
CRD Version Management¶
- Check the deployment of the chosen gateway controller if it includes the Gateway API CRDs and the Gateway Api Controller CDRs
- If planning to use only a gateway api controller, it can be a good idea to install the Gateway API CRDs concrete version found in its documentation
- Mixing different controllers in the same k8s cluster adds a decision about what version of the Gateway API CRDs deploy
Multi-Controller Coordination¶
When using a gateway api implementation with a provider load balancer controller, we must choose who will configure the load balancer
For example: Envoy Gateway and AWS Load Balancer Controller
-
We can expose Envoy Gateway via service annottation using a CRD called
EnvoyProxy(spec.provider.envoyService.annotations) This will make the aws load balancer controller to create the load balancer -
AWS Load Balancer Controller with gateway api features enabled, provides its own CRDs (
LoadBalancerConfiguration,TargetGroupConfiguration,ListenerRuleConfiguration) to configure the load balancer itself, ignoring envoy gateway.
We must choose what option do we prefer