Skip to content

Commit 2c6582b

Browse files
committed
added providerconfig labels to NEG metrics
1 parent 74d3b58 commit 2c6582b

31 files changed

+401
-253
lines changed

cmd/glbc/main.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,18 +59,18 @@ import (
5959
"k8s.io/ingress-gce/pkg/utils"
6060
"k8s.io/klog/v2"
6161

62-
ingctx "k8s.io/ingress-gce/pkg/context"
63-
"k8s.io/ingress-gce/pkg/controller"
64-
"k8s.io/ingress-gce/pkg/neg"
65-
"k8s.io/ingress-gce/pkg/neg/syncers/labels"
66-
negtypes "k8s.io/ingress-gce/pkg/neg/types"
67-
6862
"k8s.io/ingress-gce/cmd/glbc/app"
6963
"k8s.io/ingress-gce/pkg/backendconfig"
64+
ingctx "k8s.io/ingress-gce/pkg/context"
65+
"k8s.io/ingress-gce/pkg/controller"
7066
"k8s.io/ingress-gce/pkg/crd"
7167
"k8s.io/ingress-gce/pkg/firewalls"
7268
"k8s.io/ingress-gce/pkg/flags"
7369
_ "k8s.io/ingress-gce/pkg/klog"
70+
"k8s.io/ingress-gce/pkg/neg"
71+
"k8s.io/ingress-gce/pkg/neg/metrics"
72+
"k8s.io/ingress-gce/pkg/neg/syncers/labels"
73+
negtypes "k8s.io/ingress-gce/pkg/neg/types"
7474
"k8s.io/ingress-gce/pkg/utils/zonegetter"
7575
"k8s.io/ingress-gce/pkg/version"
7676
)
@@ -656,6 +656,8 @@ func createNEGController(ctx *ingctx.ControllerContext, systemHealth *systemheal
656656
adapter = ctx.Cloud
657657
}
658658

