@@ -63,6 +63,7 @@ type LbServiceRules struct {
6363 BridgeName string
6464 DstMac string
6565 UnderlayNic string
66+ SubnetName string
6667}
6768
6869func evalCommandSymlinks (cmd string ) (string , error ) {
@@ -412,7 +413,7 @@ func (c *Controller) reconcileRouters(event *subnetEvent) error {
412413 return nil
413414}
414415
415- func genLBServiceRules (service * v1.Service , bridgeName , underlayNic , dstMac string ) []LbServiceRules {
416+ func genLBServiceRules (service * v1.Service , bridgeName , underlayNic , dstMac , subnetName string ) []LbServiceRules {
416417 var lbServiceRules []LbServiceRules
417418 for _ , ingress := range service .Status .LoadBalancer .Ingress {
418419 for _ , port := range service .Spec .Ports {
@@ -423,6 +424,7 @@ func genLBServiceRules(service *v1.Service, bridgeName, underlayNic, dstMac stri
423424 DstMac : dstMac ,
424425 UnderlayNic : underlayNic ,
425426 BridgeName : bridgeName ,
427+ SubnetName : subnetName ,
426428 })
427429 }
428430 }
@@ -433,22 +435,24 @@ func (c *Controller) diffExternalLBServiceRules(oldService, newService *v1.Servi
433435 var oldlbServiceRules , newlbServiceRules []LbServiceRules
434436
435437 if oldService != nil && oldService .Annotations [util .ServiceExternalIPFromSubnetAnnotation ] != "" {
436- oldBridgeName , underlayNic , dstMac , err := c .getExtInfoBySubnet (oldService .Annotations [util .ServiceExternalIPFromSubnetAnnotation ])
438+ oldSubnetName := oldService .Annotations [util .ServiceExternalIPFromSubnetAnnotation ]
439+ oldBridgeName , underlayNic , dstMac , err := c .getExtInfoBySubnet (oldSubnetName )
437440 if err != nil {
438- klog .Errorf ("failed to get provider network by subnet %s: %v" , oldService . Annotations [ util . ServiceExternalIPFromSubnetAnnotation ] , err )
441+ klog .Errorf ("failed to get provider network by subnet %s: %v" , oldSubnetName , err )
439442 return nil , nil , err
440443 }
441444
442- oldlbServiceRules = genLBServiceRules (oldService , oldBridgeName , underlayNic , dstMac )
445+ oldlbServiceRules = genLBServiceRules (oldService , oldBridgeName , underlayNic , dstMac , oldSubnetName )
443446 }
444447
445448 if isSubnetExternalLBEnabled && newService != nil && newService .Annotations [util .ServiceExternalIPFromSubnetAnnotation ] != "" {
446- newBridgeName , underlayNic , dstMac , err := c .getExtInfoBySubnet (newService .Annotations [util .ServiceExternalIPFromSubnetAnnotation ])
449+ newSubnetName := newService .Annotations [util .ServiceExternalIPFromSubnetAnnotation ]
450+ newBridgeName , underlayNic , dstMac , err := c .getExtInfoBySubnet (newSubnetName )
447451 if err != nil {
448- klog .Errorf ("failed to get provider network by subnet %s: %v" , newService . Annotations [ util . ServiceExternalIPFromSubnetAnnotation ] , err )
452+ klog .Errorf ("failed to get provider network by subnet %s: %v" , newSubnetName , err )
449453 return nil , nil , err
450454 }
451- newlbServiceRules = genLBServiceRules (newService , newBridgeName , underlayNic , dstMac )
455+ newlbServiceRules = genLBServiceRules (newService , newBridgeName , underlayNic , dstMac , newSubnetName )
452456 }
453457
454458 for _ , oldRule := range oldlbServiceRules {
@@ -557,7 +561,7 @@ func (c *Controller) reconcileServices(event *serviceEvent) error {
557561 if len (lbServiceRulesToAdd ) > 0 {
558562 for _ , rule := range lbServiceRulesToAdd {
559563 klog .Infof ("Adding LB service rule: %+v" , rule )
560- if err := c .AddOrUpdateUnderlaySubnetSvcLocalFlowCache (rule .IP , rule .Port , rule .Protocol , rule .DstMac , rule .UnderlayNic , rule .BridgeName ); err != nil {
564+ if err := c .AddOrUpdateUnderlaySubnetSvcLocalFlowCache (rule .IP , rule .Port , rule .Protocol , rule .DstMac , rule .UnderlayNic , rule .BridgeName , rule . SubnetName ); err != nil {
561565 klog .Errorf ("failed to update underlay subnet svc local openflow cache: %v" , err )
562566 return err
563567 }
0 commit comments