From 2dde2ebc75ae53e543e4093d28dba302ebade250 Mon Sep 17 00:00:00 2001 From: Dan Lutsch Date: Fri, 5 Dec 2025 15:20:51 +0900 Subject: [PATCH 1/2] Respect Gateway lattice-service-name annotation for service naming --- pkg/gateway/model_build_lattice_service.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pkg/gateway/model_build_lattice_service.go b/pkg/gateway/model_build_lattice_service.go index e2a84733..edb3293c 100644 --- a/pkg/gateway/model_build_lattice_service.go +++ b/pkg/gateway/model_build_lattice_service.go @@ -195,10 +195,31 @@ func (t *latticeServiceModelBuildTask) buildLatticeService(ctx context.Context) } spec.AllowTakeoverFrom = allowTakeoverFrom + // Check for service name override on route first (highest precedence) serviceNameOverride, err := k8s.GetServiceNameOverrideWithValidation(t.route.K8sObject()) if err != nil { return nil, err } + + // If not set on route, check the Gateway's lattice-service-name annotation + if serviceNameOverride == "" { + gw, gwErr := t.findGateway(ctx) + if gwErr == nil && gw != nil { + gwAnnotations := gw.GetAnnotations() + if gwAnnotations != nil { + // Check for the lattice-service-name annotation on the Gateway + if latticeServiceName, exists := gwAnnotations[k8s.AnnotationPrefix+"lattice-service-name"]; exists && latticeServiceName != "" { + if validateErr := k8s.ValidateVPCLatticeServiceName(latticeServiceName); validateErr != nil { + return nil, k8s.NewInvalidServiceNameOverrideError(latticeServiceName, validateErr.Error()) + } + serviceNameOverride = latticeServiceName + t.log.Debugf(ctx, "Using lattice-service-name from Gateway %s/%s: %s", + gw.GetNamespace(), gw.GetName(), latticeServiceName) + } + } + } + } + spec.ServiceNameOverride = serviceNameOverride svc, err := model.NewLatticeService(t.stack, spec) From 69178f9eb2301306cbcb05581138e1d56553337b Mon Sep 17 00:00:00 2001 From: Dan Lutsch Date: Thu, 11 Dec 2025 11:35:09 +0900 Subject: [PATCH 2/2] Use existing service-name-override annotation for Gateway - Extends existing HTTPRoute annotation to Gateway resources - Uses same validation function for consistency - Precedence: HTTPRoute > Gateway > auto-generated --- pkg/gateway/model_build_lattice_service.go | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/pkg/gateway/model_build_lattice_service.go b/pkg/gateway/model_build_lattice_service.go index edb3293c..1762351d 100644 --- a/pkg/gateway/model_build_lattice_service.go +++ b/pkg/gateway/model_build_lattice_service.go @@ -201,21 +201,19 @@ func (t *latticeServiceModelBuildTask) buildLatticeService(ctx context.Context) return nil, err } - // If not set on route, check the Gateway's lattice-service-name annotation + // If not set on route, check the Gateway's service-name-override annotation (fallback) if serviceNameOverride == "" { gw, gwErr := t.findGateway(ctx) if gwErr == nil && gw != nil { - gwAnnotations := gw.GetAnnotations() - if gwAnnotations != nil { - // Check for the lattice-service-name annotation on the Gateway - if latticeServiceName, exists := gwAnnotations[k8s.AnnotationPrefix+"lattice-service-name"]; exists && latticeServiceName != "" { - if validateErr := k8s.ValidateVPCLatticeServiceName(latticeServiceName); validateErr != nil { - return nil, k8s.NewInvalidServiceNameOverrideError(latticeServiceName, validateErr.Error()) - } - serviceNameOverride = latticeServiceName - t.log.Debugf(ctx, "Using lattice-service-name from Gateway %s/%s: %s", - gw.GetNamespace(), gw.GetName(), latticeServiceName) - } + // Use the same validation function as HTTPRoute for consistency + gwServiceNameOverride, gwErr := k8s.GetServiceNameOverrideWithValidation(gw) + if gwErr != nil { + return nil, gwErr + } + if gwServiceNameOverride != "" { + serviceNameOverride = gwServiceNameOverride + t.log.Debugf(ctx, "Using service-name-override from Gateway %s/%s: %s", + gw.GetNamespace(), gw.GetName(), serviceNameOverride) } } }