@@ -54,10 +54,10 @@ const (
5454 labelGKESubnetworkName = "cloud.google.com/gke-node-pool-subnet"
5555)
5656
57- func (g * Cloud ) ensureInternalLoadBalancer (clusterName , clusterID string , svc * v1.Service , existingFwdRule * compute. ForwardingRule , nodes []* v1.Node ) (* v1.LoadBalancerStatus , error ) {
57+ func (g * Cloud ) ensureInternalLoadBalancer (clusterName , clusterID string , svc * v1.Service , op * loadBalancerSync , nodes []* v1.Node ) (* v1.LoadBalancerStatus , error ) {
5858 // Process services with LoadBalancerClass "networking.gke.io/l4-regional-internal-legacy" used for this controller.
5959 // LoadBalancerClass can't be updated so we know this controller should process the ILB.
60- if existingFwdRule == nil && ! hasFinalizer (svc , ILBFinalizerV1 ) && ! hasLoadBalancerClass (svc , LegacyRegionalInternalLoadBalancerClass ) {
60+ if op . actualForwardingRule == nil && ! hasFinalizer (svc , ILBFinalizerV1 ) && ! hasLoadBalancerClass (svc , LegacyRegionalInternalLoadBalancerClass ) {
6161 // Neither the forwarding rule nor the V1 finalizer exists. This is most likely a new service.
6262 if svc .Spec .LoadBalancerClass != nil && ! hasLoadBalancerClass (svc , LegacyRegionalInternalLoadBalancerClass ) {
6363 klog .V (2 ).Infof ("Skipped ensureInternalLoadBalancer for service %s/%s, as service contains %q loadBalancerClass." , svc .Namespace , svc .Name , * svc .Spec .LoadBalancerClass )
@@ -118,8 +118,8 @@ func (g *Cloud) ensureInternalLoadBalancer(clusterName, clusterID string, svc *v
118118
119119 // Get existing backend service (if exists)
120120 var existingBackendService * compute.BackendService
121- if existingFwdRule != nil && existingFwdRule .BackendService != "" {
122- existingBSName := getNameFromLink (existingFwdRule .BackendService )
121+ if op . actualForwardingRule != nil && op . actualForwardingRule .BackendService != "" {
122+ existingBSName := getNameFromLink (op . actualForwardingRule .BackendService )
123123 if existingBackendService , err = g .GetRegionBackendService (existingBSName , g .region ); err != nil && ! isNotFound (err ) {
124124 return nil , err
125125 }
@@ -153,7 +153,7 @@ func (g *Cloud) ensureInternalLoadBalancer(clusterName, clusterID string, svc *v
153153 }
154154 // Determine IP which will be used for this LB. If no forwarding rule has been established
155155 // or specified in the Service spec, then requestedIP = "".
156- ipToUse := ilbIPToUse (svc , existingFwdRule , subnetworkURL )
156+ ipToUse := ilbIPToUse (svc , op . actualForwardingRule , subnetworkURL )
157157
158158 klog .V (2 ).Infof ("ensureInternalLoadBalancer(%v): Using subnet %s for LoadBalancer IP %s" , loadBalancerName , options .SubnetName , ipToUse )
159159
@@ -199,20 +199,20 @@ func (g *Cloud) ensureInternalLoadBalancer(clusterName, clusterID string, svc *v
199199 newFwdRule .Ports = nil
200200 newFwdRule .AllPorts = true
201201 }
202+ op .desiredForwardingRule = newFwdRule
202203
203- fwdRuleDeleted := false
204- if existingFwdRule != nil && ! forwardingRulesEqual (existingFwdRule , newFwdRule ) {
204+ if op .actualForwardingRule != nil && ! forwardingRulesEqual (op .actualForwardingRule , op .desiredForwardingRule ) {
205205 // Delete existing forwarding rule before making changes to the backend service. For example - changing protocol
206206 // of backend service without first deleting forwarding rule will throw an error since the linked forwarding
207207 // rule would show the old protocol.
208208 if klogV := klog .V (2 ); klogV .Enabled () {
209- frDiff := cmp .Diff (existingFwdRule , newFwdRule )
210- klogV .Infof ("ensureInternalLoadBalancer(%v): forwarding rule changed - Existing - %+v\n , New - %+v\n , Diff(-existing, +new) - %s\n . Deleting existing forwarding rule." , loadBalancerName , existingFwdRule , newFwdRule , frDiff )
209+ frDiff := cmp .Diff (op . actualForwardingRule , op . desiredForwardingRule )
210+ klogV .Infof ("ensureInternalLoadBalancer(%v): forwarding rule changed - Existing - %+v\n , New - %+v\n , Diff(-existing, +new) - %s\n . Deleting existing forwarding rule." , loadBalancerName , op . actualForwardingRule , op . desiredForwardingRule , frDiff )
211211 }
212212 if err = ignoreNotFound (g .DeleteRegionForwardingRule (loadBalancerName , g .region )); err != nil {
213213 return nil , err
214214 }
215- fwdRuleDeleted = true
215+ op . actualForwardingRule = nil
216216 }
217217
218218 bsDescription := makeBackendServiceDescription (nm , sharedBackend )
@@ -221,9 +221,9 @@ func (g *Cloud) ensureInternalLoadBalancer(clusterName, clusterID string, svc *v
221221 return nil , err
222222 }
223223
224- if fwdRuleDeleted || existingFwdRule == nil {
225- // existing rule has been deleted, pass in nil
226- if err := g .ensureInternalForwardingRule (nil , newFwdRule ); err != nil {
224+ if op . actualForwardingRule == nil {
225+ // existing rule has been deleted
226+ if err := g .ensureInternalForwardingRule (op ); err != nil {
227227 return nil , err
228228 }
229229 }
@@ -1084,24 +1084,24 @@ func getFwdRuleAPIVersion(rule *compute.ForwardingRule) (meta.Version, error) {
10841084 return d .APIVersion , nil
10851085}
10861086
1087- func (g * Cloud ) ensureInternalForwardingRule (existingFwdRule , newFwdRule * compute. ForwardingRule ) (err error ) {
1088- if existingFwdRule != nil {
1089- if forwardingRulesEqual (existingFwdRule , newFwdRule ) {
1090- klog .V (4 ).Infof ("existingFwdRule == newFwdRule , no updates needed (existingFwdRule == %+v)" , existingFwdRule )
1087+ func (g * Cloud ) ensureInternalForwardingRule (op * loadBalancerSync ) (err error ) {
1088+ if op . actualForwardingRule != nil {
1089+ if forwardingRulesEqual (op . actualForwardingRule , op . desiredForwardingRule ) {
1090+ klog .V (4 ).Infof ("actualForwardingRule == desiredForwardingRule , no updates needed (actualForwardingRule == %+v)" , op . actualForwardingRule )
10911091 return nil
10921092 }
1093- klog .V (2 ).Infof ("ensureInternalLoadBalancer(%v): deleting existing forwarding rule with IP address %v" , existingFwdRule . Name , existingFwdRule .IPAddress )
1094- if err = ignoreNotFound (g .DeleteRegionForwardingRule (existingFwdRule .Name , g .region )); err != nil {
1093+ klog .V (2 ).Infof ("ensureInternalLoadBalancer(%v): deleting existing forwarding rule with IP address %v" , op . actualForwardingRule . Name , op . actualForwardingRule .IPAddress )
1094+ if err = ignoreNotFound (g .DeleteRegionForwardingRule (op . actualForwardingRule .Name , g .region )); err != nil {
10951095 return err
10961096 }
10971097 }
10981098 // At this point, the existing rule has been deleted if required.
10991099 // Create the rule based on the api version determined
1100- klog .V (2 ).Infof ("ensureInternalLoadBalancer(%v): creating forwarding rule" , newFwdRule .Name )
1101- if err = g .CreateRegionForwardingRule (newFwdRule , g .region ); err != nil {
1100+ klog .V (2 ).Infof ("ensureInternalLoadBalancer(%v): creating forwarding rule" , op . desiredForwardingRule .Name )
1101+ if err = g .CreateRegionForwardingRule (op . desiredForwardingRule , g .region ); err != nil {
11021102 return err
11031103 }
1104- klog .V (2 ).Infof ("ensureInternalLoadBalancer(%v): created forwarding rule" , newFwdRule .Name )
1104+ klog .V (2 ).Infof ("ensureInternalLoadBalancer(%v): created forwarding rule" , op . desiredForwardingRule .Name )
11051105 return nil
11061106}
11071107
0 commit comments