How to fix Gateway API Not Installed in Kubernetes
The "Gateway API Not Installed" error occurs when trying to use Gateway API resources (Gateway, HTTPRoute, etc.) without installing the Gateway API CRDs. The Gateway API is a newer alternative to Ingress that requires explicit installation.
Quick fix
Fixes Gateway API Not Installed
kubectl get crd | grep gateway
kubectl get crd gateway.networking.k8s.io
kubectl api-resources | grep gateway
# Check for specific resources:
kubectl api-resources | grep -E "gateway|httproute|tlsroute"
# Or:
kubectl get crd -o name | grep gateway- Check if Gateway API CRDs are installed
- Check Kubernetes version compatibility
- Install Gateway API CRDs
- Install a Gateway controller
kubectl get crd | grep gatewaykubectl get crd gateway.networking.k8s.iokubectl api-resources | grep gateway# Check for specific resources:kubectl api-resources | grep -E "gateway|httproute|tlsroute"# Or:kubectl get crd -o name | grep gatewayGateway API Not Installed
What this error means
Gateway API is the next-generation API for ingress and service routing in Kubernetes. It provides more features than Ingress (routing policies, multiple protocols, fine-grained control). Unlike Ingress which is built-in, Gateway API requires: 1. Installing Gateway API CRDs 2. Installing a Gateway controller/implementation 3. Creating Gateway and route resources If CRDs aren't installed, kubectl won't recognize Gateway, HTTPRoute, TLSRoute, etc.
Typical symptoms
- kubectl get gateway returns "the server doesn't have a resource type"
- kubectl apply shows "no kind Gateway found"
- Custom resource definition not found error
- Controller can't create Gateway resources
- HTTPRoute or other routes not recognized
- Error: "Gateway API is not installed"
- kubectl explain gateway doesn't work
Common causes
- Gateway API CRDs not installed
- Gateway controller not deployed
- Using older Kubernetes version (< 1.18)
- Gateway API disabled or not enabled
- CRDs installed but in different namespace
- Custom resource version mismatch
- Uninstalled after initial setup
How to fix "Gateway API Not Installed"
Verify CRD availability:
kubectl get crd | grep gateway
kubectl get crd gateway.networking.k8s.io
kubectl api-resources | grep gateway
# Check for specific resources:
kubectl api-resources | grep -E "gateway|httproute|tlsroute"
# Or:
kubectl get crd -o name | grep gatewayIf no results, Gateway API CRDs are not installed.
Verify version supports Gateway API:
kubectl version --short
# Kubernetes 1.18+ supports Gateway API
# But 1.20+ is recommended for stable features
# Check feature gates:
kubectl get pod -n kube-system kube-apiserver-<node> -o yaml | grep feature-gates
# Gateway API v1.0 is stable in Kubernetes 1.30+
# Earlier versions use v1beta1 or v1alpha2Gateway API requires Kubernetes 1.18+.
Add the CRDs to the cluster:
# Latest stable (v1.0.0+)
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.0.0/standard-install.yaml
# Or if using experimental features:
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.0.0/experimental-install.yaml
# Verify installation:
kubectl get crd | grep gateway
kubectl api-resources | grep gatewayStandard install includes core resources. Experimental includes additional features.
Deploy a controller to implement the API:
# Option 1: Envoy Gateway
kubectl apply -f https://github.com/envoyproxy/gateway/releases/latest/download/install.yaml
# Option 2: Contour (with Gateway API support)
kubectl apply -f https://projectcontour.io/quickstart/contour.yaml
# Option 3: Kong Ingress Controller
helm install kong kong/kong -n kong --create-namespace \
--set ingressController.enabled=true \
--set gateway.enabled=true
# Option 4: istiod (Istio)
istioctl install
# Verify controller is running:
kubectl get pods -n envoy-gateway-system # or controller namespacePick a controller implementation.
Test the installation:
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: my-gateway
spec:
gatewayClassName: envoy # Or your controller class name
listeners:
- name: http
port: 80
protocol: HTTP
EOF
# Check status:
kubectl get gateway
kubectl describe gateway my-gatewayGateway should be created without errors.
Route traffic through the gateway:
kubectl apply -f - <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: my-route
spec:
parentRefs:
- name: my-gateway
hostnames:
- "example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /api
backendRefs:
- name: my-service
port: 8080
EOF
# Verify:
kubectl get httproute
kubectl describe httproute my-routeHTTPRoute directs traffic to backend services.
If Gateway API is too new, use traditional Ingress:
# Ingress is built-in (no install needed)
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
EOF
kubectl get ingressIngress is stable but less flexible than Gateway API.
Track Gateway status:
kubectl get gateway,httproute,tlsroute -A
kubectl describe gateway <name>
# Check controller logs:
kubectl logs -n envoy-gateway-system -l control-plane=envoy-gateway -f
kubectl logs -n contour-system deployment/contour -f # For Contour
# Monitor for errors:
kubectl get events -n <namespace> --sort-by=.metadata.creationTimestampLogs and events show provisioning status.
Advanced notes
Gateway API is production-ready (v1.0 stable in K8s 1.30+), but adoption is still growing. Major controllers (Envoy, Istio, Contour) support it. For new clusters, Gateway API is recommended over Ingress. For migrations from Ingress, tools like gateway-api-converter can help. Gateway API supports multiple protocols (HTTP, HTTPS, gRPC, TCP) in one resource. Some advanced features (TLSRoute, TCPRoute) are still in beta. Feature gates may be required on older Kubernetes versions. Monitor community for breaking changes in pre-v1 releases.
Frequently asked questions
- What does "Gateway API Not Installed" mean?
- Gateway API is the next-generation API for ingress and service routing in Kubernetes. It provides more features than Ingress (routing policies, multiple protocols, fine-grained control). Unlike Ingress which is built-in, Gateway API requires: 1.
- How do I fix "Gateway API Not Installed"?
- The "Gateway API Not Installed" error occurs when trying to use Gateway API resources (Gateway, HTTPRoute, etc.) without installing the Gateway API CRDs. The Gateway API is a newer alternative to Ingress that requires explicit installation.
- What causes "Gateway API Not Installed"?
- Gateway API CRDs not installed Gateway controller not deployed Using older Kubernetes version (< 1.18)
- Is the "Gateway API Not Installed" error serious?
- It is a medium-severity error โ more of a blocker than a risk. The steps above resolve it.
Official resources & further reading
- ๐Kubernetes Official Documentation
- ๐
- ๐
- ๐
- ๐
- ๐