@@ -288,6 +288,43 @@ func (r *ApisixRouteReconciler) validateSecrets(ctx context.Context, tc *provide
288288 return nil
289289}
290290
291+ func (r * ApisixRouteReconciler ) processExternalNodes (ctx context.Context , tc * provider.TranslateContext , ups apiv2.ApisixUpstream ) error {
292+ for _ , node := range ups .Spec .ExternalNodes {
293+ if node .Type == apiv2 .ExternalTypeService {
294+ var (
295+ service corev1.Service
296+ serviceNN = k8stypes.NamespacedName {Namespace : ups .GetNamespace (), Name : node .Name }
297+ )
298+ if err := r .Get (ctx , serviceNN , & service ); err != nil {
299+ r .Log .Error (err , "failed to get service in ApisixUpstream" , "ApisixUpstream" , ups .Name , "Service" , serviceNN )
300+ if client .IgnoreNotFound (err ) == nil {
301+ continue
302+ }
303+ return err
304+ }
305+ tc .Services [utils .NamespacedName (& service )] = & service
306+ }
307+ }
308+ return nil
309+ }
310+
311+ func (r * ApisixRouteReconciler ) processTLSSecret (ctx context.Context , tc * provider.TranslateContext , ups apiv2.ApisixUpstream , secretNs string ) error {
312+ if ups .Spec .TLSSecret != nil && ups .Spec .TLSSecret .Name != "" {
313+ var (
314+ secret corev1.Secret
315+ secretNN = k8stypes.NamespacedName {Namespace : cmp .Or (ups .Spec .TLSSecret .Namespace , secretNs ), Name : ups .Spec .TLSSecret .Name }
316+ )
317+ if err := r .Get (ctx , secretNN , & secret ); err != nil {
318+ r .Log .Error (err , "failed to get secret in ApisixUpstream" , "ApisixUpstream" , ups .Name , "Secret" , secretNN )
319+ if client .IgnoreNotFound (err ) != nil {
320+ return err
321+ }
322+ }
323+ tc .Secrets [secretNN ] = & secret
324+ }
325+ return nil
326+ }
327+
291328func (r * ApisixRouteReconciler ) validateBackends (ctx context.Context , tc * provider.TranslateContext , in * apiv2.ApisixRoute , http apiv2.ApisixRouteHTTP ) error {
292329 var backends = make (map [k8stypes.NamespacedName ]struct {})
293330 for _ , backend := range http .Backends {
@@ -324,6 +361,9 @@ func (r *ApisixRouteReconciler) validateBackends(ctx context.Context, tc *provid
324361 }
325362 } else {
326363 tc .Upstreams [serviceNN ] = & au
364+ if err := r .processTLSSecret (ctx , tc , au , in .GetNamespace ()); err != nil {
365+ return err
366+ }
327367 }
328368
329369 if service .Spec .Type == corev1 .ServiceTypeExternalName {
@@ -387,35 +427,12 @@ func (r *ApisixRouteReconciler) validateUpstreams(ctx context.Context, tc *provi
387427 }
388428 tc .Upstreams [upsNN ] = & ups
389429
390- for _ , node := range ups .Spec .ExternalNodes {
391- if node .Type == apiv2 .ExternalTypeService {
392- var (
393- service corev1.Service
394- serviceNN = k8stypes.NamespacedName {Namespace : ups .GetNamespace (), Name : node .Name }
395- )
396- if err := r .Get (ctx , serviceNN , & service ); err != nil {
397- r .Log .Error (err , "failed to get service in ApisixUpstream" , "ApisixUpstream" , upsNN , "Service" , serviceNN )
398- if client .IgnoreNotFound (err ) == nil {
399- continue
400- }
401- return err
402- }
403- tc .Services [utils .NamespacedName (& service )] = & service
404- }
430+ if err := r .processExternalNodes (ctx , tc , ups ); err != nil {
431+ return err
405432 }
406433
407- if ups .Spec .TLSSecret != nil && ups .Spec .TLSSecret .Name != "" {
408- var (
409- secret corev1.Secret
410- secretNN = k8stypes.NamespacedName {Namespace : cmp .Or (ups .Spec .TLSSecret .Namespace , ar .GetNamespace ()), Name : ups .Spec .TLSSecret .Name }
411- )
412- if err := r .Get (ctx , secretNN , & secret ); err != nil {
413- r .Log .Error (err , "failed to get secret in ApisixUpstream" , "ApisixUpstream" , upsNN , "Secret" , secretNN )
414- if client .IgnoreNotFound (err ) != nil {
415- return err
416- }
417- }
418- tc .Secrets [secretNN ] = & secret
434+ if err := r .processTLSSecret (ctx , tc , ups , ar .GetNamespace ()); err != nil {
435+ return err
419436 }
420437 }
421438
0 commit comments