@@ -345,17 +345,36 @@ func (c *Controller) verifyCanary(canary *flaggerv1.Canary) error {
345345}
346346
347347func verifyNoCrossNamespaceRefs (canary * flaggerv1.Canary ) error {
348- if canary .Spec .UpstreamRef != nil && canary .Spec .UpstreamRef .Namespace != canary .Namespace {
349- return fmt .Errorf ("can't access gloo upstream %s.%s, cross-namespace references are blocked" , canary .Spec .UpstreamRef .Name , canary .Spec .UpstreamRef .Namespace )
348+ if canary .Spec .UpstreamRef != nil {
349+ // Default to canary namespace if upstreamRef namespace is empty
350+ namespace := canary .Spec .UpstreamRef .Namespace
351+ if namespace == "" {
352+ namespace = canary .Namespace
353+ }
354+ if namespace != canary .Namespace {
355+ return fmt .Errorf ("can't access gloo upstream %s.%s, cross-namespace references are blocked" , canary .Spec .UpstreamRef .Name , canary .Spec .UpstreamRef .Namespace )
356+ }
350357 }
351358 if canary .Spec .Analysis != nil {
352359 for _ , metric := range canary .Spec .Analysis .Metrics {
353- if metric .TemplateRef != nil && metric .TemplateRef .Namespace != canary .Namespace {
354- return fmt .Errorf ("can't access metric template %s.%s, cross-namespace references are blocked" , metric .TemplateRef .Name , metric .TemplateRef .Namespace )
360+ if metric .TemplateRef != nil {
361+ // Default to canary namespace if templateRef namespace is empty
362+ namespace := metric .TemplateRef .Namespace
363+ if namespace == "" {
364+ namespace = canary .Namespace
365+ }
366+ if namespace != canary .Namespace {
367+ return fmt .Errorf ("can't access metric template %s.%s, cross-namespace references are blocked" , metric .TemplateRef .Name , metric .TemplateRef .Namespace )
368+ }
355369 }
356370 }
357371 for _ , alert := range canary .Spec .Analysis .Alerts {
358- if alert .ProviderRef .Namespace != canary .Namespace {
372+ // Default to canary namespace if providerRef namespace is empty
373+ namespace := alert .ProviderRef .Namespace
374+ if namespace == "" {
375+ namespace = canary .Namespace
376+ }
377+ if namespace != canary .Namespace {
359378 return fmt .Errorf ("can't access alert provider %s.%s, cross-namespace references are blocked" , alert .ProviderRef .Name , alert .ProviderRef .Namespace )
360379 }
361380 }
0 commit comments