From 4ddd3411849a01abe871145d01861146b2093f57 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Tue, 27 Feb 2024 18:23:28 -0500 Subject: [PATCH] feat: add initial support for keda authentication --- plugins/scheduler-k3s/functions.go | 12 +++++++ plugins/scheduler-k3s/template.go | 26 +++++++------- ...ed-object.yaml => keda-scaled-object.yaml} | 8 ++--- .../templates/chart/keda-secret.yaml | 32 +++++++++++++++++ .../chart/keda-trigger-authentication.yaml | 34 +++++++++++++++++++ plugins/scheduler-k3s/triggers.go | 2 +- 6 files changed, 97 insertions(+), 17 deletions(-) rename plugins/scheduler-k3s/templates/chart/{scaled-object.yaml => keda-scaled-object.yaml} (87%) create mode 100644 plugins/scheduler-k3s/templates/chart/keda-secret.yaml create mode 100644 plugins/scheduler-k3s/templates/chart/keda-trigger-authentication.yaml diff --git a/plugins/scheduler-k3s/functions.go b/plugins/scheduler-k3s/functions.go index dbacf8a53..5efa8947e 100644 --- a/plugins/scheduler-k3s/functions.go +++ b/plugins/scheduler-k3s/functions.go @@ -404,6 +404,18 @@ func getAnnotations(appName string, processType string) (ProcessAnnotations, err } annotations.KedaScalingObjectAnnotations = kedaScalingObjectAnnotations + kedaSecretAnnotations, err := getAnnotation(appName, processType, "keda_secret") + if err != nil { + return annotations, err + } + annotations.KedaSecretAnnotations = kedaSecretAnnotations + + kedaTriggerAuthenticationAnnotations, err := getAnnotation(appName, processType, "keda_trigger_authentication") + if err != nil { + return annotations, err + } + annotations.KedaTriggerAuthenticationAnnotations = kedaTriggerAuthenticationAnnotations + podAnnotations, err := getAnnotation(appName, processType, "pod") if err != nil { return annotations, err diff --git a/plugins/scheduler-k3s/template.go b/plugins/scheduler-k3s/template.go index 6db52c32f..b3aea7001 100644 --- a/plugins/scheduler-k3s/template.go +++ b/plugins/scheduler-k3s/template.go @@ -70,18 +70,20 @@ type ProcessValues struct { } type ProcessAnnotations struct { - CertificateAnnotations map[string]string `yaml:"certificate,omitempty"` - CronJobAnnotations map[string]string `yaml:"cronjob,omitempty"` - DeploymentAnnotations map[string]string `yaml:"deployment,omitempty"` - IngressAnnotations map[string]string `yaml:"ingress,omitempty"` - JobAnnotations map[string]string `yaml:"job,omitempty"` - KedaScalingObjectAnnotations map[string]string `yaml:"keda_scaled_object,omitempty"` - PodAnnotations map[string]string `yaml:"pod,omitempty"` - SecretAnnotations map[string]string `yaml:"secret,omitempty"` - ServiceAccountAnnotations map[string]string `yaml:"serviceaccount,omitempty"` - ServiceAnnotations map[string]string `yaml:"service,omitempty"` - TraefikIngressRouteAnnotations map[string]string `yaml:"traefik_ingressroute,omitempty"` - TraefikMiddlewareAnnotations map[string]string `yaml:"traefik_middleware,omitempty"` + CertificateAnnotations map[string]string `yaml:"certificate,omitempty"` + CronJobAnnotations map[string]string `yaml:"cronjob,omitempty"` + DeploymentAnnotations map[string]string `yaml:"deployment,omitempty"` + IngressAnnotations map[string]string `yaml:"ingress,omitempty"` + JobAnnotations map[string]string `yaml:"job,omitempty"` + KedaScalingObjectAnnotations map[string]string `yaml:"keda_scaled_object,omitempty"` + KedaSecretAnnotations map[string]string `yaml:"keda_secret,omitempty"` + KedaTriggerAuthenticationAnnotations map[string]string `yaml:"keda_trigger_authentication,omitempty"` + PodAnnotations map[string]string `yaml:"pod,omitempty"` + SecretAnnotations map[string]string `yaml:"secret,omitempty"` + ServiceAccountAnnotations map[string]string `yaml:"serviceaccount,omitempty"` + ServiceAnnotations map[string]string `yaml:"service,omitempty"` + TraefikIngressRouteAnnotations map[string]string `yaml:"traefik_ingressroute,omitempty"` + TraefikMiddlewareAnnotations map[string]string `yaml:"traefik_middleware,omitempty"` } // ProcessAutoscaling contains the autoscaling configuration for a process diff --git a/plugins/scheduler-k3s/templates/chart/scaled-object.yaml b/plugins/scheduler-k3s/templates/chart/keda-scaled-object.yaml similarity index 87% rename from plugins/scheduler-k3s/templates/chart/scaled-object.yaml rename to plugins/scheduler-k3s/templates/chart/keda-scaled-object.yaml index af66f19ab..7df2f250d 100644 --- a/plugins/scheduler-k3s/templates/chart/scaled-object.yaml +++ b/plugins/scheduler-k3s/templates/chart/keda-scaled-object.yaml @@ -7,9 +7,7 @@ kind: ScaledObject metadata: annotations: app.kubernetes.io/version: {{ $.Values.global.deploment_id | quote }} - dokku.com/builder-type: {{ $.Values.global.image.type }} dokku.com/managed: "true" - kubectl.kubernetes.io/default-container: {{ $.Values.global.app_name }}-{{ $processName }} {{- if and $.Values.global.annotations $.Values.global.annotations.keda_scaled_object }} {{- range $k, $v := $.Values.global.annotations.keda_scaled_object }} {{ $k }}: {{ $v | quote }} @@ -21,7 +19,7 @@ metadata: {{- end }} {{- end }} labels: - app.kubernetes.io/instance: {{ $.Values.global.app_name }}-{{ $processName }}-scaled-object + app.kubernetes.io/instance: {{ $.Values.global.app_name }}-{{ $processName }} app.kubernetes.io/name: {{ $processName }} app.kubernetes.io/part-of: {{ $.Values.global.app_name }} name: {{ $.Values.global.app_name}}-{{ $processName }} @@ -40,6 +38,8 @@ spec: failureThreshold: 3 replicas: {{ $config.replicas }} triggers: - {{- toYaml $config.autoscaling.triggers | nindent 4 }} + {{- with $config.autoscaling.triggers }} + {{- toYaml . | nindent 4 }} + {{- end }} {{- end }} {{- end }} diff --git a/plugins/scheduler-k3s/templates/chart/keda-secret.yaml b/plugins/scheduler-k3s/templates/chart/keda-secret.yaml new file mode 100644 index 000000000..3809df019 --- /dev/null +++ b/plugins/scheduler-k3s/templates/chart/keda-secret.yaml @@ -0,0 +1,32 @@ +{{- if .Capabilities.APIVersions.Has "keda.sh/v1alpha1" -}} +{{- range $type, $config := .Values.global.keda.auth }} +--- +apiVersion: v1 +kind: Secret +metadata: + annotations: + app.kubernetes.io/version: {{ $.Values.global.deploment_id | quote }} + dokku.com/managed: "true" + {{- if and $.Values.global.annotations $.Values.global.annotations.keda_secret }} + {{- range $k, $v := $.Values.global.annotations.keda_secret }} + {{ $k }}: {{ $v | quote }} + {{- end }} + {{- end }} + {{- if and $config.annotations $config.annotations.keda_secret }} + {{- range $k, $v := $config.annotations.keda_secret }} + {{ $k }}: {{ $v | quote }} + {{- end }} + {{- end }} + labels: + app.kubernetes.io/instance: {{ $.Values.global.app_name }}-trigger-auth-secret + app.kubernetes.io/name: {{ $type }} + app.kubernetes.io/part-of: {{ $.Values.global.app_name }} + name: app-auth-{{ $type }} + namespace: {{ $.Values.global.namespace }} +data: +{{- with $config.secrets }} +data: + {{- toYaml . | nindent 2 }} +{{- end }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/plugins/scheduler-k3s/templates/chart/keda-trigger-authentication.yaml b/plugins/scheduler-k3s/templates/chart/keda-trigger-authentication.yaml new file mode 100644 index 000000000..73807a9a8 --- /dev/null +++ b/plugins/scheduler-k3s/templates/chart/keda-trigger-authentication.yaml @@ -0,0 +1,34 @@ +{{- if .Capabilities.APIVersions.Has "keda.sh/v1alpha1" -}} +{{- range $type, $config := .Values.global.keda.auth }} +--- +apiVersion: keda.sh/v1alpha1 +kind: TriggerAuthentication +metadata: + annotations: + app.kubernetes.io/version: {{ $.Values.global.deploment_id | quote }} + dokku.com/managed: "true" + {{- if and $.Values.global.annotations $.Values.global.annotations.keda_trigger_authentication }} + {{- range $k, $v := $.Values.global.annotations.keda_trigger_authentication }} + {{ $k }}: {{ $v | quote }} + {{- end }} + {{- end }} + {{- if and $config.annotations $config.annotations.keda_trigger_authentication }} + {{- range $k, $v := $config.annotations.keda_trigger_authentication }} + {{ $k }}: {{ $v | quote }} + {{- end }} + {{- end }} + labels: + app.kubernetes.io/instance: {{ $.Values.global.app_name }}-{{ $type }} + app.kubernetes.io/name: {{ $type }} + app.kubernetes.io/part-of: {{ $.Values.global.app_name }} + name: {{ $.Values.global.app_name }}-{{ $type }} + namespace: {{ $.Values.global.namespace }} +spec: + secretTargetRef: + {{- range $key := $config.secrets }} + - parameter: {{ $key }} + name: app-auth-{{ $type }} + key: {{ $key }} + {{- end }} +{{- end }} +{{- end }} \ No newline at end of file diff --git a/plugins/scheduler-k3s/triggers.go b/plugins/scheduler-k3s/triggers.go index 6ec08aa6d..4818639ef 100644 --- a/plugins/scheduler-k3s/triggers.go +++ b/plugins/scheduler-k3s/triggers.go @@ -399,7 +399,7 @@ func TriggerSchedulerDeploy(scheduler string, appName string, imageTag string) e values.Processes[processType] = processValues - templateFiles := []string{"deployment", "scaled-object"} + templateFiles := []string{"deployment", "keda-scaled-object"} if processType == "web" { templateFiles = append(templateFiles, "service", "certificate", "ingress", "ingress-route", "https-redirect-middleware") }