Skip to content

Commit 47569d7

Browse files
authored
Merge pull request #995 from spectrocloud/feat/webhook-service-account
[PCP-5713] Configure webhooks to run without a service account
2 parents 94f496d + c04ddc3 commit 47569d7

File tree

1 file changed

+57
-51
lines changed

1 file changed

+57
-51
lines changed

main.go

Lines changed: 57 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"github.com/spf13/pflag"
3131
"k8s.io/apimachinery/pkg/runtime"
3232
cgscheme "k8s.io/client-go/kubernetes/scheme"
33+
"k8s.io/client-go/rest"
3334
"k8s.io/client-go/tools/leaderelection/resourcelock"
3435
cgrecord "k8s.io/client-go/tools/record"
3536
"k8s.io/component-base/logs"
@@ -42,6 +43,10 @@ import (
4243
"sigs.k8s.io/controller-runtime/pkg/controller"
4344
"sigs.k8s.io/controller-runtime/pkg/webhook"
4445

46+
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
47+
expclusterv1 "sigs.k8s.io/cluster-api/exp/api/v1beta1"
48+
"sigs.k8s.io/cluster-api/util/flags"
49+
4550
// +kubebuilder:scaffold:imports
4651
infrav1beta1 "sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta1"
4752
infrav1 "sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta2"
@@ -65,9 +70,6 @@ import (
6570
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/logger"
6671
"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/record"
6772
"sigs.k8s.io/cluster-api-provider-aws/v2/version"
68-
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
69-
expclusterv1 "sigs.k8s.io/cluster-api/exp/api/v1beta1"
70-
"sigs.k8s.io/cluster-api/util/flags"
7173
)
7274

7375
var (
@@ -171,36 +173,46 @@ func main() {
171173

172174
ctx := ctrl.SetupSignalHandler()
173175

174-
restConfig := ctrl.GetConfigOrDie()
175-
restConfig.UserAgent = "cluster-api-provider-aws-controller"
176-
mgr, err := ctrl.NewManager(restConfig, ctrl.Options{
177-
Scheme: scheme,
178-
Metrics: *metricsOptions,
179-
LeaderElection: enableLeaderElection,
180-
LeaseDuration: &leaderElectionLeaseDuration,
181-
RenewDeadline: &leaderElectionRenewDeadline,
182-
RetryPeriod: &leaderElectionRetryPeriod,
183-
LeaderElectionResourceLock: resourcelock.LeasesResourceLock,
184-
LeaderElectionID: "controller-leader-elect-capa",
185-
LeaderElectionNamespace: leaderElectionNamespace,
186-
Cache: cache.Options{
187-
DefaultNamespaces: watchNamespaces,
188-
SyncPeriod: &syncPeriod,
189-
},
176+
ctrlOpts := ctrl.Options{
177+
Scheme: scheme,
178+
Metrics: *metricsOptions,
190179
WebhookServer: webhook.NewServer(webhook.Options{
191180
Port: webhookPort,
192181
CertDir: webhookCertDir,
193182
}),
194183
EventBroadcaster: broadcaster,
195184
HealthProbeBindAddress: healthAddr,
196-
})
185+
}
186+
187+
var restConfig *rest.Config
188+
if webhookPort == 0 {
189+
restConfig = ctrl.GetConfigOrDie()
190+
restConfig.UserAgent = "cluster-api-provider-aws-controller"
191+
ctrlOpts.LeaderElection = enableLeaderElection
192+
ctrlOpts.LeaseDuration = &leaderElectionLeaseDuration
193+
ctrlOpts.RenewDeadline = &leaderElectionRenewDeadline
194+
ctrlOpts.RetryPeriod = &leaderElectionRetryPeriod
195+
ctrlOpts.Cache = cache.Options{
196+
DefaultNamespaces: watchNamespaces,
197+
SyncPeriod: &syncPeriod,
198+
}
199+
ctrlOpts.LeaderElectionResourceLock = resourcelock.LeasesResourceLock
200+
ctrlOpts.LeaderElectionID = "controller-leader-elect-capa"
201+
ctrlOpts.LeaderElectionNamespace = leaderElectionNamespace
202+
} else {
203+
restConfig = &rest.Config{}
204+
}
205+
206+
mgr, err := ctrl.NewManager(restConfig, ctrlOpts)
197207
if err != nil {
198208
setupLog.Error(err, "unable to start manager")
199209
os.Exit(1)
200210
}
201211

202212
// Initialize event recorder.
203-
record.InitFromRecorder(mgr.GetEventRecorderFor("aws-controller"))
213+
if webhookPort == 0 {
214+
record.InitFromRecorder(mgr.GetEventRecorderFor("aws-controller"))
215+
}
204216

205217
setupLog.Info(fmt.Sprintf("feature gates: %+v\n", feature.Gates))
206218

@@ -326,30 +338,8 @@ func setupReconcilersAndWebhooks(ctx context.Context, mgr ctrl.Manager, awsServi
326338
setupLog.Error(err, "unable to create controller", "controller", "AWSCluster")
327339
os.Exit(1)
328340
}
329-
}
330341

331-
if feature.Gates.Enabled(feature.MachinePool) {
332-
setupLog.Debug("enabling machine pool controller and webhook")
333-
if webhookPort == 0 {
334-
if err := (&expcontrollers.AWSMachinePoolReconciler{
335-
Client: mgr.GetClient(),
336-
Recorder: mgr.GetEventRecorderFor("awsmachinepool-controller"),
337-
WatchFilterValue: watchFilterValue,
338-
TagUnmanagedNetworkResources: feature.Gates.Enabled(feature.TagUnmanagedNetworkResources),
339-
}).SetupWithManager(ctx, mgr, controller.Options{MaxConcurrentReconciles: instanceStateConcurrency, RecoverPanic: ptr.To[bool](true)}); err != nil {
340-
setupLog.Error(err, "unable to create controller", "controller", "AWSMachinePool")
341-
os.Exit(1)
342-
}
343-
} else {
344-
if err := (&expinfrav1.AWSMachinePool{}).SetupWebhookWithManager(mgr); err != nil {
345-
setupLog.Error(err, "unable to create webhook", "webhook", "AWSMachinePool")
346-
os.Exit(1)
347-
}
348-
}
349-
}
350-
351-
if feature.Gates.Enabled(feature.EventBridgeInstanceState) {
352-
if webhookPort == 0 {
342+
if feature.Gates.Enabled(feature.EventBridgeInstanceState) {
353343
setupLog.Info("EventBridge notifications enabled. enabling AWSInstanceStateController")
354344
if err := (&instancestate.AwsInstanceStateReconciler{
355345
Client: mgr.GetClient(),
@@ -361,11 +351,9 @@ func setupReconcilersAndWebhooks(ctx context.Context, mgr ctrl.Manager, awsServi
361351
os.Exit(1)
362352
}
363353
}
364-
}
365354

366-
if feature.Gates.Enabled(feature.AutoControllerIdentityCreator) {
367-
setupLog.Info("AutoControllerIdentityCreator enabled")
368-
if webhookPort == 0 {
355+
if feature.Gates.Enabled(feature.AutoControllerIdentityCreator) {
356+
setupLog.Info("AutoControllerIdentityCreator enabled")
369357
if err := (&controlleridentitycreator.AWSControllerIdentityReconciler{
370358
Client: mgr.GetClient(),
371359
Log: ctrl.Log.WithName("controllers").WithName("AWSControllerIdentity"),
@@ -376,9 +364,26 @@ func setupReconcilersAndWebhooks(ctx context.Context, mgr ctrl.Manager, awsServi
376364
os.Exit(1)
377365
}
378366
}
379-
}
380-
381-
if webhookPort != 0 {
367+
if feature.Gates.Enabled(feature.MachinePool) {
368+
setupLog.Debug("enabling machine pool controller and webhook")
369+
if err := (&expcontrollers.AWSMachinePoolReconciler{
370+
Client: mgr.GetClient(),
371+
Recorder: mgr.GetEventRecorderFor("awsmachinepool-controller"),
372+
WatchFilterValue: watchFilterValue,
373+
TagUnmanagedNetworkResources: feature.Gates.Enabled(feature.TagUnmanagedNetworkResources),
374+
}).SetupWithManager(ctx, mgr, controller.Options{MaxConcurrentReconciles: instanceStateConcurrency, RecoverPanic: ptr.To[bool](true)}); err != nil {
375+
setupLog.Error(err, "unable to create controller", "controller", "AWSMachinePool")
376+
os.Exit(1)
377+
}
378+
}
379+
} else {
380+
if feature.Gates.Enabled(feature.MachinePool) {
381+
setupLog.Debug("enabling machine pool controller and webhook")
382+
if err := (&expinfrav1.AWSMachinePool{}).SetupWebhookWithManager(mgr); err != nil {
383+
setupLog.Error(err, "unable to create webhook", "webhook", "AWSMachinePool")
384+
os.Exit(1)
385+
}
386+
}
382387
if err := (&infrav1.AWSMachineTemplateWebhook{}).SetupWebhookWithManager(mgr); err != nil {
383388
setupLog.Error(err, "unable to create webhook", "webhook", "AWSMachineTemplate")
384389
os.Exit(1)
@@ -408,6 +413,7 @@ func setupReconcilersAndWebhooks(ctx context.Context, mgr ctrl.Manager, awsServi
408413
os.Exit(1)
409414
}
410415
}
416+
411417
}
412418

413419
func setupEKSReconcilersAndWebhooks(ctx context.Context, mgr ctrl.Manager, awsServiceEndpoints []scope.ServiceEndpoint,

0 commit comments

Comments
 (0)