Skip to content

Commit

Permalink
Merge pull request #2078 from mmamczur/multi-networking-network-info
Browse files Browse the repository at this point in the history
Add network package containing the NetworkInfo struct
  • Loading branch information
k8s-ci-robot authored Apr 24, 2023
2 parents 1d148a8 + bcb2ea9 commit 8c7d784
Show file tree
Hide file tree
Showing 11 changed files with 396 additions and 292 deletions.
37 changes: 22 additions & 15 deletions pkg/neg/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import (
"k8s.io/ingress-gce/pkg/neg/readiness"
"k8s.io/ingress-gce/pkg/neg/syncers/labels"
negtypes "k8s.io/ingress-gce/pkg/neg/types"
"k8s.io/ingress-gce/pkg/network"
svcnegclient "k8s.io/ingress-gce/pkg/svcneg/client/clientset/versioned"
"k8s.io/ingress-gce/pkg/utils"
"k8s.io/ingress-gce/pkg/utils/endpointslices"
Expand All @@ -67,6 +68,7 @@ type Controller struct {
namer negtypes.NetworkEndpointGroupNamer
l4Namer namer2.L4ResourcesNamer
zoneGetter negtypes.ZoneGetter
cloud negtypes.NetworkEndpointGroupCloud

hasSynced func() bool
ingressLister cache.Indexer
Expand Down Expand Up @@ -196,6 +198,7 @@ func NewController(
gcPeriod: gcPeriod,
recorder: recorder,
zoneGetter: zoneGetter,
cloud: cloud,
namer: namer,
l4Namer: l4Namer,
defaultBackendService: defaultBackendService,
Expand Down Expand Up @@ -444,21 +447,25 @@ func (c *Controller) processService(key string) error {
}
negUsage := usageMetrics.NegServiceState{}
svcPortInfoMap := make(negtypes.PortInfoMap)
if err := c.mergeDefaultBackendServicePortInfoMap(key, service, svcPortInfoMap); err != nil {
networkInfo, err := network.ServiceNetwork(service, c.cloud)
if err != nil {
return err
}
if err := c.mergeDefaultBackendServicePortInfoMap(key, service, svcPortInfoMap, networkInfo); err != nil {
return err
}
negUsage.IngressNeg = len(svcPortInfoMap)
if err := c.mergeIngressPortInfo(service, types.NamespacedName{Namespace: namespace, Name: name}, svcPortInfoMap); err != nil {
if err := c.mergeIngressPortInfo(service, types.NamespacedName{Namespace: namespace, Name: name}, svcPortInfoMap, networkInfo); err != nil {
return err
}
negUsage.IngressNeg = len(svcPortInfoMap)
if err := c.mergeStandaloneNEGsPortInfo(service, types.NamespacedName{Namespace: namespace, Name: name}, svcPortInfoMap, &negUsage); err != nil {
if err := c.mergeStandaloneNEGsPortInfo(service, types.NamespacedName{Namespace: namespace, Name: name}, svcPortInfoMap, &negUsage, networkInfo); err != nil {
return err
}
negUsage.StandaloneNeg = len(svcPortInfoMap) - negUsage.IngressNeg

if c.enableASM {
csmSVCPortInfoMap, err := c.getCSMPortInfoMap(namespace, name, service)
csmSVCPortInfoMap, err := c.getCSMPortInfoMap(namespace, name, service, networkInfo)
if err != nil {
return err
}
Expand All @@ -471,7 +478,7 @@ func (c *Controller) processService(key string) error {
}

if c.runL4 {
if err := c.mergeVmIpNEGsPortInfo(service, types.NamespacedName{Namespace: namespace, Name: name}, svcPortInfoMap, &negUsage); err != nil {
if err := c.mergeVmIpNEGsPortInfo(service, types.NamespacedName{Namespace: namespace, Name: name}, svcPortInfoMap, &negUsage, networkInfo); err != nil {
return err
}
}
Expand All @@ -495,7 +502,7 @@ func (c *Controller) processService(key string) error {
}

// mergeIngressPortInfo merges Ingress PortInfo into portInfoMap if the service has Enable Ingress annotation.
func (c *Controller) mergeIngressPortInfo(service *apiv1.Service, name types.NamespacedName, portInfoMap negtypes.PortInfoMap) error {
func (c *Controller) mergeIngressPortInfo(service *apiv1.Service, name types.NamespacedName, portInfoMap negtypes.PortInfoMap, networkInfo *network.NetworkInfo) error {
negAnnotation, foundNEGAnnotation, err := annotations.FromService(service).NEGAnnotation()
if err != nil {
return err
Expand All @@ -509,7 +516,7 @@ func (c *Controller) mergeIngressPortInfo(service *apiv1.Service, name types.Nam
// Only service ports referenced by ingress are synced for NEG
ings := getIngressServicesFromStore(c.ingressLister, service)
ingressSvcPortTuples := gatherPortMappingUsedByIngress(ings, service, c.logger)
ingressPortInfoMap := negtypes.NewPortInfoMap(name.Namespace, name.Name, ingressSvcPortTuples, c.namer, true, nil)
ingressPortInfoMap := negtypes.NewPortInfoMap(name.Namespace, name.Name, ingressSvcPortTuples, c.namer, true, nil, networkInfo)
if err := portInfoMap.Merge(ingressPortInfoMap); err != nil {
return fmt.Errorf("failed to merge service ports referenced by ingress (%v): %w", ingressPortInfoMap, err)
}
Expand All @@ -518,7 +525,7 @@ func (c *Controller) mergeIngressPortInfo(service *apiv1.Service, name types.Nam
}

// mergeStandaloneNEGsPortInfo merge Standalone NEG PortInfo into portInfoMap
func (c *Controller) mergeStandaloneNEGsPortInfo(service *apiv1.Service, name types.NamespacedName, portInfoMap negtypes.PortInfoMap, negUsage *usageMetrics.NegServiceState) error {
func (c *Controller) mergeStandaloneNEGsPortInfo(service *apiv1.Service, name types.NamespacedName, portInfoMap negtypes.PortInfoMap, negUsage *usageMetrics.NegServiceState, networkInfo *network.NetworkInfo) error {
negAnnotation, foundNEGAnnotation, err := annotations.FromService(service).NEGAnnotation()
if err != nil {
return err
Expand Down Expand Up @@ -549,7 +556,7 @@ func (c *Controller) mergeStandaloneNEGsPortInfo(service *apiv1.Service, name ty
}
negUsage.CustomNamedNeg = len(customNames)

if err := portInfoMap.Merge(negtypes.NewPortInfoMap(name.Namespace, name.Name, exposedNegSvcPort, c.namer /*readinessGate*/, true, customNames)); err != nil {
if err := portInfoMap.Merge(negtypes.NewPortInfoMap(name.Namespace, name.Name, exposedNegSvcPort, c.namer, true, customNames, networkInfo)); err != nil {
return fmt.Errorf("failed to merge service ports exposed as standalone NEGs (%v) into ingress referenced service ports (%v): %w", exposedNegSvcPort, portInfoMap, err)
}
}
Expand All @@ -558,7 +565,7 @@ func (c *Controller) mergeStandaloneNEGsPortInfo(service *apiv1.Service, name ty
}

// mergeVmIpNEGsPortInfo merges the PortInfo for ILB services using GCE_VM_IP NEGs into portInfoMap
func (c *Controller) mergeVmIpNEGsPortInfo(service *apiv1.Service, name types.NamespacedName, portInfoMap negtypes.PortInfoMap, negUsage *usageMetrics.NegServiceState) error {
func (c *Controller) mergeVmIpNEGsPortInfo(service *apiv1.Service, name types.NamespacedName, portInfoMap negtypes.PortInfoMap, negUsage *usageMetrics.NegServiceState, networkInfo *network.NetworkInfo) error {
if wantsILB, _ := annotations.WantsL4ILB(service); !wantsILB {
return nil
}
Expand All @@ -574,15 +581,15 @@ func (c *Controller) mergeVmIpNEGsPortInfo(service *apiv1.Service, name types.Na
// Update usage metrics.
negUsage.VmIpNeg = usageMetrics.NewVmIpNegType(onlyLocal)

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

// mergeDefaultBackendServicePortInfoMap merge the PortInfoMap for the default backend service into portInfoMap
// The default backend service needs special handling since it is not explicitly referenced
// in the ingress spec. It is either inferred and then managed by the controller, or
// it is passed to the controller via a command line flag.
// Additionally, supporting NEGs for default backends is only for L7-ILB
func (c *Controller) mergeDefaultBackendServicePortInfoMap(key string, service *apiv1.Service, portInfoMap negtypes.PortInfoMap) error {
func (c *Controller) mergeDefaultBackendServicePortInfoMap(key string, service *apiv1.Service, portInfoMap negtypes.PortInfoMap, networkInfo *network.NetworkInfo) error {
if c.defaultBackendService.ID.Service.String() != key {
return nil
}
Expand All @@ -597,7 +604,7 @@ func (c *Controller) mergeDefaultBackendServicePortInfoMap(key string, service *
Port: c.defaultBackendService.Port,
TargetPort: c.defaultBackendService.TargetPort.String(),
})
defaultServicePortInfoMap := negtypes.NewPortInfoMap(c.defaultBackendService.ID.Service.Namespace, c.defaultBackendService.ID.Service.Name, svcPortTupleSet, c.namer, false, nil)
defaultServicePortInfoMap := negtypes.NewPortInfoMap(c.defaultBackendService.ID.Service.Namespace, c.defaultBackendService.ID.Service.Name, svcPortTupleSet, c.namer, false, nil, networkInfo)
return portInfoMap.Merge(defaultServicePortInfoMap)
}
}
Expand All @@ -624,7 +631,7 @@ func (c *Controller) mergeDefaultBackendServicePortInfoMap(key string, service *

// getCSMPortInfoMap returns the PortInfoMap used when ASM is enabled. The controller will create NEGs for every port of the service
// NOTE: The output of this function should only be used when enableASM = true.
func (c *Controller) getCSMPortInfoMap(namespace, name string, service *apiv1.Service) (negtypes.PortInfoMap, error) {
func (c *Controller) getCSMPortInfoMap(namespace, name string, service *apiv1.Service, networkInfo *network.NetworkInfo) (negtypes.PortInfoMap, error) {
servicePortInfoMap := make(negtypes.PortInfoMap)
// Fill all service ports into portinfomap
servicePorts := gatherPortMappingFromService(service)
Expand All @@ -635,7 +642,7 @@ func (c *Controller) getCSMPortInfoMap(namespace, name string, service *apiv1.Se
} else if contains(c.asmServiceNEGSkipNamespaces, namespace) {
c.logger.Info("Skip NEG creation for services in namespace", "namespace", namespace)
} else {
servicePortInfoMap = negtypes.NewPortInfoMap(namespace, name, servicePorts, c.namer, false, nil)
servicePortInfoMap = negtypes.NewPortInfoMap(namespace, name, servicePorts, c.namer, false, nil, networkInfo)
}
return servicePortInfoMap, nil
}
Expand Down
Loading

0 comments on commit 8c7d784

Please sign in to comment.