SPIFFE OIDC Discovery Provider Rework (#152)

Co-authored-by: Faisal Memon <[email protected]>
This commit is contained in:
kfox1111
2024-01-03 11:40:14 +01:00
committed by GitHub
co-authored by Faisal Memon
parent 8f1aba8ad3
commit 183e9aa534
23 changed files with 512 additions and 264 deletions
@@ -1,17 +1,50 @@
{{- define "spire-controller-manager-identity-nsselector" }}
key: "kubernetes.io/metadata.name"
{{- if eq .type "base" }}
operator: NotIn
{{- else }}
operator: In
{{- end }}
values:
{{ .namespaces | toYaml | nindent 2 }}
{{- end }}
{{- define "spire-controller-manager-identity-podselector" }}
{{- if eq .type "oidc-discovery-provider" }}
matchLabels:
release: {{ .Release.Name }}
release-namespace: {{ .Release.Namespace }}
component: oidc-discovery-provider
{{- else if eq .type "test-keys" }}
matchLabels:
release: {{ .Release.Name }}
release-namespace: {{ .Release.Namespace }}
component: test-keys
{{- else }}
{}
{{- end }}
{{- end }}
{{- $root := . }}
{{ $namespaces := list .Release.Namespace .Values.namespaceOverride (dig "spire" "namespaces" "server" "name" "" .Values.global) (dig "spire" "namespaces" "system" "name" "" .Values.global) | compact | uniq }}
{{- range $key, $value := .Values.controllerManager.identities.clusterSPIFFEIDs }}
{{- range $skey, $svalue := $value }}
{{- if not (has $skey (list "name" "annotations" "labels" "enabled" "admin" "dnsNameTemplates" "downstream" "federatesWith" "jwtTTL" "namespaceSelector" "podSelector" "spiffeIDTemplate" "ttl" "workloadSelectorTemplates" "autoPopulateDNSNames")) }}
{{- if not (has $skey (list "name" "annotations" "labels" "enabled" "type" "admin" "dnsNameTemplates" "downstream" "federatesWith" "jwtTTL" "namespaceSelector" "podSelector" "spiffeIDTemplate" "ttl" "workloadSelectorTemplates" "autoPopulateDNSNames")) }}
{{- fail (printf "Unsupported property specified: %s" $skey) }}
{{- end }}
{{- end }}
{{- range $rprop := list "spiffeIDTemplate" }}
{{- if not (hasKey $value $rprop) }}
{{- fail (printf "Required property %s was not specified" $rprop) }}
{{- end }}
{{- end }}
{{- if eq ($root.Values.controllerManager.enabled | toString) "true" }}
{{- if or (not (hasKey $value "enabled")) (eq ($value.enabled | toString) "true") }}
{{- $type := dig "type" "base" $value }}
{{- if not (has $type (list "base" "raw" "oidc-discovery-provider" "test-keys")) }}
{{- fail (printf "Type given: %s, must be one of [base, raw, oidc-discovery-provider, test-keys]" $type) }}
{{- end }}
{{- $namespaceSelector := deepCopy (dig "namespaceSelector" (dict) $value) }}
{{- if ne $type "raw" }}
{{- $namespaceSelector := merge $namespaceSelector (dict "matchExpressions" (list)) }}
{{- $namespaceSelectorToAdd := include "spire-controller-manager-identity-nsselector" (dict "type" $type "namespaces" $namespaces) | fromYaml }}
{{- $_ := set $namespaceSelector "matchExpressions" (append $namespaceSelector.matchExpressions $namespaceSelectorToAdd) }}
{{- end }}
{{- $podSelector := deepCopy (dig "podSelector" (dict) $value) }}
{{- $podSelector := merge $podSelector (include "spire-controller-manager-identity-podselector" (dict "type" $type "Release" $root.Release) | fromYaml ) }}
---
apiVersion: spire.spiffe.io/v1alpha1
kind: ClusterSPIFFEID
@@ -27,16 +60,20 @@ metadata:
{{- end }}
spec:
className: {{ include "spire-server.controller-manager-class-name" $root | quote }}
{{- if and (hasKey $value "spiffeIDTemplate") (ne (len $value.spiffeIDTemplate) 0) }}
spiffeIDTemplate: {{ $value.spiffeIDTemplate | quote }}
{{- else }}
spiffeIDTemplate: {{ $root.Values.controllerManager.identities.clusterSPIFFEIDs.default.spiffeIDTemplate | quote }}
{{- end }}
{{- with $value.federatesWith }}
federatesWith:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with $value.podSelector }}
{{- with $podSelector }}
podSelector:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with $value.namespaceSelector }}
{{- with $namespaceSelector }}
namespaceSelector:
{{- toYaml . | nindent 4 }}
{{- end }}
@@ -39,6 +39,9 @@ spec:
labels:
{{- include "spire-server.selectorLabels" . | nindent 8 }}
app.kubernetes.io/component: server
component: server
release: {{ .Release.Name }}
release-namespace: {{ .Release.Namespace }}
spec:
{{- with .Values.imagePullSecrets }}
imagePullSecrets: