@@ -106,12 +106,6 @@ func (r *IngressReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
106106 return ctrl.Result {}, err
107107 }
108108
109- // process routing rules
110- if err := r .processRules (tctx , ingress ); err != nil {
111- r .Log .Error (err , "failed to process ingress rules" , "ingress" , ingress .Name )
112- return ctrl.Result {}, err
113- }
114-
115109 // update the ingress resources
116110 if err := r .Provider .Update (ctx , tctx , ingress ); err != nil {
117111 r .Log .Error (err , "failed to update ingress resources" , "ingress" , ingress .Name )
@@ -288,14 +282,6 @@ func (r *IngressReconciler) processTLS(ctx context.Context, tctx *provider.Trans
288282func (r * IngressReconciler ) processBackends (ctx context.Context , tctx * provider.TranslateContext , ingress * networkingv1.Ingress ) error {
289283 var terr error
290284
291- // process the default backend
292- if ingress .Spec .DefaultBackend != nil && ingress .Spec .DefaultBackend .Service != nil {
293- service := ingress .Spec .DefaultBackend .Service
294- if err := r .processBackendService (ctx , tctx , ingress .Namespace , service .Name , service .Port .Number ); err != nil {
295- terr = err
296- }
297- }
298-
299285 // process all the backend services in the rules
300286 for _ , rule := range ingress .Spec .Rules {
301287 if rule .HTTP == nil {
@@ -308,7 +294,7 @@ func (r *IngressReconciler) processBackends(ctx context.Context, tctx *provider.
308294 }
309295
310296 service := path .Backend .Service
311- if err := r .processBackendService (ctx , tctx , ingress .Namespace , service . Name , service . Port . Number ); err != nil {
297+ if err := r .processBackendService (ctx , tctx , ingress .Namespace , service ); err != nil {
312298 terr = err
313299 }
314300 }
@@ -318,28 +304,37 @@ func (r *IngressReconciler) processBackends(ctx context.Context, tctx *provider.
318304}
319305
320306// processBackendService process a single backend service
321- func (r * IngressReconciler ) processBackendService (ctx context.Context , tctx * provider.TranslateContext , namespace , name string , port int32 ) error {
307+ func (r * IngressReconciler ) processBackendService (ctx context.Context , tctx * provider.TranslateContext , namespace string , backendService * networkingv1. IngressServiceBackend ) error {
322308 // get the service
323309 var service corev1.Service
324310 if err := r .Get (ctx , client.ObjectKey {
325311 Namespace : namespace ,
326- Name : name ,
312+ Name : backendService . Name ,
327313 }, & service ); err != nil {
328- r .Log .Error (err , "failed to get service" , "namespace" , namespace , "name" , name )
314+ r .Log .Error (err , "failed to get service" , "namespace" , namespace , "name" , backendService . Name )
329315 return err
330316 }
331317
332318 // verify if the port exists
333- portExists := false
334- for _ , servicePort := range service .Spec .Ports {
335- if servicePort .Port == port {
336- portExists = true
337- break
319+ var portExists bool
320+ if backendService .Port .Number != 0 {
321+ for _ , servicePort := range service .Spec .Ports {
322+ if servicePort .Port == backendService .Port .Number {
323+ portExists = true
324+ break
325+ }
326+ }
327+ } else if backendService .Port .Name != "" {
328+ for _ , servicePort := range service .Spec .Ports {
329+ if servicePort .Name == backendService .Port .Name {
330+ portExists = true
331+ break
332+ }
338333 }
339334 }
340335
341336 if ! portExists {
342- err := fmt .Errorf ("port %d not found in service %s/%s" , port , namespace , name )
337+ err := fmt .Errorf ("port(name: %s, number: %d) not found in service %s/%s" , backendService . Port . Name , backendService . Port . Number , namespace , backendService . Name )
343338 r .Log .Error (err , "service port not found" )
344339 return err
345340 }
@@ -349,86 +344,22 @@ func (r *IngressReconciler) processBackendService(ctx context.Context, tctx *pro
349344 if err := r .List (ctx , endpointSliceList ,
350345 client .InNamespace (namespace ),
351346 client.MatchingLabels {
352- discoveryv1 .LabelServiceName : name ,
347+ discoveryv1 .LabelServiceName : backendService . Name ,
353348 },
354349 ); err != nil {
355- r .Log .Error (err , "failed to list endpoint slices" , "namespace" , namespace , "name" , name )
350+ r .Log .Error (err , "failed to list endpoint slices" , "namespace" , namespace , "name" , backendService . Name )
356351 return err
357352 }
358353
359354 // save the endpoint slices to the translate context
360355 tctx .EndpointSlices [client.ObjectKey {
361356 Namespace : namespace ,
362- Name : name ,
357+ Name : backendService . Name ,
363358 }] = endpointSliceList .Items
364359
365360 return nil
366361}
367362
368- // processRules process the rules of the ingress
369- func (r * IngressReconciler ) processRules (tctx * provider.TranslateContext , ingress * networkingv1.Ingress ) error {
370- var terr error
371- // convert the IngressRule to the routing rules
372- for _ , rule := range ingress .Spec .Rules {
373- host := rule .Host
374- if rule .HTTP == nil {
375- terr = fmt .Errorf ("rule %s has no HTTP section" , rule .Host )
376- continue
377- }
378-
379- for _ , path := range rule .HTTP .Paths {
380- // process the path type
381- pathType := networkingv1 .PathTypeImplementationSpecific
382- if path .PathType != nil {
383- pathType = * path .PathType
384- }
385-
386- // process the path
387- urlPath := "/"
388- if path .Path != "" {
389- urlPath = path .Path
390- }
391-
392- // process the backend service
393- if path .Backend .Service == nil {
394- terr = fmt .Errorf ("rule %s has no backend service" , rule .Host )
395- continue
396- }
397-
398- // add the backend service to the translate context
399- backendRef := & provider.BackendRef {
400- Namespace : ingress .Namespace ,
401- Name : path .Backend .Service .Name ,
402- Port : path .Backend .Service .Port .Number ,
403- Host : host ,
404- Path : urlPath ,
405- PathType : string (pathType ),
406- }
407-
408- tctx .IngressBackendRefs = append (tctx .IngressBackendRefs , backendRef )
409- }
410- }
411-
412- // process the default backend
413- if ingress .Spec .DefaultBackend != nil && ingress .Spec .DefaultBackend .Service != nil {
414- service := ingress .Spec .DefaultBackend .Service
415-
416- backendRef := & provider.BackendRef {
417- Namespace : ingress .Namespace ,
418- Name : service .Name ,
419- Port : service .Port .Number ,
420- Host : "" , // the default backend has no host
421- Path : "/" , // the default path
422- PathType : string (networkingv1 .PathTypePrefix ),
423- IsDefault : true ,
424- }
425-
426- tctx .IngressBackendRefs = append (tctx .IngressBackendRefs , backendRef )
427- }
428-
429- return terr
430- }
431-
432363// updateStatus update the status of the ingress
433364func (r * IngressReconciler ) updateStatus (ctx context.Context , ingress * networkingv1.Ingress ) error {
434365 var loadBalancerStatus networkingv1.IngressLoadBalancerStatus
0 commit comments