diff --git a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_alpha.go b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_alpha.go index bbc419f23be..5c58d0a4cbb 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_alpha.go +++ b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_alpha.go @@ -23,6 +23,10 @@ const ( // AlphaFeatureILBSubsets allows InternalLoadBalancer services to include a subset // of cluster nodes as backends instead of all nodes. AlphaFeatureILBSubsets = "ILBSubsets" + + // AlphaFeatureNetLBRbs enabled L4 Regional Backend Services and + // disables instance group management in service controller + AlphaFeatureNetLBRbs = "NetLB_RBS" ) // AlphaFeatureGate contains a mapping of alpha features to whether they are enabled diff --git a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_instancegroup.go b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_instancegroup.go index d1e929a8679..f7a12e2cdc5 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_instancegroup.go +++ b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_instancegroup.go @@ -50,6 +50,16 @@ func (g *Cloud) DeleteInstanceGroup(name string, zone string) error { return mc.Observe(g.c.InstanceGroups().Delete(ctx, meta.ZonalKey(name, zone))) } +// FilterInstanceGroupsByName lists all InstanceGroups in the project and +// zone that match the name regexp. +func (g *Cloud) FilterInstanceGroupsByName(name, zone string) ([]*compute.InstanceGroup, error) { + ctx, cancel := cloud.ContextWithCallTimeout() + defer cancel() + mc := newInstanceGroupMetricContext("list", zone) + v, err := g.c.InstanceGroups().List(ctx, zone, filter.Regexp("name", name)) + return v, mc.Observe(err) +} + // ListInstanceGroups lists all InstanceGroups in the project and // zone. func (g *Cloud) ListInstanceGroups(zone string) ([]*compute.InstanceGroup, error) { diff --git a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal.go b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal.go index 473b27f0ced..5690a8504cc 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal.go +++ b/staging/src/k8s.io/legacy-cloud-providers/gce/gce_loadbalancer_internal.go @@ -625,11 +625,21 @@ func (g *Cloud) ensureInternalInstanceGroups(name string, nodes []*v1.Node) ([]s klog.V(2).Infof("ensureInternalInstanceGroups(%v): %d nodes over %d zones in region %v", name, len(nodes), len(zonedNodes), g.region) var igLinks []string for zone, nodes := range zonedNodes { - igLink, err := g.ensureInternalInstanceGroup(name, zone, nodes) - if err != nil { - return []string{}, err + if g.AlphaFeatureGate.Enabled(AlphaFeatureNetLBRbs) { + igs, err := g.FilterInstanceGroupsByName(name, zone) + if err != nil { + return []string{}, err + } + for _, ig := range igs { + igLinks = append(igLinks, ig.SelfLink) + } + } else { + igLink, err := g.ensureInternalInstanceGroup(name, zone, nodes) + if err != nil { + return []string{}, err + } + igLinks = append(igLinks, igLink) } - igLinks = append(igLinks, igLink) } return igLinks, nil