Skip to content

Commit

Permalink
NEG Controller support for L4 NetLB.
Browse files Browse the repository at this point in the history
When enabled, the NEG controller will create NEGs for L4 RBS NetLBs that opt-in to NEG support.
  • Loading branch information
mmamczur committed Aug 13, 2024
1 parent ef744ee commit 7acfed4
Show file tree
Hide file tree
Showing 10 changed files with 70 additions and 41 deletions.
10 changes: 8 additions & 2 deletions pkg/neg/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -602,7 +602,7 @@ func (c *Controller) mergeStandaloneNEGsPortInfo(service *apiv1.Service, name ty
func (c *Controller) mergeVmIpNEGsPortInfo(service *apiv1.Service, name types.NamespacedName, portInfoMap negtypes.PortInfoMap, negUsage *metricscollector.NegServiceState, networkInfo *network.NetworkInfo) error {
wantsILB, _ := annotations.WantsL4ILB(service)
wantsNetLB, _ := annotations.WantsL4NetLB(service)
needsNEGForNetLB := wantsNetLB && !networkInfo.IsDefault && annotations.HasRBSAnnotation(service)
needsNEGForNetLB := wantsNetLB && (!networkInfo.IsDefault || utils.HasL4NetLBFinalizerV3(service)) && annotations.HasRBSAnnotation(service)
if !wantsILB && !needsNEGForNetLB {
return nil
}
Expand All @@ -623,8 +623,14 @@ func (c *Controller) mergeVmIpNEGsPortInfo(service *apiv1.Service, name types.Na
onlyLocal := helpers.RequestsOnlyLocalTraffic(service)
// Update usage metrics.
negUsage.VmIpNeg = metricscollector.NewVmIpNegType(onlyLocal)
var l4LBType negtypes.L4LBType
if wantsILB {
l4LBType = negtypes.L4InternalLB
} else {
l4LBType = negtypes.L4ExternalLB
}

return portInfoMap.Merge(negtypes.NewPortInfoMapForVMIPNEG(name.Namespace, name.Name, c.l4Namer, onlyLocal, networkInfo))
return portInfoMap.Merge(negtypes.NewPortInfoMapForVMIPNEG(name.Namespace, name.Name, c.l4Namer, onlyLocal, networkInfo, l4LBType))
}

// mergeDefaultBackendServicePortInfoMap merge the PortInfoMap for the default backend service into portInfoMap
Expand Down
10 changes: 5 additions & 5 deletions pkg/neg/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,7 @@ func TestEnableNEGServiceWithL4ILB(t *testing.T) {
if err != nil {
t.Fatalf("Service was not created.(*apiv1.Service) successfully, err: %v", err)
}
expectedPortInfoMap := negtypes.NewPortInfoMapForVMIPNEG(testServiceNamespace, testServiceName, controller.l4Namer, false, defaultNetwork)
expectedPortInfoMap := negtypes.NewPortInfoMapForVMIPNEG(testServiceNamespace, testServiceName, controller.l4Namer, false, defaultNetwork, negtypes.L4InternalLB)
// There will be only one entry in the map
for key, val := range expectedPortInfoMap {
prevSyncerKey = manager.getSyncerKey(testServiceNamespace, testServiceName, key, val)
Expand All @@ -410,7 +410,7 @@ func TestEnableNEGServiceWithL4ILB(t *testing.T) {
if err = controller.processService(svcKey); err != nil {
t.Fatalf("Failed to process updated L4 ILB service: %v", err)
}
expectedPortInfoMap = negtypes.NewPortInfoMapForVMIPNEG(testServiceNamespace, testServiceName, controller.l4Namer, true, defaultNetwork)
expectedPortInfoMap = negtypes.NewPortInfoMapForVMIPNEG(testServiceNamespace, testServiceName, controller.l4Namer, true, defaultNetwork, negtypes.L4InternalLB)
// There will be only one entry in the map
for key, val := range expectedPortInfoMap {
updatedSyncerKey = manager.getSyncerKey(testServiceNamespace, testServiceName, key, val)
Expand Down Expand Up @@ -1265,7 +1265,7 @@ func TestMergeVmIpNEGsPortInfo(t *testing.T) {
desc: "ILB subsetting service",
svc: serviceILBWithFinalizer,
networkInfo: defaultNetwork,
wantSvcPortMap: negtypes.NewPortInfoMapForVMIPNEG(testServiceNamespace, testServiceName, controller.l4Namer, false, defaultNetwork),
wantSvcPortMap: negtypes.NewPortInfoMapForVMIPNEG(testServiceNamespace, testServiceName, controller.l4Namer, false, defaultNetwork, negtypes.L4InternalLB),
},
{
desc: "ILB legacy service",
Expand All @@ -1277,7 +1277,7 @@ func TestMergeVmIpNEGsPortInfo(t *testing.T) {
desc: "RBS Multinet Service",
svc: newTestRBSMultinetService(controller, true, 80),
networkInfo: secondaryNetwork,
wantSvcPortMap: negtypes.NewPortInfoMapForVMIPNEG(testServiceNamespace, testServiceName, controller.l4Namer, true, secondaryNetwork),
wantSvcPortMap: negtypes.NewPortInfoMapForVMIPNEG(testServiceNamespace, testServiceName, controller.l4Namer, true, secondaryNetwork, negtypes.L4ExternalLB),
},
{
desc: "RBS non-multinet Service",
Expand Down Expand Up @@ -1610,7 +1610,7 @@ func TestEnableNEGServiceWithL4NetLB(t *testing.T) {
if err != nil {
t.Fatalf("Service was not created.(*apiv1.Service) successfully, err: %v", err)
}
expectedPortInfoMap := negtypes.NewPortInfoMapForVMIPNEG(testServiceNamespace, testServiceName, controller.l4Namer, true, networkInfo)
expectedPortInfoMap := negtypes.NewPortInfoMapForVMIPNEG(testServiceNamespace, testServiceName, controller.l4Namer, true, networkInfo, negtypes.L4ExternalLB)
// There will be only one entry in the map
for key, val := range expectedPortInfoMap {
prevSyncerKey = manager.getSyncerKey(testServiceNamespace, testServiceName, key, val)
Expand Down
1 change: 1 addition & 0 deletions pkg/neg/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ func (manager *syncerManager) EnsureSyncers(namespace, name string, newPorts neg
manager.enableDualStackNEG,
manager.syncerMetrics,
&portInfo.NetworkInfo,
portInfo.L4LBType,
)
syncer = negsyncer.NewTransactionSyncer(
syncerKey,
Expand Down
48 changes: 28 additions & 20 deletions pkg/neg/syncers/endpoints_calculator.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,15 +34,15 @@ import (
"k8s.io/klog/v2"
)

// LocalL4ILBEndpointGetter implements the NetworkEndpointsCalculator interface.
// LocalL4EndpointsCalculator implements the NetworkEndpointsCalculator interface.
// It exposes methods to calculate Network endpoints for GCE_VM_IP NEGs when the service
// uses "ExternalTrafficPolicy: Local" mode.
// In this mode, the endpoints of the NEG are calculated by listing the nodes that host the service endpoints(pods)
// for the given service. These candidate nodes picked as is, if the count is less than the subset size limit(250).
// Otherwise, a subset of nodes is selected.
// In a cluster with nodes node1... node 50. If nodes node10 to node 45 run the pods for a given ILB service, all these
// nodes - node10, node 11 ... node45 will be part of the subset.
type LocalL4ILBEndpointsCalculator struct {
type LocalL4EndpointsCalculator struct {
nodeLister listers.NodeLister
zoneGetter *zonegetter.ZoneGetter
subsetSizeLimit int
Expand All @@ -51,24 +51,28 @@ type LocalL4ILBEndpointsCalculator struct {
networkInfo *network.NetworkInfo
}

func NewLocalL4ILBEndpointsCalculator(nodeLister listers.NodeLister, zoneGetter *zonegetter.ZoneGetter, svcId string, logger klog.Logger, networkInfo *network.NetworkInfo) *LocalL4ILBEndpointsCalculator {
return &LocalL4ILBEndpointsCalculator{
func NewLocalL4EndpointsCalculator(nodeLister listers.NodeLister, zoneGetter *zonegetter.ZoneGetter, svcId string, logger klog.Logger, networkInfo *network.NetworkInfo, lbType types.L4LBType) *LocalL4EndpointsCalculator {
subsetSize := maxSubsetSizeLocal
if lbType == negtypes.L4ExternalLB {
subsetSize = maxSubsetSizeNetLBLocal
}
return &LocalL4EndpointsCalculator{
nodeLister: nodeLister,
zoneGetter: zoneGetter,
subsetSizeLimit: maxSubsetSizeLocal,
subsetSizeLimit: subsetSize,
svcId: svcId,
logger: logger.WithName("LocalL4ILBEndpointsCalculator"),
logger: logger.WithName("LocalL4EndpointsCalculator"),
networkInfo: networkInfo,
}
}

// Mode indicates the mode that the EndpointsCalculator is operating in.
func (l *LocalL4ILBEndpointsCalculator) Mode() types.EndpointsCalculatorMode {
func (l *LocalL4EndpointsCalculator) Mode() types.EndpointsCalculatorMode {
return types.L4LocalMode
}

// CalculateEndpoints determines the endpoints in the NEGs based on the current service endpoints and the current NEGs.
func (l *LocalL4ILBEndpointsCalculator) CalculateEndpoints(eds []types.EndpointsData, currentMap map[string]types.NetworkEndpointSet) (map[string]types.NetworkEndpointSet, types.EndpointPodMap, int, error) {
func (l *LocalL4EndpointsCalculator) CalculateEndpoints(eds []types.EndpointsData, currentMap map[string]types.NetworkEndpointSet) (map[string]types.NetworkEndpointSet, types.EndpointPodMap, int, error) {
// List all nodes where the service endpoints are running. Get a subset of the desired count.
zoneNodeMap := make(map[string][]*v1.Node)
processedNodes := sets.String{}
Expand Down Expand Up @@ -121,23 +125,23 @@ func (l *LocalL4ILBEndpointsCalculator) CalculateEndpoints(eds []types.Endpoints
return subsetMap, nil, 0, err
}

func (l *LocalL4ILBEndpointsCalculator) CalculateEndpointsDegradedMode(eds []types.EndpointsData, currentMap map[string]types.NetworkEndpointSet) (map[string]types.NetworkEndpointSet, types.EndpointPodMap, error) {
func (l *LocalL4EndpointsCalculator) CalculateEndpointsDegradedMode(eds []types.EndpointsData, currentMap map[string]types.NetworkEndpointSet) (map[string]types.NetworkEndpointSet, types.EndpointPodMap, error) {
// this should be the same as CalculateEndpoints for L4 ec
subsetMap, podMap, _, err := l.CalculateEndpoints(eds, currentMap)
return subsetMap, podMap, err
}

func (l *LocalL4ILBEndpointsCalculator) ValidateEndpoints(endpointData []types.EndpointsData, endpointPodMap types.EndpointPodMap, endpointsExcludedInCalculation int) error {
func (l *LocalL4EndpointsCalculator) ValidateEndpoints(endpointData []types.EndpointsData, endpointPodMap types.EndpointPodMap, endpointsExcludedInCalculation int) error {
// this should be a no-op for now
return nil
}

// ClusterL4ILBEndpointGetter implements the NetworkEndpointsCalculator interface.
// ClusterL4EndpointsCalculator implements the NetworkEndpointsCalculator interface.
// It exposes methods to calculate Network endpoints for GCE_VM_IP NEGs when the service
// uses "ExternalTrafficPolicy: Cluster" mode This is the default mode.
// In this mode, the endpoints of the NEG are calculated by selecting nodes at random. Up to 25(subset size limit in this
// mode) are selected.
type ClusterL4ILBEndpointsCalculator struct {
type ClusterL4EndpointsCalculator struct {
// nodeLister is used for listing all the nodes in the cluster when calculating the subset.
nodeLister listers.NodeLister
// zoneGetter looks up the zone for a given node when calculating subsets.
Expand All @@ -151,24 +155,28 @@ type ClusterL4ILBEndpointsCalculator struct {
logger klog.Logger
}

func NewClusterL4ILBEndpointsCalculator(nodeLister listers.NodeLister, zoneGetter *zonegetter.ZoneGetter, svcId string, logger klog.Logger, networkInfo *network.NetworkInfo) *ClusterL4ILBEndpointsCalculator {
return &ClusterL4ILBEndpointsCalculator{
func NewClusterL4EndpointsCalculator(nodeLister listers.NodeLister, zoneGetter *zonegetter.ZoneGetter, svcId string, logger klog.Logger, networkInfo *network.NetworkInfo, l4LBtype negtypes.L4LBType) *ClusterL4EndpointsCalculator {
subsetSize := maxSubsetSizeDefault
if l4LBtype == negtypes.L4ExternalLB {
subsetSize = maxSubsetSizeNetLBCluster
}
return &ClusterL4EndpointsCalculator{
nodeLister: nodeLister,
zoneGetter: zoneGetter,
subsetSizeLimit: maxSubsetSizeDefault,
subsetSizeLimit: subsetSize,
svcId: svcId,
logger: logger.WithName("ClusterL4ILBEndpointsCalculator"),
logger: logger.WithName("ClusterL4EndpointsCalculator"),
networkInfo: networkInfo,
}
}

// Mode indicates the mode that the EndpointsCalculator is operating in.
func (l *ClusterL4ILBEndpointsCalculator) Mode() types.EndpointsCalculatorMode {
func (l *ClusterL4EndpointsCalculator) Mode() types.EndpointsCalculatorMode {
return types.L4ClusterMode
}

// CalculateEndpoints determines the endpoints in the NEGs based on the current service endpoints and the current NEGs.
func (l *ClusterL4ILBEndpointsCalculator) CalculateEndpoints(_ []types.EndpointsData, currentMap map[string]types.NetworkEndpointSet) (map[string]types.NetworkEndpointSet, types.EndpointPodMap, int, error) {
func (l *ClusterL4EndpointsCalculator) CalculateEndpoints(_ []types.EndpointsData, currentMap map[string]types.NetworkEndpointSet) (map[string]types.NetworkEndpointSet, types.EndpointPodMap, int, error) {
// In this mode, any of the cluster nodes can be part of the subset, whether or not a matching pod runs on it.
nodes, _ := l.zoneGetter.ListNodes(zonegetter.CandidateAndUnreadyNodesFilter, l.logger)
zoneNodeMap := make(map[string][]*v1.Node)
Expand All @@ -191,13 +199,13 @@ func (l *ClusterL4ILBEndpointsCalculator) CalculateEndpoints(_ []types.Endpoints
return subsetMap, nil, 0, err
}

func (l *ClusterL4ILBEndpointsCalculator) CalculateEndpointsDegradedMode(eps []types.EndpointsData, currentMap map[string]types.NetworkEndpointSet) (map[string]types.NetworkEndpointSet, types.EndpointPodMap, error) {
func (l *ClusterL4EndpointsCalculator) CalculateEndpointsDegradedMode(eps []types.EndpointsData, currentMap map[string]types.NetworkEndpointSet) (map[string]types.NetworkEndpointSet, types.EndpointPodMap, error) {
// this should be the same as CalculateEndpoints for L4 ec
subsetMap, podMap, _, err := l.CalculateEndpoints(eps, currentMap)
return subsetMap, podMap, err
}

func (l *ClusterL4ILBEndpointsCalculator) ValidateEndpoints(endpointData []types.EndpointsData, endpointPodMap types.EndpointPodMap, endpointsExcludedInCalculation int) error {
func (l *ClusterL4EndpointsCalculator) ValidateEndpoints(endpointData []types.EndpointsData, endpointPodMap types.EndpointPodMap, endpointsExcludedInCalculation int) error {
// this should be a no-op for now
return nil
}
Expand Down
12 changes: 6 additions & 6 deletions pkg/neg/syncers/endpoints_calculator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ import (
"k8s.io/klog/v2"
)

// TestLocalGetEndpointSet verifies the GetEndpointSet method implemented by the LocalL4ILBEndpointsCalculator.
// TestLocalGetEndpointSet verifies the GetEndpointSet method implemented by the LocalL4EndpointsCalculator.
// The L7 implementation is tested in TestToZoneNetworkEndpointMapUtil.
func TestLocalGetEndpointSet(t *testing.T) {
t.Parallel()
Expand Down Expand Up @@ -134,7 +134,7 @@ func TestLocalGetEndpointSet(t *testing.T) {
}
svcKey := fmt.Sprintf("%s/%s", testServiceName, testServiceNamespace)
for _, tc := range testCases {
ec := NewLocalL4ILBEndpointsCalculator(listers.NewNodeLister(nodeInformer.GetIndexer()), zoneGetter, svcKey, klog.TODO(), &tc.network)
ec := NewLocalL4EndpointsCalculator(listers.NewNodeLister(nodeInformer.GetIndexer()), zoneGetter, svcKey, klog.TODO(), &tc.network, negtypes.L4InternalLB)
updateNodes(t, tc.nodeNames, tc.nodeLabelsMap, tc.nodeAnnotationsMap, tc.nodeReadyStatusMap, nodeInformer.GetIndexer())
retSet, _, _, err := ec.CalculateEndpoints(tc.endpointsData, nil)
if err != nil {
Expand Down Expand Up @@ -168,7 +168,7 @@ func nodeInterfacesAnnotation(t *testing.T, network, ip string) string {
return annotation
}

// TestClusterGetEndpointSet verifies the GetEndpointSet method implemented by the ClusterL4ILBEndpointsCalculator.
// TestClusterGetEndpointSet verifies the GetEndpointSet method implemented by the ClusterL4EndpointsCalculator.
func TestClusterGetEndpointSet(t *testing.T) {
t.Parallel()
nodeInformer := zonegetter.FakeNodeInformer()
Expand Down Expand Up @@ -272,7 +272,7 @@ func TestClusterGetEndpointSet(t *testing.T) {
}
svcKey := fmt.Sprintf("%s/%s", testServiceName, testServiceNamespace)
for _, tc := range testCases {
ec := NewClusterL4ILBEndpointsCalculator(listers.NewNodeLister(nodeInformer.GetIndexer()), zoneGetter, svcKey, klog.TODO(), &tc.network)
ec := NewClusterL4EndpointsCalculator(listers.NewNodeLister(nodeInformer.GetIndexer()), zoneGetter, svcKey, klog.TODO(), &tc.network, negtypes.L4InternalLB)
updateNodes(t, tc.nodeNames, tc.nodeLabelsMap, tc.nodeAnnotationsMap, tc.nodeReadyStatusMap, nodeInformer.GetIndexer())
retSet, _, _, err := ec.CalculateEndpoints(tc.endpointsData, nil)
if err != nil {
Expand Down Expand Up @@ -352,8 +352,8 @@ func TestValidateEndpoints(t *testing.T) {
zoneGetterMSC := zonegetter.NewFakeZoneGetter(testContext.NodeInformer, defaultTestSubnetURL, true)
L7EndpointsCalculatorMSC := NewL7EndpointsCalculator(zoneGetterMSC, podLister, nodeLister, serviceLister, svcPort, klog.TODO(), testContext.EnableDualStackNEG, metricscollector.FakeSyncerMetrics())
L7EndpointsCalculatorMSC.enableMultiSubnetCluster = true
L4LocalEndpointCalculator := NewLocalL4ILBEndpointsCalculator(listers.NewNodeLister(nodeLister), zoneGetter, fmt.Sprintf("%s/%s", testServiceName, testServiceNamespace), klog.TODO(), &network.NetworkInfo{})
L4ClusterEndpointCalculator := NewClusterL4ILBEndpointsCalculator(listers.NewNodeLister(nodeLister), zoneGetter, fmt.Sprintf("%s/%s", testServiceName, testServiceNamespace), klog.TODO(), &network.NetworkInfo{})
L4LocalEndpointCalculator := NewLocalL4EndpointsCalculator(listers.NewNodeLister(nodeLister), zoneGetter, fmt.Sprintf("%s/%s", testServiceName, testServiceNamespace), klog.TODO(), &network.NetworkInfo{}, negtypes.L4InternalLB)
L4ClusterEndpointCalculator := NewClusterL4EndpointsCalculator(listers.NewNodeLister(nodeLister), zoneGetter, fmt.Sprintf("%s/%s", testServiceName, testServiceNamespace), klog.TODO(), &network.NetworkInfo{}, negtypes.L4InternalLB)

l7TestEPS := []*discovery.EndpointSlice{
{
Expand Down
4 changes: 4 additions & 0 deletions pkg/neg/syncers/subsets.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ const (
maxSubsetSizeLocal = 250
// Max number of subsets in ExternalTrafficPolicy:Cluster, which is the default mode.
maxSubsetSizeDefault = 25
// Max number of subsets for NetLB in ExternalTrafficPolicy:Local
maxSubsetSizeNetLBLocal = 1000
// Max number of subsets for NetLB in ExternalTrafficPolicy:Cluster
maxSubsetSizeNetLBCluster = 100
)

// NodeInfo stores node metadata used to sort nodes and pick a subset.
Expand Down
6 changes: 3 additions & 3 deletions pkg/neg/syncers/transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -191,15 +191,15 @@ func NewTransactionSyncer(
return syncer
}

func GetEndpointsCalculator(podLister, nodeLister, serviceLister cache.Indexer, zoneGetter *zonegetter.ZoneGetter, syncerKey negtypes.NegSyncerKey, mode negtypes.EndpointsCalculatorMode, logger klog.Logger, enableDualStackNEG bool, syncMetricsCollector *metricscollector.SyncerMetrics, networkInfo *network.NetworkInfo) negtypes.NetworkEndpointsCalculator {
func GetEndpointsCalculator(podLister, nodeLister, serviceLister cache.Indexer, zoneGetter *zonegetter.ZoneGetter, syncerKey negtypes.NegSyncerKey, mode negtypes.EndpointsCalculatorMode, logger klog.Logger, enableDualStackNEG bool, syncMetricsCollector *metricscollector.SyncerMetrics, networkInfo *network.NetworkInfo, l4LBType negtypes.L4LBType) negtypes.NetworkEndpointsCalculator {
serviceKey := strings.Join([]string{syncerKey.Name, syncerKey.Namespace}, "/")
if syncerKey.NegType == negtypes.VmIpEndpointType {
nodeLister := listers.NewNodeLister(nodeLister)
switch mode {
case negtypes.L4LocalMode:
return NewLocalL4ILBEndpointsCalculator(nodeLister, zoneGetter, serviceKey, logger, networkInfo)
return NewLocalL4EndpointsCalculator(nodeLister, zoneGetter, serviceKey, logger, networkInfo, l4LBType)
default:
return NewClusterL4ILBEndpointsCalculator(nodeLister, zoneGetter, serviceKey, logger, networkInfo)
return NewClusterL4EndpointsCalculator(nodeLister, zoneGetter, serviceKey, logger, networkInfo, l4LBType)
}
}
return NewL7EndpointsCalculator(
Expand Down
4 changes: 2 additions & 2 deletions pkg/neg/syncers/transaction_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2231,7 +2231,7 @@ func TestCollectLabelStats(t *testing.T) {

func newL4ILBTestTransactionSyncer(fakeGCE negtypes.NetworkEndpointGroupCloud, mode negtypes.EndpointsCalculatorMode) (negtypes.NegSyncer, *transactionSyncer) {
negsyncer, ts := newTestTransactionSyncer(fakeGCE, negtypes.VmIpEndpointType, false)
ts.endpointsCalculator = GetEndpointsCalculator(ts.podLister, ts.nodeLister, ts.serviceLister, ts.zoneGetter, ts.NegSyncerKey, mode, klog.TODO(), false, nil, &network.NetworkInfo{IsDefault: true})
ts.endpointsCalculator = GetEndpointsCalculator(ts.podLister, ts.nodeLister, ts.serviceLister, ts.zoneGetter, ts.NegSyncerKey, mode, klog.TODO(), false, nil, &network.NetworkInfo{IsDefault: true}, negtypes.L4InternalLB)
return negsyncer, ts
}

Expand Down Expand Up @@ -2275,7 +2275,7 @@ func newTestTransactionSyncer(fakeGCE negtypes.NetworkEndpointGroupCloud, negTyp
testContext.SvcNegInformer.GetIndexer(),
reflector,
GetEndpointsCalculator(testContext.PodInformer.GetIndexer(), testContext.NodeInformer.GetIndexer(), testContext.ServiceInformer.GetIndexer(),
fakeZoneGetter, svcPort, mode, klog.TODO(), testContext.EnableDualStackNEG, metricscollector.FakeSyncerMetrics(), &network.NetworkInfo{IsDefault: true}),
fakeZoneGetter, svcPort, mode, klog.TODO(), testContext.EnableDualStackNEG, metricscollector.FakeSyncerMetrics(), &network.NetworkInfo{IsDefault: true}, negtypes.L4InternalLB),
string(kubeSystemUID),
testContext.SvcNegClient,
metricscollector.FakeSyncerMetrics(),
Expand Down
Loading

0 comments on commit 7acfed4

Please sign in to comment.