Skip to content

GatewayClass ACCEPTED status shows "Unknown" after installing Contour with Gateway API #7322

@patsevanton

Description

@patsevanton

What steps did you take and what happened:
I installed Contour using Helm with Gateway API enabled:

helm repo add contour https://projectcontour.github.io/helm-charts/
helm repo update
helm upgrade --install contour contour/contour --namespace contour --wait --create-namespace -f contour-values.yaml

contour-values.yaml:

contour:
  service:
    loadBalancerIP: 158.160.0.255
gatewayAPI:
  manageCRDs: true

Then I applied a GatewayClass manifest:

apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: contour
spec:
  controllerName: projectcontour.io/gateway-controller
kubectl apply -f gateway.yaml

After that, I checked the status:

kubectl get gatewayclass
NAME      CONTROLLER                             ACCEPTED   AGE
contour   projectcontour.io/gateway-controller   Unknown    25s

What did you expect to happen:
I expected the ACCEPTED column to show True, indicating that the GatewayClass is recognized and managed by the Contour Gateway API controller.

Anything else you would like to add:
It seems the controller is not marking the GatewayClass as accepted, but I’m not sure whether it’s a configuration issue or a bug.

Environment:

  • Contour version: (run helm list -n contour to check)
NAME   	NAMESPACE	REVISION	UPDATED                                	STATUS  	CHART        	APP VERSION
contour	contour  	1       	2025-11-30 13:34:27.258875714 +0600 +06	deployed	contour-0.2.0	1.33.0
  • Kubernetes version: (run kubectl version)
kubectl version
Client Version: v1.34.1
Kustomize Version: v5.7.1
Server Version: v1.33.3
  • Kubernetes installer & version: v1.33.3
  • Cloud provider or hardware configuration: Cloud provider

Commands to gather debug information:

Check Contour pods

kubectl get pods -n contour

NAME                               READY   STATUS    RESTARTS   AGE
contour-contour-79f8b6fff4-9xr2r   1/1     Running   0          8m46s
contour-envoy-7hnqt                2/2     Running   0          8m47s
contour-envoy-cx6vc                2/2     Running   0          8m46s
contour-envoy-wgk5z                2/2     Running   0          8m46s

Check logs of the Contour Gateway API controller

kubectl logs -n contour deploy/contour-contour -c contour

time="2025-11-30T07:34:48Z" level=info msg="maxprocs: Updating GOMAXPROCS=1: using minimum allowed GOMAXPROCS"
time="2025-11-30T07:34:48Z" level=info msg="args: [serve --incluster --xds-address=0.0.0.0 --xds-port=8001 --http-port=8000 --envoy-service-http-port=8080 --envoy-service-https-port=8443 --contour-cafile=/certs/ca.crt --contour-cert-file=/certs/tls.crt --contour-key-file=/certs/tls.key --config-path=/config/contour.yaml --envoy-service-namespace=contour --envoy-service-name=contour-envoy --leader-election-resource-name=contour-contour-contour --log-format=text --kubernetes-debug=0]"
time="2025-11-30T07:34:49Z" level=info msg="started event handler" context=contourEventHandler
time="2025-11-30T07:34:49Z" level=info msg="started HTTP server" address="127.0.0.1:6060" context=debugsvc
time="2025-11-30T07:34:49Z" level=info msg="started HTTP server" address="0.0.0.0:8000" context=metricsvc
time="2025-11-30T07:34:49Z" level=info msg="waiting for the initial dag to be built" context=xds
time="2025-11-30T07:34:49Z" level=info msg="attempting to acquire leader lease contour/contour-contour-contour..." caller="leaderelection.go:257" context=kubernetes
time="2025-11-30T07:34:49Z" level=info msg="successfully acquired lease contour/contour-contour-contour" caller="leaderelection.go:271" context=kubernetes
time="2025-11-30T07:34:49Z" level=info msg="started status update handler" context=StatusUpdateHandler
time="2025-11-30T07:34:49Z" level=info msg="received a new address for status.loadBalancer" context=loadBalancerStatusWriter loadbalancer-address=
time="2025-11-30T07:34:49Z" level=info msg="the initial dag is built" context=xds
time="2025-11-30T07:34:49Z" level=info msg="started xDS server" address="0.0.0.0:8001" context=xds
time="2025-11-30T07:34:49Z" level=info msg="performing delayed update" context=contourEventHandler last_update=121.48634ms outstanding=3
time="2025-11-30T07:34:52Z" level=info msg="received a new address for status.loadBalancer" context=loadBalancerStatusWriter loadbalancer-address=158.160.142.188

Check GatewayClass details

kubectl describe gatewayclass contour

kubectl describe gatewayclass contour
Name:         contour
Namespace:    
Labels:       <none>
Annotations:  <none>
API Version:  gateway.networking.k8s.io/v1
Kind:         GatewayClass
Metadata:
  Creation Timestamp:  2025-11-30T07:35:40Z
  Generation:          1
  Resource Version:    18226
  UID:                 1441c95d-9557-4388-b356-776dde6a1902
Spec:
  Controller Name:  projectcontour.io/gateway-controller
Status:
  Conditions:
    Last Transition Time:  1970-01-01T00:00:00Z
    Message:               Waiting for controller
    Reason:                Pending
    Status:                Unknown
    Type:                  Accepted
Events:                    <none>

Check if CRDs are created

kubectl get crds | grep gateway

kubectl get crds | grep gateway
backendtlspolicies.gateway.networking.k8s.io          2025-11-30T07:34:44Z
gatewayclasses.gateway.networking.k8s.io              2025-11-30T07:34:44Z
gateways.gateway.networking.k8s.io                    2025-11-30T07:34:44Z
grpcroutes.gateway.networking.k8s.io                  2025-11-30T07:34:44Z
httproutes.gateway.networking.k8s.io                  2025-11-30T07:34:44Z
referencegrants.gateway.networking.k8s.io             2025-11-30T07:34:44Z
tcproutes.gateway.networking.k8s.io                   2025-11-30T07:34:44Z
tlsroutes.gateway.networking.k8s.io                   2025-11-30T07:34:44Z
udproutes.gateway.networking.k8s.io                   2025-11-30T07:34:44Z
xbackendtrafficpolicies.gateway.networking.x-k8s.io   2025-11-30T07:34:44Z
xlistenersets.gateway.networking.x-k8s.io             2025-11-30T07:34:44Z

Metadata

Metadata

Assignees

No one assigned

    Labels

    kind/bugCategorizes issue or PR as related to a bug.lifecycle/needs-triageIndicates that an issue needs to be triaged by a project contributor.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions