@@ -58,14 +58,18 @@ const (
5858 ServiceAnnotationLoadBalancerSSLPorts = "service.beta.kubernetes.io/oci-load-balancer-ssl-ports"
5959
6060 // ServiceAnnotationLoadBalancerTLSSecret is a Service annotation for
61- // specifying the TLS secret ti install on the load balancer listeners which
61+ // specifying the TLS secret to install on the load balancer listeners which
6262 // have SSL enabled.
6363 // See: https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
6464 ServiceAnnotationLoadBalancerTLSSecret = "service.beta.kubernetes.io/oci-load-balancer-tls-secret"
6565
6666 // ServiceAnnotationLoadBalancerConnectionIdleTimeout is the annotation used
6767 // on the service to specify the idle connection timeout.
6868 ServiceAnnotationLoadBalancerConnectionIdleTimeout = "service.beta.kubernetes.io/oci-load-balancer-connection-idle-timeout"
69+
70+ // ServiceAnnotaionLoadBalancerSecurityListManagementMode is a Service annotation for
71+ // specifying the security list managment mode ("All", "Frontend", "None") that configures how security lists are managed by the CCM
72+ ServiceAnnotaionLoadBalancerSecurityListManagementMode = "service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode"
6973)
7074
7175// DefaultLoadBalancerPolicy defines the default traffic policy for load
@@ -242,7 +246,7 @@ func (cp *CloudProvider) createLoadBalancer(ctx context.Context, spec *LBSpec) (
242246 }
243247
244248 for _ , ports := range spec .Ports {
245- if err = cp .securityListManager .Update (ctx , lbSubnets , nodeSubnets , spec .SourceCIDRs , nil , ports ); err != nil {
249+ if err = spec .securityListManager .Update (ctx , lbSubnets , nodeSubnets , spec .SourceCIDRs , nil , ports ); err != nil {
246250 return nil , err
247251 }
248252 }
@@ -305,7 +309,7 @@ func (cp *CloudProvider) EnsureLoadBalancer(ctx context.Context, clusterName str
305309 ssl = NewSSLConfig (lbName , ports , cp )
306310 }
307311 subnets := []string {cp .config .LoadBalancer .Subnet1 , cp .config .LoadBalancer .Subnet2 }
308- spec , err := NewLBSpec (service , nodes , subnets , ssl )
312+ spec , err := NewLBSpec (service , nodes , subnets , ssl , cp . securityListManagerFactory )
309313 if err != nil {
310314 glog .Errorf ("Failed to derive LBSpec: %+v" , err )
311315 return nil , err
@@ -364,7 +368,7 @@ func (cp *CloudProvider) updateLoadBalancer(ctx context.Context, lb *loadbalance
364368 for _ , action := range actions {
365369 switch a := action .(type ) {
366370 case * BackendSetAction :
367- err := cp .updateBackendSet (ctx , lbID , a , lbSubnets , nodeSubnets )
371+ err := cp .updateBackendSet (ctx , lbID , a , lbSubnets , nodeSubnets , spec . securityListManager )
368372 if err != nil {
369373 return errors .Wrap (err , "updating BackendSet" )
370374 }
@@ -381,7 +385,7 @@ func (cp *CloudProvider) updateLoadBalancer(ctx context.Context, lb *loadbalance
381385 ports = spec .Ports [backendSetName ]
382386 }
383387
384- err := cp .updateListener (ctx , lbID , a , ports , lbSubnets , nodeSubnets , spec .SourceCIDRs )
388+ err := cp .updateListener (ctx , lbID , a , ports , lbSubnets , nodeSubnets , spec .SourceCIDRs , spec . securityListManager )
385389 if err != nil {
386390 return errors .Wrap (err , "updating listener" )
387391 }
@@ -390,7 +394,7 @@ func (cp *CloudProvider) updateLoadBalancer(ctx context.Context, lb *loadbalance
390394 return nil
391395}
392396
393- func (cp * CloudProvider ) updateBackendSet (ctx context.Context , lbID string , action * BackendSetAction , lbSubnets , nodeSubnets []* core.Subnet ) error {
397+ func (cp * CloudProvider ) updateBackendSet (ctx context.Context , lbID string , action * BackendSetAction , lbSubnets , nodeSubnets []* core.Subnet , secListManager securityListManager ) error {
394398 var (
395399 sourceCIDRs = []string {}
396400 workRequestID string
@@ -403,19 +407,19 @@ func (cp *CloudProvider) updateBackendSet(ctx context.Context, lbID string, acti
403407
404408 switch action .Type () {
405409 case Create :
406- err = cp . securityListManager .Update (ctx , lbSubnets , nodeSubnets , sourceCIDRs , nil , ports )
410+ err = secListManager .Update (ctx , lbSubnets , nodeSubnets , sourceCIDRs , nil , ports )
407411 if err != nil {
408412 return err
409413 }
410414
411415 workRequestID , err = cp .client .LoadBalancer ().CreateBackendSet (ctx , lbID , action .Name (), bs )
412416 case Update :
413- if err = cp . securityListManager .Update (ctx , lbSubnets , nodeSubnets , sourceCIDRs , action .OldPorts , ports ); err != nil {
417+ if err = secListManager .Update (ctx , lbSubnets , nodeSubnets , sourceCIDRs , action .OldPorts , ports ); err != nil {
414418 return err
415419 }
416420 workRequestID , err = cp .client .LoadBalancer ().UpdateBackendSet (ctx , lbID , action .Name (), bs )
417421 case Delete :
418- err = cp . securityListManager .Delete (ctx , lbSubnets , nodeSubnets , ports )
422+ err = secListManager .Delete (ctx , lbSubnets , nodeSubnets , ports )
419423 if err != nil {
420424 return err
421425 }
@@ -435,7 +439,7 @@ func (cp *CloudProvider) updateBackendSet(ctx context.Context, lbID string, acti
435439 return nil
436440}
437441
438- func (cp * CloudProvider ) updateListener (ctx context.Context , lbID string , action * ListenerAction , ports portSpec , lbSubnets , nodeSubnets []* core.Subnet , sourceCIDRs []string ) error {
442+ func (cp * CloudProvider ) updateListener (ctx context.Context , lbID string , action * ListenerAction , ports portSpec , lbSubnets , nodeSubnets []* core.Subnet , sourceCIDRs []string , secListManager securityListManager ) error {
439443 var workRequestID string
440444 var err error
441445 listener := action .Listener
@@ -445,21 +449,21 @@ func (cp *CloudProvider) updateListener(ctx context.Context, lbID string, action
445449
446450 switch action .Type () {
447451 case Create :
448- err = cp . securityListManager .Update (ctx , lbSubnets , nodeSubnets , sourceCIDRs , nil , ports )
452+ err = secListManager .Update (ctx , lbSubnets , nodeSubnets , sourceCIDRs , nil , ports )
449453 if err != nil {
450454 return err
451455 }
452456
453457 workRequestID , err = cp .client .LoadBalancer ().CreateListener (ctx , lbID , action .Name (), listener )
454458 case Update :
455- err = cp . securityListManager .Update (ctx , lbSubnets , nodeSubnets , sourceCIDRs , nil , ports )
459+ err = secListManager .Update (ctx , lbSubnets , nodeSubnets , sourceCIDRs , nil , ports )
456460 if err != nil {
457461 return err
458462 }
459463
460464 workRequestID , err = cp .client .LoadBalancer ().UpdateListener (ctx , lbID , action .Name (), listener )
461465 case Delete :
462- err = cp . securityListManager .Delete (ctx , lbSubnets , nodeSubnets , ports )
466+ err = secListManager .Delete (ctx , lbSubnets , nodeSubnets , ports )
463467 if err != nil {
464468 return err
465469 }
@@ -547,6 +551,9 @@ func (cp *CloudProvider) EnsureLoadBalancerDeleted(ctx context.Context, clusterN
547551 return errors .Wrap (err , "getting subnets for load balancers" )
548552 }
549553
554+ securityListManager := cp .securityListManagerFactory (
555+ service .Annotations [ServiceAnnotaionLoadBalancerSecurityListManagementMode ])
556+
550557 for listenerName , listener := range lb .Listeners {
551558 backendSetName := * listener .DefaultBackendSetName
552559 bs , ok := lb .BackendSets [backendSetName ]
@@ -559,7 +566,7 @@ func (cp *CloudProvider) EnsureLoadBalancerDeleted(ctx context.Context, clusterN
559566
560567 glog .V (4 ).Infof ("Deleting security rules for listener %q for load balancer %q ports=%+v" , listenerName , id , ports )
561568
562- if err := cp . securityListManager .Delete (ctx , lbSubnets , nodeSubnets , ports ); err != nil {
569+ if err := securityListManager .Delete (ctx , lbSubnets , nodeSubnets , ports ); err != nil {
563570 return errors .Wrapf (err , "delete security rules for listener %q on load balancer %q" , listenerName , name )
564571 }
565572 }
0 commit comments