@@ -17,6 +17,7 @@ import (
1717 "sigs.k8s.io/controller-runtime/pkg/healthz"
1818 logf "sigs.k8s.io/controller-runtime/pkg/log"
1919 metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
20+ "sigs.k8s.io/controller-runtime/pkg/webhook"
2021
2122 "github.com/vmware-tanzu/nsx-operator/pkg/apis/v1alpha1"
2223 "github.com/vmware-tanzu/nsx-operator/pkg/apis/v1alpha2"
@@ -35,6 +36,7 @@ import (
3536 "github.com/vmware-tanzu/nsx-operator/pkg/controllers/subnet"
3637 "github.com/vmware-tanzu/nsx-operator/pkg/controllers/subnetport"
3738 "github.com/vmware-tanzu/nsx-operator/pkg/controllers/subnetset"
39+ "github.com/vmware-tanzu/nsx-operator/pkg/controllers/vpcnetwork"
3840 "github.com/vmware-tanzu/nsx-operator/pkg/logger"
3941 "github.com/vmware-tanzu/nsx-operator/pkg/metrics"
4042 "github.com/vmware-tanzu/nsx-operator/pkg/nsx"
@@ -133,12 +135,13 @@ func StartNetworkInfoController(mgr ctrl.Manager, vpcService *vpc.VPCService) {
133135 }
134136}
135137
136- func StartNamespaceController (mgr ctrl.Manager , cf * config.NSXOperatorConfig , vpcService common.VPCServiceProvider ) {
138+ func StartNamespaceController (mgr ctrl.Manager , cf * config.NSXOperatorConfig , vpcService common.VPCServiceProvider , networkProvider vpcnetwork. VPCNetworkProvider ) {
137139 nsReconciler := & namespacecontroller.NamespaceReconciler {
138- Client : mgr .GetClient (),
139- Scheme : mgr .GetScheme (),
140- NSXConfig : cf ,
141- VPCService : vpcService ,
140+ Client : mgr .GetClient (),
141+ Scheme : mgr .GetScheme (),
142+ NSXConfig : cf ,
143+ VPCService : vpcService ,
144+ NetworkProvider : networkProvider ,
142145 }
143146
144147 if err := nsReconciler .Start (mgr ); err != nil {
@@ -149,14 +152,26 @@ func StartNamespaceController(mgr ctrl.Manager, cf *config.NSXOperatorConfig, vp
149152
150153func main () {
151154 log .Info ("starting NSX Operator" )
152- mgr , err := ctrl . NewManager ( ctrl . GetConfigOrDie (), ctrl.Options {
155+ mgrOptions := ctrl.Options {
153156 Scheme : scheme ,
154157 HealthProbeBindAddress : config .ProbeAddr ,
155158 Metrics : metricsserver.Options {BindAddress : config .MetricsAddr },
156159 LeaderElection : cf .HAEnabled (),
157160 LeaderElectionNamespace : nsxOperatorNamespace ,
158161 LeaderElectionID : "nsx-operator" ,
159- })
162+ }
163+
164+ enableWebhook := true
165+ if _ , err := os .Stat (config .WebhookCertDir ); errors .Is (err , os .ErrNotExist ) {
166+ log .Error (err , "server cert not found, disabling webhook server" , "cert" , config .WebhookCertDir )
167+ enableWebhook = false
168+ } else {
169+ mgrOptions .WebhookServer = webhook .NewServer (webhook.Options {
170+ Port : config .WebhookServerPort ,
171+ CertDir : config .WebhookCertDir ,
172+ })
173+ }
174+ mgr , err := ctrl .NewManager (ctrl .GetConfigOrDie (), mgrOptions )
160175 if err != nil {
161176 log .Error (err , "failed to init manager" )
162177 os .Exit (1 )
@@ -181,6 +196,10 @@ func main() {
181196 var vpcService * vpc.VPCService
182197
183198 if cf .CoeConfig .EnableVPCNetwork {
199+ if ! enableWebhook {
200+ log .Error (nil , "Webhook cert is not provided, can't filter out the CRs in a non-VPC namespace" )
201+ os .Exit (1 )
202+ }
184203 // Check NSX version for VPC networking mode
185204 if ! commonService .NSXClient .NSXCheckVersion (nsx .VPC ) {
186205 log .Error (nil , "VPC mode cannot be enabled if NSX version is lower than 4.1.1" )
@@ -218,28 +237,24 @@ func main() {
218237 os .Exit (1 )
219238 }
220239 // Start controllers which only supports VPC
240+ vpcNetworkProvider := vpcnetwork .StartNetworkController (mgr )
221241 StartNetworkInfoController (mgr , vpcService )
222- StartNamespaceController (mgr , cf , vpcService )
242+ StartNamespaceController (mgr , cf , vpcService , vpcNetworkProvider )
223243 // Start subnet/subnetset controller.
224244 if err := subnet .StartSubnetController (mgr , subnetService , subnetPortService , vpcService ); err != nil {
225245 os .Exit (1 )
226246 }
227- enableWebhook := true
228- if _ , err := os .Stat (config .WebhookCertDir ); errors .Is (err , os .ErrNotExist ) {
229- log .Error (err , "server cert not found, disabling webhook server" , "cert" , config .WebhookCertDir )
230- enableWebhook = false
231- }
232247 if err := subnetset .StartSubnetSetController (mgr , subnetService , subnetPortService , vpcService , enableWebhook ); err != nil {
233248 os .Exit (1 )
234249 }
235250
236251 node .StartNodeController (mgr , nodeService )
237252 staticroutecontroller .StartStaticRouteController (mgr , staticRouteService )
238253 subnetport .StartSubnetPortController (mgr , subnetPortService , subnetService , vpcService )
239- pod .StartPodController (mgr , subnetPortService , subnetService , vpcService , nodeService )
254+ pod .StartPodController (mgr , subnetPortService , subnetService , vpcService , nodeService , vpcNetworkProvider )
240255 StartIPPoolController (mgr , ipPoolService , vpcService )
241- networkpolicycontroller .StartNetworkPolicyController (mgr , commonService , vpcService )
242- service .StartServiceLbController (mgr , commonService )
256+ networkpolicycontroller .StartNetworkPolicyController (mgr , commonService , vpcService , vpcNetworkProvider )
257+ service .StartServiceLbController (mgr , commonService , vpcNetworkProvider )
243258 }
244259 // Start controllers which can run in non-VPC mode
245260 securitypolicycontroller .StartSecurityPolicyController (mgr , commonService , vpcService )
0 commit comments