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.
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.
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.
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.
No subnets found for EKS cluster
How to fix "eks subnet not found" in Kubernetes
unable to compute replica count
How to fix "unable to compute replica count" in Kubernetes HPA
error: context not found
How to fix "error: context not found" in Kubernetes
default backend - 404
How to fix "default backend - 404" in Kubernetes Ingress
serviceaccount cannot list resource
How to fix "serviceaccount cannot list resource" in Kubernetes