@@ -17,6 +17,7 @@ import (
1717 "k8s.io/apimachinery/pkg/labels"
1818 coreinformers "k8s.io/client-go/informers/core/v1"
1919 "reflect"
20+ ctrcache "sigs.k8s.io/controller-runtime/pkg/cache"
2021 "time"
2122
2223 "github.com/oracle/oci-native-ingress-controller/pkg/client"
@@ -54,36 +55,39 @@ type Controller struct {
5455 controllerClass string
5556 defaultCompartmentId string
5657
57- ingressClassLister networkinglisters.IngressClassLister
58- ingressLister networkinglisters.IngressLister
59- serviceLister corelisters.ServiceLister
60- saLister corelisters.ServiceAccountLister
61- secretLister corelisters.SecretLister
62- queue workqueue.RateLimitingInterface
63- informer networkinginformers.IngressInformer
64- client * client.ClientProvider
65- metricsCollector * metric.IngressCollector
58+ ingressClassLister networkinglisters.IngressClassLister
59+ ingressLister networkinglisters.IngressLister
60+ serviceLister corelisters.ServiceLister
61+ saLister corelisters.ServiceAccountLister
62+ secretLister corelisters.SecretLister
63+ queue workqueue.RateLimitingInterface
64+ informer networkinginformers.IngressInformer
65+ client * client.ClientProvider
66+ metricsCollector * metric.IngressCollector
67+ ctrCache ctrcache.Cache
68+ useLbCompartmentForCertificates bool
6669}
6770
6871// NewController creates a new Controller.
6972func NewController (controllerClass string , defaultCompartmentId string ,
7073 ingressClassInformer networkinginformers.IngressClassInformer , ingressInformer networkinginformers.IngressInformer ,
7174 saInformer coreinformers.ServiceAccountInformer , serviceLister corelisters.ServiceLister , secretInformer coreinformers.SecretInformer ,
72- client * client.ClientProvider ,
73- reg * prometheus.Registry ) * Controller {
75+ client * client.ClientProvider , reg * prometheus.Registry , ctrCache ctrcache.Cache , useLbCompartmentForCertificates bool ) * Controller {
7476
7577 c := & Controller {
76- controllerClass : controllerClass ,
77- defaultCompartmentId : defaultCompartmentId ,
78- ingressClassLister : ingressClassInformer .Lister (),
79- ingressLister : ingressInformer .Lister (),
80- informer : ingressInformer ,
81- serviceLister : serviceLister ,
82- saLister : saInformer .Lister (),
83- secretLister : secretInformer .Lister (),
84- client : client ,
85- queue : workqueue .NewRateLimitingQueue (workqueue .NewItemExponentialFailureRateLimiter (10 * time .Second , 5 * time .Minute )),
86- metricsCollector : metric .NewIngressCollector (controllerClass , reg ),
78+ controllerClass : controllerClass ,
79+ defaultCompartmentId : defaultCompartmentId ,
80+ ingressClassLister : ingressClassInformer .Lister (),
81+ ingressLister : ingressInformer .Lister (),
82+ informer : ingressInformer ,
83+ serviceLister : serviceLister ,
84+ saLister : saInformer .Lister (),
85+ secretLister : secretInformer .Lister (),
86+ client : client ,
87+ queue : workqueue .NewRateLimitingQueue (workqueue .NewItemExponentialFailureRateLimiter (10 * time .Second , 5 * time .Minute )),
88+ metricsCollector : metric .NewIngressCollector (controllerClass , reg ),
89+ ctrCache : ctrCache ,
90+ useLbCompartmentForCertificates : useLbCompartmentForCertificates ,
8791 }
8892
8993 ingressInformer .Informer ().AddEventHandler (
@@ -357,6 +361,16 @@ func (c *Controller) ensureLoadBalancerIP(ctx context.Context, lbID string, ingr
357361func (c * Controller ) ensureIngress (ctx context.Context , ingress * networkingv1.Ingress , ingressClass * networkingv1.IngressClass ) error {
358362
359363 klog .Infof ("Processing ingress %s/%s" , ingressClass .Name , ingress .Name )
364+
365+ certificateCompartmentId := c .defaultCompartmentId
366+ if c .useLbCompartmentForCertificates {
367+ ingressClassParameters , err := util .GetIngressClassParameters (ingressClass , c .ctrCache )
368+ if err != nil {
369+ return err
370+ }
371+ certificateCompartmentId = util .GetIngressClassCompartmentId (ingressClassParameters , c .defaultCompartmentId )
372+ }
373+
360374 stateStore := state .NewStateStore (c .ingressClassLister , c .ingressLister , c .serviceLister , c .metricsCollector )
361375 ingressConfigError := stateStore .BuildState (ingressClass )
362376
@@ -384,7 +398,7 @@ func (c *Controller) ensureIngress(ctx context.Context, ingress *networkingv1.In
384398 for bsName := range lb .BackendSets {
385399 actualBackendSets .Insert (bsName )
386400
387- err = syncBackendSet (ctx , ingress , lbId , bsName , stateStore , c )
401+ err = syncBackendSet (ctx , ingress , lbId , bsName , stateStore , certificateCompartmentId , c )
388402 if err != nil {
389403 return err
390404 }
@@ -396,7 +410,7 @@ func (c *Controller) ensureIngress(ctx context.Context, ingress *networkingv1.In
396410 startBuildTime := util .GetCurrentTimeInUnixMillis ()
397411 klog .V (2 ).InfoS ("creating backend set for ingress" , "ingress" , klog .KObj (ingress ), "backendSetName" , bsName )
398412 artifact , artifactType := stateStore .GetTLSConfigForBackendSet (bsName )
399- backendSetSslConfig , err := GetSSLConfigForBackendSet (ingress .Namespace , artifactType , artifact , lb , bsName , c . defaultCompartmentId , c .secretLister , wrapperClient )
413+ backendSetSslConfig , err := GetSSLConfigForBackendSet (ingress .Namespace , artifactType , artifact , lb , bsName , certificateCompartmentId , c .secretLister , wrapperClient )
400414 if err != nil {
401415 return err
402416 }
@@ -418,7 +432,7 @@ func (c *Controller) ensureIngress(ctx context.Context, ingress *networkingv1.In
418432 for _ , listener := range lb .Listeners {
419433 actualListenerPorts .Insert (int32 (* listener .Port ))
420434
421- err := syncListener (ctx , ingress .Namespace , stateStore , & lbId , * listener .Name , c )
435+ err := syncListener (ctx , ingress .Namespace , stateStore , & lbId , * listener .Name , certificateCompartmentId , c )
422436 if err != nil {
423437 return err
424438 }
@@ -431,7 +445,7 @@ func (c *Controller) ensureIngress(ctx context.Context, ingress *networkingv1.In
431445
432446 var listenerSslConfig * ociloadbalancer.SslConfigurationDetails
433447 artifact , artifactType := stateStore .GetTLSConfigForListener (port )
434- listenerSslConfig , err := GetSSLConfigForListener (ingress .Namespace , nil , artifactType , artifact , c . defaultCompartmentId , c .secretLister , wrapperClient )
448+ listenerSslConfig , err := GetSSLConfigForListener (ingress .Namespace , nil , artifactType , artifact , certificateCompartmentId , c .secretLister , wrapperClient )
435449 if err != nil {
436450 return err
437451 }
@@ -538,7 +552,8 @@ func deleteListeners(actualListeners sets.Int32, desiredListeners sets.Int32, lb
538552 return nil
539553}
540554
541- func syncListener (ctx context.Context , namespace string , stateStore * state.StateStore , lbId * string , listenerName string , c * Controller ) error {
555+ func syncListener (ctx context.Context , namespace string , stateStore * state.StateStore , lbId * string ,
556+ listenerName string , certificateCompartmentId string , c * Controller ) error {
542557 startTime := util .GetCurrentTimeInUnixMillis ()
543558 wrapperClient , ok := ctx .Value (util .WrapperClient ).(* client.WrapperClient )
544559 if ! ok {
@@ -558,7 +573,7 @@ func syncListener(ctx context.Context, namespace string, stateStore *state.State
558573 artifact , artifactType := stateStore .GetTLSConfigForListener (int32 (* listener .Port ))
559574 var sslConfig * ociloadbalancer.SslConfigurationDetails
560575 if artifact != "" {
561- sslConfig , err = GetSSLConfigForListener (namespace , & listener , artifactType , artifact , c . defaultCompartmentId , c .secretLister , wrapperClient )
576+ sslConfig , err = GetSSLConfigForListener (namespace , & listener , artifactType , artifact , certificateCompartmentId , c .secretLister , wrapperClient )
562577 if err != nil {
563578 return err
564579 }
@@ -598,7 +613,8 @@ func syncListener(ctx context.Context, namespace string, stateStore *state.State
598613 return nil
599614}
600615
601- func syncBackendSet (ctx context.Context , ingress * networkingv1.Ingress , lbID string , backendSetName string , stateStore * state.StateStore , c * Controller ) error {
616+ func syncBackendSet (ctx context.Context , ingress * networkingv1.Ingress , lbID string , backendSetName string ,
617+ stateStore * state.StateStore , certificateCompartmentId string , c * Controller ) error {
602618
603619 startTime := util .GetCurrentTimeInUnixMillis ()
604620 wrapperClient , ok := ctx .Value (util .WrapperClient ).(* client.WrapperClient )
@@ -617,7 +633,7 @@ func syncBackendSet(ctx context.Context, ingress *networkingv1.Ingress, lbID str
617633
618634 needsUpdate := false
619635 artifact , artifactType := stateStore .GetTLSConfigForBackendSet (* bs .Name )
620- sslConfig , err := GetSSLConfigForBackendSet (ingress .Namespace , artifactType , artifact , lb , * bs .Name , c . defaultCompartmentId , c .secretLister , wrapperClient )
636+ sslConfig , err := GetSSLConfigForBackendSet (ingress .Namespace , artifactType , artifact , lb , * bs .Name , certificateCompartmentId , c .secretLister , wrapperClient )
621637 if err != nil {
622638 return err
623639 }
0 commit comments