code: func (g *Cloud) updateInternalLoadBalancer(clusterName, clusterID string, svc *v1.Service, nodes []*v1.Node) error {
  	g.sharedResourceLock.Lock()
  	defer g.sharedResourceLock.Unlock()
  
  	igName := makeInstanceGroupName(clusterID)
  	igLinks, err := g.ensureInternalInstanceGroups(igName, nodes)
  	if err != nil {
  		return err
  	}
  
  	// Generate the backend service name
  	_, protocol := getPortsAndProtocol(svc.Spec.Ports)
  	scheme := cloud.SchemeInternal
  	loadBalancerName := g.GetLoadBalancerName(context.TODO(), clusterName, svc)
  	backendServiceName := makeBackendServiceName(loadBalancerName, clusterID, shareBackendService(svc), scheme, protocol, svc.Spec.SessionAffinity)
  	// Ensure the backend service has the proper backend/instance-group links
  	return g.ensureInternalBackendServiceGroups(backendServiceName, igLinks)
  }
docs: // updateInternalLoadBalancer is called when the list of nodes has changed. Therefore, only the instance groups
  // and possibly the backend service need to be updated.