diff --git a/charts/gardener-extension-admission-stackit/charts/runtime/templates/deployment.yaml b/charts/gardener-extension-admission-stackit/charts/runtime/templates/deployment.yaml index 3066aad6..29ad8db9 100644 --- a/charts/gardener-extension-admission-stackit/charts/runtime/templates/deployment.yaml +++ b/charts/gardener-extension-admission-stackit/charts/runtime/templates/deployment.yaml @@ -63,6 +63,9 @@ spec: {{- if .Values.flatcarImageVersion }} - --flatcar-image-version={{ .Values.flatcarImageVersion }} {{- end }} + {{- if .Values.allowApplicationLoadBalancerController }} + - --allow-application-load-balancer-controller={{ .Values.allowApplicationLoadBalancerController }} + {{- end }} - --health-bind-address=:{{ .Values.healthPort }} - --leader-election-id=gardener-extension-admission-stackit securityContext: diff --git a/charts/gardener-extension-admission-stackit/charts/runtime/values.yaml b/charts/gardener-extension-admission-stackit/charts/runtime/values.yaml index ee55d87a..1e80fc4a 100644 --- a/charts/gardener-extension-admission-stackit/charts/runtime/values.yaml +++ b/charts/gardener-extension-admission-stackit/charts/runtime/values.yaml @@ -22,6 +22,7 @@ kubeconfig: featureGates: {} # SomeGate: true flatcarImageVersion: "" +#allowApplicationLoadBalancerController: false #projectedKubeconfig: # baseMountPath: /var/run/secrets/gardener.cloud diff --git a/charts/gardener-extension-provider-stackit/templates/configmap.yaml b/charts/gardener-extension-provider-stackit/templates/configmap.yaml index 54c62ee6..b8b2da4c 100644 --- a/charts/gardener-extension-provider-stackit/templates/configmap.yaml +++ b/charts/gardener-extension-provider-stackit/templates/configmap.yaml @@ -29,6 +29,3 @@ data: registryCaches: {{- toYaml . | nindent 6 }} {{- end }} -{{- if .Values.config.deployALBIngressController }} - deployALBIngressController: {{ .Values.config.deployALBIngressController }} -{{- end }} diff --git a/charts/gardener-extension-provider-stackit/values.yaml b/charts/gardener-extension-provider-stackit/values.yaml index fb60b55d..337c5cd9 100644 --- a/charts/gardener-extension-provider-stackit/values.yaml +++ b/charts/gardener-extension-provider-stackit/values.yaml @@ -76,11 +76,10 @@ config: provisioner: block-storage.csi.stackit.cloud volumeBindingMode: WaitForFirstConsumer registryCaches: - # - server: reg.example.com - # cache: reg-cache.example.com - # caBundle: LS0tLS1C... #b64 encoded CA bundle, optional - # capabilities: ["pull", "resolve"] - # deployALBIngressController: true + # - server: reg.example.com + # cache: reg-cache.example.com + # caBundle: LS0tLS1C... #b64 encoded CA bundle, optional + # capabilities: ["pull", "resolve"] gardener: version: "" gardenlet: diff --git a/charts/internal/seed-controlplane/charts/stackit-alb-controller-manager/Chart.yaml b/charts/internal/seed-controlplane/charts/stackit-alb-controller-manager/Chart.yaml deleted file mode 100644 index bddaaec5..00000000 --- a/charts/internal/seed-controlplane/charts/stackit-alb-controller-manager/Chart.yaml +++ /dev/null @@ -1,4 +0,0 @@ -apiVersion: v1 -description: Helm chart for STACKIT stackit-alb-controller-manager -name: stackit-alb-controller-manager -version: 0.1.0 diff --git a/charts/internal/seed-controlplane/charts/stackit-alb-controller-manager/values.yaml b/charts/internal/seed-controlplane/charts/stackit-alb-controller-manager/values.yaml deleted file mode 100644 index 321616eb..00000000 --- a/charts/internal/seed-controlplane/charts/stackit-alb-controller-manager/values.yaml +++ /dev/null @@ -1,17 +0,0 @@ -replicas: 1 -config: - region: "" -# stackitNetworkID: foo -# stackitProjectID: foo -# region: foo -# applicationLBApiUrl: foo -# certificateApiUrl: foo -podAnnotations: {} -podLabels: {} -images: - stackit-alb-controller-manager: image:tag -vpa: - resourcePolicy: - maxAllowed: - cpu: 1 - memory: 512Mi diff --git a/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/Chart.yaml b/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/Chart.yaml new file mode 100644 index 00000000..c2cf00b0 --- /dev/null +++ b/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/Chart.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +description: Helm chart for STACKIT stackit-application-load-balancer-controller +name: stackit-application-load-balancer-controller +version: 0.1.0 diff --git a/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/templates/configmap.yaml b/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/templates/configmap.yaml new file mode 100644 index 00000000..e3f4ec1c --- /dev/null +++ b/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/templates/configmap.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: stackit-application-load-balancer-controller + namespace: {{ .Release.Namespace }} +data: + cloud.yaml: |- + global: + region: {{ .Values.config.global.region }} + projectId: {{ .Values.config.global.projectId }} + {{- with .Values.config.global.apiEndpoints }} + apiEndpoints: + {{- if .applicationLoadBalancerApi }} + applicationLoadBalancerApi: {{ .applicationLoadBalancerApi }} + {{- end }} + {{- if .applicationLoadBalancerCertificateApi }} + applicationLoadBalancerCertificateApi: {{ .applicationLoadBalancerCertificateApi }} + {{- end }} + {{- end }} + applicationLoadBalancer: + networkId: {{ .Values.config.applicationLoadBalancer.networkId }} diff --git a/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/templates/poddisruptionbudget.yaml b/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/templates/poddisruptionbudget.yaml new file mode 100644 index 00000000..09a23e85 --- /dev/null +++ b/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/templates/poddisruptionbudget.yaml @@ -0,0 +1,15 @@ +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: stackit-application-load-balancer-controller + namespace: {{ .Release.Namespace }} + labels: + app: kubernetes + role: stackit-application-load-balancer-controller +spec: + maxUnavailable: 1 + selector: + matchLabels: + app: kubernetes + role: stackit-application-load-balancer-controller + unhealthyPodEvictionPolicy: AlwaysAllow diff --git a/charts/internal/seed-controlplane/charts/stackit-alb-controller-manager/templates/alb-controller-manager.yaml b/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/templates/stackit-application-load-balancer-controller.yaml similarity index 72% rename from charts/internal/seed-controlplane/charts/stackit-alb-controller-manager/templates/alb-controller-manager.yaml rename to charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/templates/stackit-application-load-balancer-controller.yaml index 6ab8baf8..6470e100 100644 --- a/charts/internal/seed-controlplane/charts/stackit-alb-controller-manager/templates/alb-controller-manager.yaml +++ b/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/templates/stackit-application-load-balancer-controller.yaml @@ -1,11 +1,11 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: stackit-alb-controller-manager + name: stackit-application-load-balancer-controller namespace: {{ .Release.Namespace }} labels: app: kubernetes - role: stackit-alb-controller-manager + role: stackit-application-load-balancer-controller high-availability-config.resources.gardener.cloud/type: controller spec: replicas: {{ .Values.replicas }} @@ -13,7 +13,7 @@ spec: selector: matchLabels: app: kubernetes - role: stackit-alb-controller-manager + role: stackit-application-load-balancer-controller template: metadata: {{- if .Values.podAnnotations }} @@ -23,7 +23,7 @@ spec: labels: gardener.cloud/role: controlplane app: kubernetes - role: stackit-alb-controller-manager + role: stackit-application-load-balancer-controller networking.gardener.cloud/to-dns: allowed networking.gardener.cloud/to-public-networks: allowed networking.gardener.cloud/to-private-networks: allowed @@ -36,35 +36,26 @@ spec: automountServiceAccountToken: false priorityClassName: gardener-system-300 containers: - - name: stackit-alb-controller-manager - image: {{ index .Values.images "stackit-alb-controller-manager" }} + - name: stackit-application-load-balancer-controller + image: {{ index .Values.images "stackit-application-load-balancer-controller" }} args: - --kubeconfig=/var/run/secrets/gardener.cloud/shoot/generic-kubeconfig/kubeconfig - --leader-elect=true + - --metrics-bind-address=:{{ .Values.metricsPort }} - --leader-election-namespace=kube-system - - --leader-election-id=stackit-alb-controller-manager + - --leader-election-id=stackit-application-load-balancer-controller + - --cloud-config=/etc/config/cloud.yaml env: - name: STACKIT_SERVICE_ACCOUNT_KEY_PATH value: /etc/serviceaccount/serviceaccount.json - - name: STACKIT_REGION - value: {{ .Values.config.region }} - - name: PROJECT_ID - value: {{ .Values.config.stackitProjectID }} - - name: NETWORK_ID - value: {{ .Values.config.stackitNetworkID }} - -{{- if .Values.config.tokenUrl }} +{{- if .Values.tokenEndpoint }} - name: STACKIT_TOKEN_BASEURL - value: {{ .Values.config.tokenUrl }} -{{- end }} -{{- if .Values.config.applicationLBApiUrl }} - - name: STACKIT_LOAD_BALANCER_API_ALB_URL - value: {{ .Values.config.applicationLBApiUrl }} -{{- end }} -{{- if .Values.config.certificateApiUrl }} - - name: STACKIT_LOAD_BALANCER_API_CERT_URL - value: {{ .Values.config.certificateApiUrl }} + value: {{ .Values.tokenEndpoint }} {{- end }} + ports: + - containerPort: {{ .Values.metricsPort }} + name: metrics + protocol: TCP {{- if .Values.resources }} resources: {{ toYaml .Values.resources | indent 10 }} @@ -73,6 +64,8 @@ spec: - mountPath: /var/run/secrets/gardener.cloud/shoot/generic-kubeconfig name: kubeconfig readOnly: true + - mountPath: /etc/config + name: config-volume - mountPath: /etc/serviceaccount name: sa-secret - mountPath: /etc/ssl/certs/keystone-ca.crt @@ -80,6 +73,10 @@ spec: subPath: keystone-ca.crt readOnly: true volumes: + - name: config-volume + configMap: + defaultMode: 420 + name: stackit-application-load-balancer-controller - name: sa-secret secret: defaultMode: 420 diff --git a/charts/internal/seed-controlplane/charts/stackit-alb-controller-manager/templates/vpa.yaml b/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/templates/vpa.yaml similarity index 73% rename from charts/internal/seed-controlplane/charts/stackit-alb-controller-manager/templates/vpa.yaml rename to charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/templates/vpa.yaml index 28ca5342..27137bf1 100644 --- a/charts/internal/seed-controlplane/charts/stackit-alb-controller-manager/templates/vpa.yaml +++ b/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/templates/vpa.yaml @@ -1,18 +1,18 @@ apiVersion: autoscaling.k8s.io/v1 kind: VerticalPodAutoscaler metadata: - name: stackit-alb-controller-manager-vpa + name: stackit-application-load-balancer-controller namespace: {{ .Release.Namespace }} spec: targetRef: apiVersion: apps/v1 kind: Deployment - name: stackit-alb-controller-manager + name: stackit-application-load-balancer-controller updatePolicy: updateMode: Auto resourcePolicy: containerPolicies: - - containerName: stackit-alb-controller-manager + - containerName: stackit-application-load-balancer-controller minAllowed: memory: 80M maxAllowed: diff --git a/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/values.yaml b/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/values.yaml new file mode 100644 index 00000000..eb6dac91 --- /dev/null +++ b/charts/internal/seed-controlplane/charts/stackit-application-load-balancer-controller/values.yaml @@ -0,0 +1,21 @@ +replicas: 1 +config: + global: + region: "" + projectId: "" + # apiEndpoints: + # applicationLoadBalancerApi: "foo" + # applicationLoadBalancerCertificateApi: "foo" + applicationLoadBalancer: + networkId: "" +#tokenEndpoint: "foo" +metricsPort: 9090 +podAnnotations: {} +podLabels: {} +images: + stackit-application-load-balancer-controller: image:tag +vpa: + resourcePolicy: + maxAllowed: + cpu: 1 + memory: 512Mi diff --git a/charts/internal/seed-controlplane/requirements.yaml b/charts/internal/seed-controlplane/requirements.yaml index b672cf39..7d17325f 100644 --- a/charts/internal/seed-controlplane/requirements.yaml +++ b/charts/internal/seed-controlplane/requirements.yaml @@ -15,10 +15,10 @@ dependencies: version: 0.1.0 repository: http://localhost:10191 condition: stackit-blockstorage-csi-driver.enabled -- name: stackit-alb-controller-manager +- name: stackit-application-load-balancer-controller repository: http://localhost:10191 version: 0.1.0 - condition: stackit-alb-controller-manager.enabled + condition: stackit-application-load-balancer-controller.enabled - name: stackit-pod-identity-webhook repository: http://localhost:10191 version: 0.1.0 diff --git a/charts/internal/seed-controlplane/values.yaml b/charts/internal/seed-controlplane/values.yaml index 8cf3a7ad..e561e5c2 100644 --- a/charts/internal/seed-controlplane/values.yaml +++ b/charts/internal/seed-controlplane/values.yaml @@ -6,7 +6,7 @@ stackit-cloud-controller-manager: enabled: false csi-driver-controller: enabled: true -stackit-alb-controller-manager: +stackit-application-load-balancer-controller: enabled: false stackit-pod-identity-webhook: - enabled: false \ No newline at end of file + enabled: false diff --git a/cmd/gardener-extension-admission-stackit/app/app.go b/cmd/gardener-extension-admission-stackit/app/app.go index 9815188d..8c97d6fb 100644 --- a/cmd/gardener-extension-admission-stackit/app/app.go +++ b/cmd/gardener-extension-admission-stackit/app/app.go @@ -27,6 +27,7 @@ import ( admissioncmd "github.com/stackitcloud/gardener-extension-provider-stackit/v2/pkg/admission/cmd" "github.com/stackitcloud/gardener-extension-provider-stackit/v2/pkg/admission/mutator" + "github.com/stackitcloud/gardener-extension-provider-stackit/v2/pkg/admission/validator" stackitinstall "github.com/stackitcloud/gardener-extension-provider-stackit/v2/pkg/apis/stackit/install" "github.com/stackitcloud/gardener-extension-provider-stackit/v2/pkg/feature" providerstackit "github.com/stackitcloud/gardener-extension-provider-stackit/v2/pkg/stackit" @@ -64,9 +65,12 @@ func NewAdmissionCommand(ctx context.Context) *cobra.Command { webhookSwitches, ) + admissionOpts = &admissioncmd.ConfigOptions{} + aggOption = controllercmd.NewOptionAggregator( restOpts, mgrOpts, + admissionOpts, webhookOptions, ) ) @@ -93,6 +97,9 @@ func NewAdmissionCommand(ctx context.Context) *cobra.Command { managerOptions := mgrOpts.Completed().Options() + admissionConfig := admissionOpts.Completed() + admissionConfig.ApplyAllowApplicationLoadBalancerController(&validator.DefaultAddOptions.AllowApplicationLoadBalancerController) + // Operators can enable the source cluster option via SOURCE_CLUSTER environment variable. // In-cluster config will be used if no SOURCE_KUBECONFIG is specified. // diff --git a/cmd/gardener-extension-provider-stackit/app/app.go b/cmd/gardener-extension-provider-stackit/app/app.go index 92d1770f..50d56e7b 100644 --- a/cmd/gardener-extension-provider-stackit/app/app.go +++ b/cmd/gardener-extension-provider-stackit/app/app.go @@ -190,11 +190,9 @@ func NewControllerManagerCommand(ctx context.Context) *cobra.Command { configFileOpts.Completed().ApplyETCDStorage(&stackitseedprovider.DefaultAddOptions.ETCDStorage) configFileOpts.Completed().ApplyHealthCheckConfig(&healthcheck.DefaultAddOptions.HealthCheckConfig) configFileOpts.Completed().ApplyRegistryCaches(&stackitwebhookcontrolplane.DefaultAddOptions.RegistryCaches) - configFileOpts.Completed().ApplyDeployALBIngressController(&stackitcontrolplane.DeployALBIngressController) configFileOpts.Completed().ApplyCustomLabelDomain(&stackitworker.DefaultAddOptions.CustomLabelDomain) configFileOpts.Completed().ApplyCustomLabelDomain(&stackitcontrolplane.DefaultAddOptions.CustomLabelDomain) configFileOpts.Completed().ApplyCustomLabelDomain(&infrastructure.DefaultAddOptions.CustomLabelDomain) - log.Info("DeployALBIngressController?", "deploy", configFileOpts.Completed().Config.DeployALBIngressController) bastionCtrlOpts.Completed().Apply(&stackitbastion.DefaultAddOptions.Controller) configFileOpts.Completed().ApplyCustomLabelDomain(&stackitbastion.DefaultAddOptions.CustomLabelDomain) diff --git a/hack/api-reference/api.md b/hack/api-reference/api.md index de6c66c1..2313f7b7 100644 --- a/hack/api-reference/api.md +++ b/hack/api-reference/api.md @@ -81,14 +81,14 @@ string
loadbalancerCertificate
+applicationLoadBalancerCertificate
string
LoadbalancerCertificate is the Endpoint of the LoadBalancerCertificate API.
+ApplicationLoadBalancerCertificate is the Endpoint of the ApplicationLoadBalancerCertificate API.
+ApplicationLoadBalancerConfig defines the configuration for the +Application Load Balancer (ALB) integration. +
+| Field | +Description | +
|---|---|
+enabled
+
+boolean
+
+ |
+
+ Enabled specifies whether the Application Load Balancer is activated. + |
+
+ingress
+
+ApplicationLoadBalancerConfigIngress
+
+ |
+
+ Ingress contains the configuration specific to the ALB's Ingress controller. + |
+
+(Appears on:ApplicationLoadBalancerConfig) +
+ ++ApplicationLoadBalancerConfigIngress defines the settings for the +Application Load Balancer Ingress resources.
|
-
+ Enabled specifies whether the Ingress controller functionality |
diff --git a/hack/api-reference/config.md b/hack/api-reference/config.md
index bc0036a3..b71839ca 100644
--- a/hack/api-reference/config.md
+++ b/hack/api-reference/config.md
@@ -76,17 +76,6 @@ ControllerConfiguration defines the configuration for the STACKIT provider.
|
-deployALBIngressController
-
-boolean
-
- |
-
- DeployALBIngressController - |
-
customLabelDomain
string
diff --git a/imagevector/images.go b/imagevector/images.go
index c7e393d5..9d8cdeb8 100644
--- a/imagevector/images.go
+++ b/imagevector/images.go
@@ -31,8 +31,8 @@ const (
ImageNameMachineControllerManagerProviderOpenstack = "machine-controller-manager-provider-openstack"
// ImageNameMachineControllerManagerProviderStackit is a constant for an image in the image vector with name 'machine-controller-manager-provider-stackit'.
ImageNameMachineControllerManagerProviderStackit = "machine-controller-manager-provider-stackit"
- // ImageNameStackitAlbControllerManager is a constant for an image in the image vector with name 'stackit-alb-controller-manager'.
- ImageNameStackitAlbControllerManager = "stackit-alb-controller-manager"
+ // ImageNameStackitApplicationLoadBalancerController is a constant for an image in the image vector with name 'stackit-application-load-balancer-controller'.
+ ImageNameStackitApplicationLoadBalancerController = "stackit-application-load-balancer-controller"
// ImageNameStackitCloudControllerManager is a constant for an image in the image vector with name 'stackit-cloud-controller-manager'.
ImageNameStackitCloudControllerManager = "stackit-cloud-controller-manager"
// ImageNameStackitPodIdentityWebhook is a constant for an image in the image vector with name 'stackit-pod-identity-webhook'.
diff --git a/imagevector/images.yaml b/imagevector/images.yaml
index 5df95fc1..6253dfad 100644
--- a/imagevector/images.yaml
+++ b/imagevector/images.yaml
@@ -133,9 +133,11 @@ images:
repository: registry.k8s.io/sig-storage/livenessprobe
tag: "v2.18.0"
-- name: stackit-alb-controller-manager
- repository: reg3.infra.ske.eu01.stackit.cloud/temp/alb-controller-manager
- tag: "1245"
+- name: stackit-application-load-balancer-controller
+ sourceRepository: github.com/stackitcloud/application-load-balancer-controller
+ repository: ghcr.io/stackitcloud/application-load-balancer-controller-dev
+ tag: "albc"
+
- name: stackit-pod-identity-webhook
sourceRepository: github.com/stackitcloud/stackit-pod-identity-webhook
repository: ghcr.io/stackitcloud/stackit-pod-identity-webhook
diff --git a/pkg/admission/cmd/options.go b/pkg/admission/cmd/options.go
index be935c93..38d23988 100644
--- a/pkg/admission/cmd/options.go
+++ b/pkg/admission/cmd/options.go
@@ -2,6 +2,7 @@ package cmd
import (
webhookcmd "github.com/gardener/gardener/extensions/pkg/webhook/cmd"
+ "github.com/spf13/pflag"
"github.com/stackitcloud/gardener-extension-provider-stackit/v2/pkg/admission/mutator"
"github.com/stackitcloud/gardener-extension-provider-stackit/v2/pkg/admission/validator"
@@ -14,3 +15,45 @@ func GardenWebhookSwitchOptions() *webhookcmd.SwitchOptions {
webhookcmd.Switch(mutator.Name, mutator.New),
)
}
+
+// ConfigOptions are command line options that can be set for admission webhooks.
+type ConfigOptions struct {
+ // AllowApplicationLoadBalancerController configures if the application load balancer controller can be used in the ControlPlaneConfig.
+ AllowApplicationLoadBalancerController bool
+
+ config *Config
+}
+
+// Config is a completed admission configuration.
+type Config struct {
+ // AllowApplicationLoadBalancerController configures if the application load balancer controller can be used in the ControlPlaneConfig.
+ AllowApplicationLoadBalancerController bool
+}
+
+// AddFlags implements Flagger.AddFlags.
+func (c *ConfigOptions) AddFlags(fs *pflag.FlagSet) {
+ fs.BoolVar(
+ &c.AllowApplicationLoadBalancerController,
+ "allow-application-load-balancer-controller",
+ false,
+ "Configures if the application load balancer controller can be used in the ControlPlaneConfig.",
+ )
+}
+
+// Complete implements RESTCompleter.Complete.
+func (c *ConfigOptions) Complete() error {
+ c.config = &Config{
+ AllowApplicationLoadBalancerController: c.AllowApplicationLoadBalancerController,
+ }
+ return nil
+}
+
+// Completed returns the completed Config. Only call this if `Complete` was successful.
+func (c *ConfigOptions) Completed() *Config {
+ return c.config
+}
+
+// ApplyAllowApplicationLoadBalancerController sets the values of this Config in the given config.AllowApplicationLoadBalancerController.
+func (c *Config) ApplyAllowApplicationLoadBalancerController(cfg *bool) {
+ *cfg = c.AllowApplicationLoadBalancerController
+}
diff --git a/pkg/admission/validator/shoot.go b/pkg/admission/validator/shoot.go
index 8a4c031b..04e28eea 100644
--- a/pkg/admission/validator/shoot.go
+++ b/pkg/admission/validator/shoot.go
@@ -20,11 +20,15 @@ import (
)
// NewShootValidator returns a new instance of a shoot validator.
-func NewShootValidator(mgr manager.Manager) extensionswebhook.Validator {
- return &shoot{}
+func NewShootValidator(mgr manager.Manager, allowApplicationLoadBalancerController bool) extensionswebhook.Validator {
+ return &shoot{
+ allowApplicationLoadBalancerController: allowApplicationLoadBalancerController,
+ }
}
-type shoot struct{}
+type shoot struct {
+ allowApplicationLoadBalancerController bool
+}
// Validate validates the given shoot objects.
func (s *shoot) Validate(_ context.Context, newObj, oldObj client.Object) error {
@@ -45,7 +49,7 @@ func (s *shoot) Validate(_ context.Context, newObj, oldObj client.Object) error
allErrs := field.ErrorList{}
- allErrs = append(allErrs, stackitvalidation.ValidateControlPlaneConfig(cpConfig, shoot.Spec.Kubernetes.Version, field.NewPath("spec").Child("provider").Child("controlPlaneConfig"))...)
+ allErrs = append(allErrs, stackitvalidation.ValidateControlPlaneConfig(cpConfig, shoot.Spec.Kubernetes.Version, s.allowApplicationLoadBalancerController, field.NewPath("spec").Child("provider").Child("controlPlaneConfig"))...)
allErrs = append(allErrs, stackitvalidation.ValidateInfrastructureConfig(infraConfig, ptr.Deref(shoot.Spec.Networking, core.Networking{}).Nodes, field.NewPath("spec").Child("provider").Child("infrastructureConfig"))...)
diff --git a/pkg/admission/validator/shoot_test.go b/pkg/admission/validator/shoot_test.go
index b63549e2..051a6994 100644
--- a/pkg/admission/validator/shoot_test.go
+++ b/pkg/admission/validator/shoot_test.go
@@ -49,7 +49,7 @@ var _ = Describe("NamespacedCloudProfile Validator", func() {
Client: fakeClient,
Scheme: scheme,
}
- shootValidator = validator.NewShootValidator(fakeManager)
+ shootValidator = validator.NewShootValidator(fakeManager, true)
infrastructureConfig = v1alpha1.InfrastructureConfig{
FloatingPoolName: "floating-pool",
diff --git a/pkg/admission/validator/webhook.go b/pkg/admission/validator/webhook.go
index 0a0321f5..7a303c95 100644
--- a/pkg/admission/validator/webhook.go
+++ b/pkg/admission/validator/webhook.go
@@ -15,6 +15,17 @@ const (
Name = "validator"
)
+var (
+ // DefaultAddOptions are the default AddOptions for configuring the validator.
+ DefaultAddOptions = AddOptions{}
+)
+
+// AddOptions are options to apply when adding the STACKIT admission webhook to the manager.
+type AddOptions struct {
+ // AllowApplicationLoadBalancerController configures if the application load balancer controller can be used in the ControlPlaneConfig.
+ AllowApplicationLoadBalancerController bool
+}
+
var logger = log.Log.WithName("stackit-validator-webhook")
// New creates a new webhook that validates Shoot, CloudProfile, NamespacedCloudProfile, SecretBinding and CredentialsBinding resources.
@@ -25,9 +36,9 @@ func New(mgr manager.Manager) (*extensionswebhook.Webhook, error) {
Name: Name,
Path: "/webhooks/validate",
Validators: map[extensionswebhook.Validator][]extensionswebhook.Type{
- NewCloudProfileValidator(mgr): {{Obj: &core.CloudProfile{}}},
- NewShootValidator(mgr): {{Obj: &core.Shoot{}}},
- NewNamespacedCloudProfileValidator(mgr): {{Obj: &core.NamespacedCloudProfile{}}},
+ NewCloudProfileValidator(mgr): {{Obj: &core.CloudProfile{}}},
+ NewShootValidator(mgr, DefaultAddOptions.AllowApplicationLoadBalancerController): {{Obj: &core.Shoot{}}},
+ NewNamespacedCloudProfileValidator(mgr): {{Obj: &core.NamespacedCloudProfile{}}},
},
Target: extensionswebhook.TargetSeed,
ObjectSelector: &metav1.LabelSelector{
diff --git a/pkg/apis/config/types.go b/pkg/apis/config/types.go
index 4eed9a47..933affb5 100644
--- a/pkg/apis/config/types.go
+++ b/pkg/apis/config/types.go
@@ -31,9 +31,6 @@ type ControllerConfiguration struct {
// Deprecated: will be removed in a future version
RegistryCaches []RegistryCacheConfiguration
- // DeployALBIngressController
- DeployALBIngressController bool
-
// CustomLabelDomain is the domain prefix for custom labels applied to STACKIT infrastructure resources.
// For example, cluster labels will use " |