@@ -24,6 +24,7 @@ import (
2424 "k8s.io/apimachinery/pkg/api/meta"
2525 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2626 "k8s.io/apimachinery/pkg/runtime"
27+ "k8s.io/apimachinery/pkg/runtime/schema"
2728 "k8s.io/apimachinery/pkg/types"
2829 "k8s.io/apimachinery/pkg/util/intstr"
2930 "k8s.io/client-go/util/retry"
@@ -1269,9 +1270,9 @@ func (r *CoderControlPlaneReconciler) reconcileIngress(ctx context.Context, code
12691270 }
12701271
12711272 wildcardHost := strings .TrimSpace (ingressExpose .WildcardHost )
1272- servicePort := coderControlPlane . Spec . Service . Port
1273- if servicePort == 0 {
1274- servicePort = defaultControlPlanePort
1273+ backendServicePort , backendPortErr := httpRouteBackendServicePort ( coderControlPlane )
1274+ if backendPortErr != nil {
1275+ return backendPortErr
12751276 }
12761277
12771278 ingress := & networkingv1.Ingress {ObjectMeta : metav1.ObjectMeta {Name : coderControlPlane .Name , Namespace : coderControlPlane .Namespace }}
@@ -1293,7 +1294,7 @@ func (r *CoderControlPlaneReconciler) reconcileIngress(ctx context.Context, code
12931294 Backend : networkingv1.IngressBackend {
12941295 Service : & networkingv1.IngressServiceBackend {
12951296 Name : coderControlPlane .Name ,
1296- Port : networkingv1.ServiceBackendPort {Number : servicePort },
1297+ Port : networkingv1.ServiceBackendPort {Number : backendServicePort },
12971298 },
12981299 },
12991300 },
@@ -1314,7 +1315,7 @@ func (r *CoderControlPlaneReconciler) reconcileIngress(ctx context.Context, code
13141315 Backend : networkingv1.IngressBackend {
13151316 Service : & networkingv1.IngressServiceBackend {
13161317 Name : coderControlPlane .Name ,
1317- Port : networkingv1.ServiceBackendPort {Number : servicePort },
1318+ Port : networkingv1.ServiceBackendPort {Number : backendServicePort },
13181319 },
13191320 },
13201321 },
@@ -2925,7 +2926,7 @@ func (r *CoderControlPlaneReconciler) SetupWithManager(mgr ctrl.Manager) error {
29252926 return fmt .Errorf ("index coder control planes by envFrom Secret name: %w" , err )
29262927 }
29272928
2928- return ctrl .NewControllerManagedBy (mgr ).
2929+ builder := ctrl .NewControllerManagedBy (mgr ).
29292930 For (& coderv1alpha1.CoderControlPlane {}).
29302931 Owns (& appsv1.Deployment {}).
29312932 Owns (& corev1.Service {}).
@@ -2941,7 +2942,17 @@ func (r *CoderControlPlaneReconciler) SetupWithManager(mgr ctrl.Manager) error {
29412942 Watches (
29422943 & corev1.ConfigMap {},
29432944 handler .EnqueueRequestsFromMapFunc (r .reconcileRequestsForEnvFromConfigMap ),
2944- ).
2945+ )
2946+
2947+ // Gateway API is optional; only watch HTTPRoutes when the CRD is installed.
2948+ httpRouteGVK := schema.GroupVersionKind {Group : gatewayv1 .GroupVersion .Group , Version : gatewayv1 .GroupVersion .Version , Kind : "HTTPRoute" }
2949+ if _ , err := mgr .GetRESTMapper ().RESTMapping (httpRouteGVK .GroupKind (), httpRouteGVK .Version ); err == nil {
2950+ builder = builder .Owns (& gatewayv1.HTTPRoute {})
2951+ } else if ! meta .IsNoMatchError (err ) {
2952+ return fmt .Errorf ("check HTTPRoute REST mapping: %w" , err )
2953+ }
2954+
2955+ return builder .
29452956 Named ("codercontrolplane" ).
29462957 Complete (r )
29472958}
0 commit comments