Skip to content

Commit b7ecb50

Browse files
committed
cherry-picking pulling out controler-runtime's manager client
1 parent a51f3ea commit b7ecb50

File tree

2 files changed

+51
-46
lines changed

2 files changed

+51
-46
lines changed

cns/common/service.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/Azure/azure-container-networking/server/tls"
1212
"github.com/Azure/azure-container-networking/store"
1313
"go.uber.org/zap"
14+
"sigs.k8s.io/controller-runtime/pkg/client"
1415
)
1516

1617
// Service implements behavior common to all services.
@@ -20,6 +21,7 @@ type Service struct {
2021
Options map[string]interface{}
2122
ErrChan chan<- error
2223
Store store.KeyValueStore
24+
Client client.Client
2325
ChannelMode string
2426
Logger *zap.Logger
2527
}
@@ -42,6 +44,7 @@ type ServiceConfig struct {
4244
Store store.KeyValueStore
4345
Server server
4446
ChannelMode string
47+
Client client.Client
4548
TLSSettings tls.TlsSettings
4649
Logger *zap.Logger
4750
}
@@ -82,6 +85,7 @@ func (service *Service) Initialize(config *ServiceConfig) error {
8285
service.ErrChan = config.ErrChan
8386
service.Store = config.Store
8487
service.Version = config.Version
88+
service.Client = config.Client
8589
service.ChannelMode = config.ChannelMode
8690
service.Logger = config.Logger
8791

cns/service/main.go

Lines changed: 47 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -797,29 +797,6 @@ func main() {
797797
}
798798
}
799799

