How to fix Gateway API Not Installed in Kubernetes

KubernetesBEGINNERMEDIUMUpdated Dec 6, 2025ยท 168 views

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
  1. Check if Gateway API CRDs are installed
  2. Check Kubernetes version compatibility
  3. Install Gateway API CRDs
  4. Install a Gateway controller
kubernetes โ€” error
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
Gateway 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

  1. Gateway API CRDs not installed
  2. Gateway controller not deployed
  3. Using older Kubernetes version (< 1.18)
  4. Gateway API disabled or not enabled
  5. CRDs installed but in different namespace
  6. Custom resource version mismatch
  7. Uninstalled after initial setup

How to fix "Gateway API Not Installed"

1Check if Gateway API CRDs are installed

Verify CRD availability:

bash
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

If no results, Gateway API CRDs are not installed.

2Check Kubernetes version compatibility

Verify version supports Gateway API:

bash
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 v1alpha2

Gateway API requires Kubernetes 1.18+.

3Install Gateway API CRDs

Add the CRDs to the cluster:

bash
# 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 gateway

Standard install includes core resources. Experimental includes additional features.

4Install a Gateway controller

Deploy a controller to implement the API:

bash
# 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 namespace

Pick a controller implementation.

5Create a simple Gateway resource

Test the installation:

bash
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-gateway

Gateway should be created without errors.

6Create HTTPRoute for traffic routing

Route traffic through the gateway:

bash
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-route

HTTPRoute directs traffic to backend services.

7Compare with Ingress API (fallback)

If Gateway API is too new, use traditional Ingress:

bash
# 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 ingress

Ingress is stable but less flexible than Gateway API.

8Monitor Gateway API resources

Track Gateway status:

bash
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.creationTimestamp

Logs 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