659+
negMetrics := metrics.NewNegMetrics("")
660+
659661
// TODO: Refactor NEG to use cloud mocks so ctx.Cloud can be referenced within NewController.
660662
negController, err := neg.NewController(
661663
ctx.KubeClient,
@@ -674,7 +676,7 @@ func createNEGController(ctx *ingctx.ControllerContext, systemHealth *systemheal
674676
ctx.HasSynced,
675677
ctx.L4Namer,
676678
ctx.DefaultBackendSvcPort,
677-
negtypes.NewAdapterWithRateLimitSpecs(ctx.Cloud, flags.F.GCERateLimit.Values(), adapter),
679+
negtypes.NewAdapterWithRateLimitSpecs(ctx.Cloud, flags.F.GCERateLimit.Values(), adapter, negMetrics),
678680
zoneGetter,
679681
ctx.ClusterNamer,
680682
flags.F.ResyncPeriod,
@@ -691,6 +693,7 @@ func createNEGController(ctx *ingctx.ControllerContext, systemHealth *systemheal
691693
flags.F.ReadOnlyMode,
692694
stopCh,
693695
logger,
696+
negMetrics,
694697
)
695698
if err != nil {
696699
return nil, fmt.Errorf("failed to create NEG controller: %w", err)

docs/deploy/local/README.md

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,14 @@ from the root of this repo:
3232
$ hack/setup-local.sh <cluster-name>
3333
```
3434

35-
## Setup GCE permissions
35+
## Authorize gcloud and kubectl
3636

37-
When running locally, the Ingress-GCE controller looks on the local machine
38-
for credentials to create GCE networking resources. Specifically it looks for a
39-
json file specified at the GOOGLE_APPLICATION_CREDENTIALS variable. Given this,
40-
it is most desirable to follow these steps:
41-
42-
1. Create a Service Account in GCP and give the account Compute Admin permissions
43-
44-
2. Create a key for the Service Account and download it
45-
46-
Then run the following:
37+
Once the cluster is ready prepare authorization to it.
38+
You need to authorize both gcloud and kubectl.
4739

4840
```console
49-
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key/file
41+
$ gcloud auth application-default login
42+
$ gcloud container clusters get-credentials CLUSTER_NAME --region CLUSTER_LOCATION
5043
```
5144

5245
## Run the controller
@@ -62,6 +55,15 @@ binary in a container and place it in `bin/amd64`.
6255
make build
6356
```
6457

58+
NOTE -
59+
If you get build errors with Docker getting a permission denied while pulling the base image run the following commands:
60+
61+
```console
62+
sudo addgroup --system docker
63+
sudo usermod -aG docker $USER
64+
newgrp docker
65+
```
66+
6567
For Mac OS users or to build the binary locally and output it in the
6668
`bin/amd64` directory run:
6769

pkg/controller/controller.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ import (
4848
"k8s.io/ingress-gce/pkg/loadbalancers"
4949
"k8s.io/ingress-gce/pkg/loadbalancers/features"
5050
"k8s.io/ingress-gce/pkg/metrics"
51+
negmetrics "k8s.io/ingress-gce/pkg/neg/metrics"
5152
negtypes "k8s.io/ingress-gce/pkg/neg/types"
5253
ingsync "k8s.io/ingress-gce/pkg/sync"
5354
"k8s.io/ingress-gce/pkg/translator"
@@ -139,7 +140,7 @@ func NewLoadBalancerController(
139140
instancePool: ctx.InstancePool,
140141
l7Pool: loadbalancers.NewLoadBalancerPool(ctx.Cloud, ctx.ClusterNamer, ctx, namer.NewFrontendNamerFactory(ctx.ClusterNamer, ctx.KubeSystemUID, logger), logger),
141142
backendSyncer: backends.NewBackendSyncer(backendPool, healthChecker, ctx.Cloud, ctx.Translator),
142-
negLinker: backends.NewNEGLinker(backendPool, negtypes.NewAdapter(ctx.Cloud), ctx.Cloud, ctx.SvcNegInformer.GetIndexer(), logger),
143+
negLinker: backends.NewNEGLinker(backendPool, negtypes.NewAdapter(ctx.Cloud, negmetrics.NewNegMetrics("")), ctx.Cloud, ctx.SvcNegInformer.GetIndexer(), logger),
143144
igLinker: backends.NewInstanceGroupLinker(ctx.InstancePool, backendPool, logger),
144145
metrics: ctx.ControllerMetrics,
145146
ZoneGetter: ctx.ZoneGetter,

pkg/l4lb/l4controller.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import (
3838
"k8s.io/ingress-gce/pkg/forwardingrules"
3939
"k8s.io/ingress-gce/pkg/l4lb/metrics"
4040
"k8s.io/ingress-gce/pkg/loadbalancers"
41+
negmetrics "k8s.io/ingress-gce/pkg/neg/metrics"
4142
negtypes "k8s.io/ingress-gce/pkg/neg/types"
4243
"k8s.io/ingress-gce/pkg/network"
4344
"k8s.io/ingress-gce/pkg/utils"
@@ -106,7 +107,7 @@ func NewILBController(ctx *context.ControllerContext, stopCh <-chan struct{}, lo
106107
hasSynced: ctx.HasSynced,
107108
}
108109
l4c.backendPool = backends.NewPool(ctx.Cloud, l4c.namer)
109-
l4c.NegLinker = backends.NewNEGLinker(l4c.backendPool, negtypes.NewAdapter(ctx.Cloud), ctx.Cloud, ctx.SvcNegInformer.GetIndexer(), logger)
110+
l4c.NegLinker = backends.NewNEGLinker(l4c.backendPool, negtypes.NewAdapter(ctx.Cloud, negmetrics.NewNegMetrics("")), ctx.Cloud, ctx.SvcNegInformer.GetIndexer(), logger)
110111

111112
l4c.svcQueue = utils.NewPeriodicTaskQueueWithMultipleWorkers("l4", "services", l4c.numWorkers, l4c.syncWrapper, logger)
112113

pkg/l4lb/l4netlbcontroller.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import (
3939
"k8s.io/ingress-gce/pkg/instancegroups"
4040
"k8s.io/ingress-gce/pkg/l4lb/metrics"
4141
"k8s.io/ingress-gce/pkg/loadbalancers"
42+
negmetrics "k8s.io/ingress-gce/pkg/neg/metrics"
4243
negtypes "k8s.io/ingress-gce/pkg/neg/types"
4344
"k8s.io/ingress-gce/pkg/network"
4445
"k8s.io/ingress-gce/pkg/utils"
@@ -138,7 +139,7 @@ func NewL4NetLBController(
138139
adapter = ctx.Cloud
139140
}
140141
l4netLBc.networkResolver = network.NewNetworksResolver(networkLister, gkeNetworkParamSetLister, adapter, ctx.EnableMultinetworking, logger)
141-
l4netLBc.negLinker = backends.NewNEGLinker(l4netLBc.backendPool, negtypes.NewAdapter(ctx.Cloud), ctx.Cloud, ctx.SvcNegInformer.GetIndexer(), logger)
142+
l4netLBc.negLinker = backends.NewNEGLinker(l4netLBc.backendPool, negtypes.NewAdapter(ctx.Cloud, negmetrics.NewNegMetrics("")), ctx.Cloud, ctx.SvcNegInformer.GetIndexer(), logger)
142143
l4netLBc.svcQueue = utils.NewPeriodicTaskQueueWithMultipleWorkers("l4netLB", "services", ctx.NumL4NetLBWorkers, l4netLBc.syncWrapper, logger)
143144

144145
ctx.ServiceInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{

pkg/multiproject/neg/neg.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"k8s.io/ingress-gce/pkg/flags"
1717
"k8s.io/ingress-gce/pkg/multiproject/filteredinformer"
1818
"k8s.io/ingress-gce/pkg/neg"
19+
"k8s.io/ingress-gce/pkg/neg/metrics"
1920
"k8s.io/ingress-gce/pkg/neg/syncers/labels"
2021
negtypes "k8s.io/ingress-gce/pkg/neg/types"
2122
"k8s.io/ingress-gce/pkg/network"
@@ -53,6 +54,13 @@ func StartNEGController(
5354
providerConfigName := providerConfig.Name
5455
logger.V(2).Info("Initializing NEG controller", "providerConfig", providerConfigName)
5556

57+
// This is the ID for tenant/cluster for which the NEG controller is created.
58+
providerConfigID := ""
59+
if providerConfig.Spec.PrincipalInfo != nil {
60+
providerConfigID = providerConfig.Spec.PrincipalInfo.ID
61+
logger.V(2).Info("Initializing NEG controller", "providerConfigID", providerConfigID)
62+
}
63+
5664
// The ProviderConfig-specific stop channel. We close this in StopControllersForProviderConfig.
5765
providerConfigStopCh := make(chan struct{})
5866

@@ -103,6 +111,7 @@ func StartNEGController(
103111
lpConfig,
104112
joinedStopCh,
105113
logger,
114+
providerConfigID,
106115
)
107116

108117
if err != nil {
@@ -261,6 +270,7 @@ func createNEGController(
261270
lpConfig labels.PodLabelPropagationConfig,
262271
stopCh <-chan struct{},
263272
logger klog.Logger,
273+
providerConfigID string,
264274
) (*neg.Controller, error) {
265275

266276
// The adapter uses Network SelfLink
@@ -272,6 +282,7 @@ func createNEGController(
272282

273283
noDefaultBackendServicePort := utils.ServicePort{}
274284
var noNodeTopologyInformer cache.SharedIndexInformer
285+
negMetrics := metrics.NewNegMetrics(providerConfigID)
275286

276287
negController, err := neg.NewController(
277288
kubeClient,
@@ -290,7 +301,7 @@ func createNEGController(
290301
hasSynced,
291302
l4Namer,
292303
noDefaultBackendServicePort,
293-
negtypes.NewAdapterWithRateLimitSpecs(cloud, flags.F.GCERateLimit.Values(), adapter),
304+
negtypes.NewAdapterWithRateLimitSpecs(cloud, flags.F.GCERateLimit.Values(), adapter, negMetrics),
294305
zoneGetter,
295306
clusterNamer,
296307
flags.F.ResyncPeriod,
@@ -307,6 +318,7 @@ func createNEGController(
307318
flags.F.ReadOnlyMode,
308319
stopCh,
309320
logger,
321+
negMetrics,
310322
)
311323
if err != nil {
312324
return nil, fmt.Errorf("failed to create NEG controller: %w", err)

pkg/neg/controller.go

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import (
3939
svcnegv1beta1 "k8s.io/ingress-gce/pkg/apis/svcneg/v1beta1"
4040
"k8s.io/ingress-gce/pkg/controller/translator"
4141
"k8s.io/ingress-gce/pkg/flags"
42-
"k8s.io/ingress-gce/pkg/neg/metrics"
42+
metrics "k8s.io/ingress-gce/pkg/neg/metrics"
4343
"k8s.io/ingress-gce/pkg/neg/metrics/metricscollector"
4444
syncMetrics "k8s.io/ingress-gce/pkg/neg/metrics/metricscollector"
4545
"k8s.io/ingress-gce/pkg/neg/readiness"
@@ -118,6 +118,9 @@ type Controller struct {
118118

119119
stopCh <-chan struct{}
120120
logger klog.Logger
121+
122+
// negMetrics is used to collect metrics for NEG
123+
negMetrics *metrics.NegMetrics
121124
}
122125

123126
// NewController returns a network endpoint group controller.
@@ -155,6 +158,7 @@ func NewController(
155158
readOnlyMode bool,
156159
stopCh <-chan struct{},
157160
logger klog.Logger,
161+
negMetrics *metrics.NegMetrics,
158162
) (*Controller, error) {
159163
if svcNegClient == nil {
160164
return nil, fmt.Errorf("svcNegClient is nil")
@@ -170,17 +174,18 @@ func NewController(
170174
err := scheme.AddToScheme(negScheme)
171175
if err != nil {
172176
logger.Error(err, "Errored adding default scheme to event recorder")
173-
metrics.PublishNegControllerErrorCountMetrics(err, true)
177+
negMetrics.PublishNegControllerErrorCountMetrics(err, true)
174178
}
175179
err = svcnegv1beta1.AddToScheme(negScheme)
176180
if err != nil {
177181
logger.Error(err, "Errored adding NEG CRD scheme to event recorder")
178-
metrics.PublishNegControllerErrorCountMetrics(err, true)
182+
negMetrics.PublishNegControllerErrorCountMetrics(err, true)
179183
}
180184
recorder := eventBroadcaster.NewRecorder(negScheme,
181185
apiv1.EventSource{Component: "neg-controller"})
182186

183-
syncerMetrics := syncMetrics.NewNegMetricsCollector(flags.F.NegMetricsExportInterval, logger)
187+
syncerMetrics := syncMetrics.NewNegMetricsCollector(flags.F.NegMetricsExportInterval, logger, negMetrics.ProviderConfigID)
188+
184189
manager := newSyncerManager(
185190
namer,
186191
l4Namer,
@@ -199,7 +204,9 @@ func NewController(
199204
enableDualStackNEG,
200205
numGCWorkers,
201206
lpConfig,
202-
logger)
207+
logger,
208+
negMetrics,
209+
)
203210

204211
var reflector readiness.Reflector
205212
if enableReadinessReflector {
@@ -213,6 +220,7 @@ func NewController(
213220
enableDualStackNEG,
214221
flags.F.EnableMultiSubnetCluster && !flags.F.EnableMultiSubnetClusterPhase1,
215222
logger,
223+
negMetrics,
216224
)
217225
} else {
218226
reflector = &readiness.NoopReflector{}
@@ -255,6 +263,7 @@ func NewController(
255263
readOnlyMode: readOnlyMode,
256264
stopCh: stopCh,
257265
logger: logger,
266+
negMetrics: negMetrics,
258267
}
259268
if enableMultiSubnetClusterPhase1 {
260269
negController.nodeTopologyQueue = workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "neg_node_topology_queue")
@@ -485,7 +494,7 @@ func (c *Controller) processEndpoint(key string) {
485494
namespace, name, err := cache.SplitMetaNamespaceKey(key)
486495
if err != nil {
487496
c.logger.Error(err, "Failed to split endpoint namespaced key", "key", key)
488-
metrics.PublishNegControllerErrorCountMetrics(err, true)
497+
c.negMetrics.PublishNegControllerErrorCountMetrics(err, true)
489498
return
490499
}
491500
c.manager.Sync(namespace, name)
@@ -501,7 +510,7 @@ func (c *Controller) serviceWorker() {
501510
defer c.serviceQueue.Done(key)
502511
err := c.processService(key.(string))
503512
c.handleErr(err, key)
504-
metrics.PublishNegControllerErrorCountMetrics(err, false)
513+
c.negMetrics.PublishNegControllerErrorCountMetrics(err, false)
505514
}()
506515
}
507516
}
@@ -862,7 +871,7 @@ func (c *Controller) handleErr(err error, key interface{}) {
862871
c.logger.Error(nil, msg)
863872
if service, exists, err := c.serviceLister.GetByKey(key.(string)); err != nil {
864873
c.logger.Error(err, "Failed to retrieve service from store", "service", key.(string))
865-
metrics.PublishNegControllerErrorCountMetrics(err, true)
874+
c.negMetrics.PublishNegControllerErrorCountMetrics(err, true)
866875
} else if exists {
867876
c.recorder.Eventf(service.(*apiv1.Service), apiv1.EventTypeWarning, "ProcessServiceFailed", msg)
868877
}
@@ -885,7 +894,7 @@ func (c *Controller) enqueueEndpointSlice(obj interface{}) {
885894
key, err := endpointslices.EndpointSlicesServiceKey(endpointSlice)
886895
if err != nil {
887896
c.logger.Error(err, "Failed to find a service label inside endpoint slice", "endpointSlice", klog.KObj(endpointSlice))
888-
metrics.PublishNegControllerErrorCountMetrics(err, true)
897+
c.negMetrics.PublishNegControllerErrorCountMetrics(err, true)
889898
return
890899
}
891900
c.logger.V(3).Info("Adding EndpointSlice to endpointQueue for processing", "endpointSlice", key)
@@ -896,7 +905,7 @@ func (c *Controller) enqueueNode(obj interface{}) {
896905
key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj)
897906
if err != nil {
898907
c.logger.Error(err, "Failed to generate node key")
899-
metrics.PublishNegControllerErrorCountMetrics(err, true)
908+
c.negMetrics.PublishNegControllerErrorCountMetrics(err, true)
900909
return
901910
}
902911
c.logger.V(3).Info("Adding Node to nodeQueue for processing", "node", key)
@@ -907,7 +916,7 @@ func (c *Controller) enqueueService(obj interface{}) {
907916
key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj)
908917
if err != nil {
909918
c.logger.Error(err, "Failed to generate service key")
910-
metrics.PublishNegControllerErrorCountMetrics(err, true)
919+
c.negMetrics.PublishNegControllerErrorCountMetrics(err, true)
911920
return
912921
}
913922
c.logger.V(3).Info("Adding Service to serviceQueue for processing", "service", key)
@@ -931,7 +940,7 @@ func (c *Controller) enqueueNodeTopology(obj interface{}) {
931940
key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj)
932941
if err != nil {
933942
c.logger.Error(err, "Failed to generate Node Topology key")
934-
metrics.PublishNegControllerErrorCountMetrics(err, true)
943+
c.negMetrics.PublishNegControllerErrorCountMetrics(err, true)
935944
return
936945
}
937946
c.logger.V(3).Info("Adding NodeTopology to nodeTopologyQueue for processing", "nodeTopology", key)
@@ -941,7 +950,7 @@ func (c *Controller) enqueueNodeTopology(obj interface{}) {
941950
func (c *Controller) gc() {
942951
if err := c.manager.GC(); err != nil {
943952
c.logger.Error(err, "NEG controller garbage collection failed")
944-
metrics.PublishNegControllerErrorCountMetrics(err, true)
953+
c.negMetrics.PublishNegControllerErrorCountMetrics(err, true)
945954
}
946955
}
947956

pkg/neg/controller_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ func newTestControllerWithParamsAndContext(kubeClient kubernetes.Interface, test
145145
func() bool { return true },
146146
testContext.L4Namer,
147147
defaultBackend,
148-
negtypes.NewAdapter(testContext.Cloud),
148+
negtypes.NewAdapter(testContext.Cloud, testContext.NegMetrics),
149149
zoneGetter,
150150
testContext.NegNamer,
151151
testContext.ResyncPeriod,
@@ -163,6 +163,7 @@ func newTestControllerWithParamsAndContext(kubeClient kubernetes.Interface, test
163163
readOnlyMode,
164164
make(<-chan struct{}),
165165
klog.TODO(),
166+
testContext.NegMetrics,
166167
)
167168
}
168169

0 commit comments

Comments
 (0)