800-
logger.Printf("[Azure CNS] Initialize HTTPRemoteRestService")
801-
if httpRemoteRestService != nil {
802-
if cnsconfig.UseHTTPS {
803-
config.TLSSettings = localtls.TlsSettings{
804-
TLSSubjectName: cnsconfig.TLSSubjectName,
805-
TLSCertificatePath: cnsconfig.TLSCertificatePath,
806-
TLSPort: cnsconfig.TLSPort,
807-
KeyVaultURL: cnsconfig.KeyVaultSettings.URL,
808-
KeyVaultCertificateName: cnsconfig.KeyVaultSettings.CertificateName,
809-
MSIResourceID: cnsconfig.MSISettings.ResourceID,
810-
KeyVaultCertificateRefreshInterval: time.Duration(cnsconfig.KeyVaultSettings.RefreshIntervalInHrs) * time.Hour,
811-
UseMTLS: cnsconfig.UseMTLS,
812-
MinTLSVersion: cnsconfig.MinTLSVersion,
813-
}
814-
}
815-
816-
err = httpRemoteRestService.Init(&config)
817-
if err != nil {
818-
logger.Errorf("Failed to init HTTPService, err:%v.\n", err)
819-
return
820-
}
821-
}
822-
823800
// Setting the remote ARP MAC address to 12-34-56-78-9a-bc on windows for external traffic if HNS is enabled
824801
err = platform.SetSdnRemoteArpMacAddress(rootCtx)
825802
if err != nil {
@@ -870,7 +847,8 @@ func main() {
870847

871848
logger.Printf("Set GlobalPodInfoScheme %v (InitializeFromCNI=%t)", cns.GlobalPodInfoScheme, cnsconfig.InitializeFromCNI)
872849

873-
err = InitializeCRDState(rootCtx, z, httpRemoteRestService, cnsconfig)
850+
client, err := InitializeCRDState(rootCtx, z, httpRemoteRestService, cnsconfig)
851+
config.Client = client
874852
if err != nil {
875853
logger.Errorf("Failed to start CRD Controller, err:%v.\n", err)
876854
return
@@ -891,6 +869,29 @@ func main() {
891869
}
892870
}
893871

872+
logger.Printf("[Azure CNS] Initialize HTTPRemoteRestService")
873+
if httpRemoteRestService != nil {
874+
if cnsconfig.UseHTTPS {
875+
config.TLSSettings = localtls.TlsSettings{
876+
TLSSubjectName: cnsconfig.TLSSubjectName,
877+
TLSCertificatePath: cnsconfig.TLSCertificatePath,
878+
TLSPort: cnsconfig.TLSPort,
879+
KeyVaultURL: cnsconfig.KeyVaultSettings.URL,
880+
KeyVaultCertificateName: cnsconfig.KeyVaultSettings.CertificateName,
881+
MSIResourceID: cnsconfig.MSISettings.ResourceID,
882+
KeyVaultCertificateRefreshInterval: time.Duration(cnsconfig.KeyVaultSettings.RefreshIntervalInHrs) * time.Hour,
883+
UseMTLS: cnsconfig.UseMTLS,
884+
MinTLSVersion: cnsconfig.MinTLSVersion,
885+
}
886+
}
887+
888+
err = httpRemoteRestService.Init(&config)
889+
if err != nil {
890+
logger.Errorf("Failed to init HTTPService, err:%v.\n", err)
891+
return
892+
}
893+
}
894+
894895
// AzureHost channelmode indicates Nodesubnet. IPs are to be fetched from NMagent.
895896
if config.ChannelMode == cns.AzureHost {
896897
if !cnsconfig.ManageEndpointState {
@@ -1375,12 +1376,12 @@ func reconcileInitialCNSState(ctx context.Context, cli nodeNetworkConfigGetter,
13751376
// InitializeCRDState builds and starts the CRD controllers.
13761377
//
13771378
//nolint:gocyclo // legacy
1378-
func InitializeCRDState(ctx context.Context, z *zap.Logger, httpRestService cns.HTTPService, cnsconfig *configuration.CNSConfig) error {
1379+
func InitializeCRDState(ctx context.Context, z *zap.Logger, httpRestService cns.HTTPService, cnsconfig *configuration.CNSConfig) (client.Client, error) {
13791380
// convert interface type to implementation type
13801381
httpRestServiceImplementation, ok := httpRestService.(*restserver.HTTPRestService)
13811382
if !ok {
13821383
logger.Errorf("[Azure CNS] Failed to convert interface httpRestService to implementation: %v", httpRestService)
1383-
return fmt.Errorf("[Azure CNS] Failed to convert interface httpRestService to implementation: %v",
1384+
return nil, fmt.Errorf("[Azure CNS] Failed to convert interface httpRestService to implementation: %v",
13841385
httpRestService)
13851386
}
13861387

@@ -1394,59 +1395,59 @@ func InitializeCRDState(ctx context.Context, z *zap.Logger, httpRestService cns.
13941395
kubeConfig, err := ctrl.GetConfig()
13951396
if err != nil {
13961397
logger.Errorf("[Azure CNS] Failed to get kubeconfig for request controller: %v", err)
1397-
return errors.Wrap(err, "failed to get kubeconfig")
1398+
return nil, errors.Wrap(err, "failed to get kubeconfig")
13981399
}
13991400
kubeConfig.UserAgent = fmt.Sprintf("azure-cns-%s", version)
14001401

14011402
clientset, err := kubernetes.NewForConfig(kubeConfig)
14021403
if err != nil {
1403-
return errors.Wrap(err, "failed to build clientset")
1404+
return nil, errors.Wrap(err, "failed to build clientset")
14041405
}
14051406

14061407
// get nodename for scoping kube requests to node.
14071408
nodeName, err := configuration.NodeName()
14081409
if err != nil {
1409-
return errors.Wrap(err, "failed to get NodeName")
1410+
return nil, errors.Wrap(err, "failed to get NodeName")
14101411
}
14111412

14121413
node, err := clientset.CoreV1().Nodes().Get(ctx, nodeName, metav1.GetOptions{})
14131414
if err != nil {
1414-
return errors.Wrapf(err, "failed to get node %s", nodeName)
1415+
return nil, errors.Wrapf(err, "failed to get node %s", nodeName)
14151416
}
14161417

14171418
// check the Node labels for Swift V2
14181419
if _, ok := node.Labels[configuration.LabelNodeSwiftV2]; ok {
14191420
cnsconfig.EnableSwiftV2 = true
14201421
cnsconfig.WatchPods = true
14211422
if nodeInfoErr := createOrUpdateNodeInfoCRD(ctx, kubeConfig, node); nodeInfoErr != nil {
1422-
return errors.Wrap(nodeInfoErr, "error creating or updating nodeinfo crd")
1423+
return nil, errors.Wrap(nodeInfoErr, "error creating or updating nodeinfo crd")
14231424
}
14241425
}
14251426

14261427
// perform state migration from CNI in case CNS is set to manage the endpoint state and has emty state
14271428
if cnsconfig.EnableStateMigration && !httpRestServiceImplementation.EndpointStateStore.Exists() {
14281429
if err = PopulateCNSEndpointState(httpRestServiceImplementation.EndpointStateStore); err != nil {
1429-
return errors.Wrap(err, "failed to create CNS EndpointState From CNI")
1430+
return nil, errors.Wrap(err, "failed to create CNS EndpointState From CNI")
14301431
}
14311432
// endpoint state needs tobe loaded in memory so the subsequent Delete calls remove the state and release the IPs.
14321433
if err = httpRestServiceImplementation.EndpointStateStore.Read(restserver.EndpointStoreKey, &httpRestServiceImplementation.EndpointState); err != nil {
1433-
return errors.Wrap(err, "failed to restore endpoint state")
1434+
return nil, errors.Wrap(err, "failed to restore endpoint state")
14341435
}
14351436
}
14361437

14371438
podInfoByIPProvider, err := getPodInfoByIPProvider(ctx, cnsconfig, httpRestServiceImplementation, clientset, nodeName)
14381439
if err != nil {
1439-
return errors.Wrap(err, "failed to initialize ip state")
1440+
return nil, errors.Wrap(err, "failed to initialize ip state")
14401441
}
14411442

14421443
// create scoped kube clients.
14431444
directcli, err := client.New(kubeConfig, client.Options{Scheme: nodenetworkconfig.Scheme})
14441445
if err != nil {
1445-
return errors.Wrap(err, "failed to create ctrl client")
1446+
return nil, errors.Wrap(err, "failed to create ctrl client")
14461447
}
14471448
directnnccli := nodenetworkconfig.NewClient(directcli)
14481449
if err != nil {
1449-
return errors.Wrap(err, "failed to create NNC client")
1450+
return nil, errors.Wrap(err, "failed to create NNC client")
14501451
}
14511452
// TODO(rbtr): nodename and namespace should be in the cns config
14521453
directscopedcli := nncctrl.NewScopedClient(directnnccli, types.NamespacedName{Namespace: "kube-system", Name: nodeName})
@@ -1470,16 +1471,16 @@ func InitializeCRDState(ctx context.Context, z *zap.Logger, httpRestService cns.
14701471
hasNNCInitialized.Set(1)
14711472
scheme := kuberuntime.NewScheme()
14721473
if err := corev1.AddToScheme(scheme); err != nil { //nolint:govet // intentional shadow
1473-
return errors.Wrap(err, "failed to add corev1 to scheme")
1474+
return nil, errors.Wrap(err, "failed to add corev1 to scheme")
14741475
}
14751476
if err = v1alpha.AddToScheme(scheme); err != nil {
1476-
return errors.Wrap(err, "failed to add nodenetworkconfig/v1alpha to scheme")
1477+
return nil, errors.Wrap(err, "failed to add nodenetworkconfig/v1alpha to scheme")
14771478
}
14781479
if err = cssv1alpha1.AddToScheme(scheme); err != nil {
1479-
return errors.Wrap(err, "failed to add clustersubnetstate/v1alpha1 to scheme")
1480+
return nil, errors.Wrap(err, "failed to add clustersubnetstate/v1alpha1 to scheme")
14801481
}
14811482
if err = mtv1alpha1.AddToScheme(scheme); err != nil {
1482-
return errors.Wrap(err, "failed to add multitenantpodnetworkconfig/v1alpha1 to scheme")
1483+
return nil, errors.Wrap(err, "failed to add multitenantpodnetworkconfig/v1alpha1 to scheme")
14831484
}
14841485

14851486
// Set Selector options on the Manager cache which are used
@@ -1520,7 +1521,7 @@ func InitializeCRDState(ctx context.Context, z *zap.Logger, httpRestService cns.
15201521

15211522
manager, err := ctrl.NewManager(kubeConfig, managerOpts)
15221523
if err != nil {
1523-
return errors.Wrap(err, "failed to create manager")
1524+
return nil, errors.Wrap(err, "failed to create manager")
15241525
}
15251526

15261527
// this cachedscopedclient is built using the Manager's cached client, which is
@@ -1562,14 +1563,14 @@ func InitializeCRDState(ctx context.Context, z *zap.Logger, httpRestService cns.
15621563
// IPAMv2 - reconcile all updates.
15631564
filterGenerationChange := !cnsconfig.EnableIPAMv2
15641565
if err := nncReconciler.SetupWithManager(manager, node, filterGenerationChange); err != nil { //nolint:govet // intentional shadow
1565-
return errors.Wrapf(err, "failed to setup nnc reconciler with manager")
1566+
return nil, errors.Wrapf(err, "failed to setup nnc reconciler with manager")
15661567
}
15671568

15681569
if cnsconfig.EnableSubnetScarcity {
15691570
// ClusterSubnetState reconciler
15701571
cssReconciler := cssctrl.New(cssCh)
15711572
if err := cssReconciler.SetupWithManager(manager); err != nil {
1572-
return errors.Wrapf(err, "failed to setup css reconciler with manager")
1573+
return nil, errors.Wrapf(err, "failed to setup css reconciler with manager")
15731574
}
15741575
}
15751576

@@ -1583,13 +1584,13 @@ func InitializeCRDState(ctx context.Context, z *zap.Logger, httpRestService cns.
15831584
pw.With(pw.NewNotifierFunc(hostNetworkListOpt, limit, ipampoolv2.PodIPDemandListener(ipDemandCh)))
15841585
}
15851586
if err := pw.SetupWithManager(ctx, manager); err != nil {
1586-
return errors.Wrapf(err, "failed to setup pod watcher with manager")
1587+
return nil, errors.Wrapf(err, "failed to setup pod watcher with manager")
15871588
}
15881589
}
15891590

15901591
if cnsconfig.EnableSwiftV2 {
15911592
if err := mtpncctrl.SetupWithManager(manager); err != nil {
1592-
return errors.Wrapf(err, "failed to setup mtpnc reconciler with manager")
1593+
return nil, errors.Wrapf(err, "failed to setup mtpnc reconciler with manager")
15931594
}
15941595
// if SWIFT v2 is enabled on CNS, attach multitenant middleware to rest service
15951596
// switch here for AKS(K8s) swiftv2 middleware to process IP configs requests
@@ -1659,7 +1660,7 @@ func InitializeCRDState(ctx context.Context, z *zap.Logger, httpRestService cns.
16591660
}
16601661
}()
16611662
logger.Printf("Initialized SyncHostNCVersion loop.")
1662-
return nil
1663+
return manager.GetClient(), nil
16631664
}
16641665

16651666
// getPodInfoByIPProvider returns a PodInfoByIPProvider that reads endpoint state from the configured source

0 commit comments

Comments
 (0)