Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(keycloak): migrate to keycloak helm chart #1107

Merged
merged 31 commits into from
Mar 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
16d722e
feat: move to keycloak and postgres to official helm
phac008 Mar 2, 2025
94c2e01
update Chart.lock
phac008 Mar 2, 2025
0a1bc1a
template postgres secret
phac008 Mar 2, 2025
98350fb
remove 2 from previous local tests
phac008 Mar 2, 2025
bc66112
health for crossplane keycloak provider
phac008 Mar 2, 2025
3086726
change yaml back to json format due to XBuiltinObjects reference
phac008 Mar 2, 2025
918792e
fix annotation for credentials
phac008 Mar 2, 2025
88599f0
change email domain to kubrix.io
phac008 Mar 2, 2025
410f4b8
separate admin-password
phac008 Mar 2, 2025
bd43ee7
remove crossplane health.lua
phac008 Mar 3, 2025
251bb37
add cnpg and fix password issue
phac008 Mar 3, 2025
c970888
disable cnpg if not used
phac008 Mar 3, 2025
c79ff19
change defualt values for metalstack.demo
phac008 Mar 3, 2025
436abe2
cleanup wrong file
phac008 Mar 3, 2025
8164795
updated container image list
github-actions[bot] Mar 3, 2025
5d615b9
updated trivy scan results
github-actions[bot] Mar 3, 2025
f931cb5
enable ServiceMonitor
phac008 Mar 3, 2025
daea19e
adapt internal keycloak adress
phac008 Mar 4, 2025
42acfbc
recheck crossplane healthcheck
phac008 Mar 4, 2025
cbef7f2
Merge branch 'main' into feat/migrate_keycloak_helm
jkleinlercher Mar 4, 2025
1efa219
Merge branch 'main' into feat/migrate_keycloak_helm
jkleinlercher Mar 4, 2025
4d7a524
Merge branch 'main' into feat/migrate_keycloak_helm
jkleinlercher Mar 4, 2025
fa60658
reorder to prevent degraded status
phac008 Mar 4, 2025
2bec3e8
reorder member and group roles
phac008 Mar 4, 2025
baa6c89
scopes after clients
phac008 Mar 4, 2025
ac347aa
group Roles after role
phac008 Mar 4, 2025
5a9b206
try new keycloak provider version
jkleinlercher Mar 4, 2025
68d243a
speed up flow
phac008 Mar 5, 2025
6af031b
composition move
phac008 Mar 5, 2025
3d9e3aa
Merge branch 'main' into feat/migrate_keycloak_helm
jkleinlercher Mar 5, 2025
7e19cbd
remove crossplane argocd monitoring, will be added with another request
phac008 Mar 7, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions platform-apps/charts/backstage/values-demo-metalstack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ backstage:
# real metadataUrl -> local cluster lead to "ECONNREFUSED 127.0.0.1:443" - #24935
#metadataUrl: https://keycloak.lab.suxessit.k8s.cloud.uibk.ac.at/realms/kubrix #.well-known/openid-configuration can be ommited
# workaround -> also set frontendUrl in keycloak realm
metadataUrl: http://keycloak-service.keycloak.svc.cluster.local:8080/realms/kubrix #.well-known/openid-configuration can be ommited
metadataUrl: http://sx-keycloak-headless.keycloak.svc.cluster.local:8080/realms/kubrix #.well-known/openid-configuration can be ommited
callbackUrl: https://backstage.demo.kubrix.cloud/api/auth/oidc/handler/frame
clientId: backstage
clientSecret: demosecret
Expand Down Expand Up @@ -240,7 +240,7 @@ backstage:
# real baseUrl -> local cluster lead to "ECONNREFUSED 127.0.0.1:443"
#baseUrl: https://keycloak.lab.suxessit.k8s.cloud.uibk.ac.at
# workaround
baseUrl: http://keycloak-service.keycloak.svc.cluster.local:8080
baseUrl: http://sx-keycloak-headless.keycloak.svc.cluster.local:8080
loginRealm: kubrix
realm: kubrix
clientId: backstage
Expand Down
6 changes: 3 additions & 3 deletions platform-apps/charts/backstage/values-k3d.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ backstage:
# real metadataUrl -> local cluster lead to "ECONNREFUSED 127.0.0.1:443" - #24935
#metadataUrl: https://keycloak-127-0-0-1.nip.io/realms/kubrix #.well-known/openid-configuration can be ommited
# workaround -> also set frontendUrl in keycloak realm
metadataUrl: http://keycloak-service.keycloak.svc.cluster.local:8080/realms/kubrix #.well-known/openid-configuration can be ommited
metadataUrl: http://sx-keycloak-headless.keycloak.svc.cluster.local:8080/realms/kubrix #.well-known/openid-configuration can be ommited
callbackUrl: https://backstage-127-0-0-1.nip.io/api/auth/oidc/handler/frame
clientId: backstage
clientSecret: demosecret
Expand Down Expand Up @@ -230,7 +230,7 @@ backstage:
# real baseUrl -> local cluster lead to "ECONNREFUSED 127.0.0.1:443"
#baseUrl: https://keycloak-127-0-0-1.nip.io
# workaround
baseUrl: http://keycloak-service.keycloak.svc.cluster.local:8080
baseUrl: http://sx-keycloak-headless.keycloak.svc.cluster.local:8080
loginRealm: kubrix
realm: kubrix
clientId: backstage
Expand Down Expand Up @@ -365,4 +365,4 @@ backstage:
enabled: true
## pgdb
cluster:
enabled: false
enabled: false
13 changes: 4 additions & 9 deletions platform-apps/charts/image-list.json
Original file line number Diff line number Diff line change
Expand Up @@ -196,18 +196,13 @@
},
{
"chart": "keycloak",
"image": "busybox",
"id": "keycloak_busybox"
},
{
"chart": "keycloak",
"image": "postgres:latest",
"id": "keycloak_postgres_latest"
"image": "docker.io/bitnami/keycloak:26.1.2-debian-12-r0",
"id": "keycloak_keycloak_26.1.2-debian-12-r0"
},
{
"chart": "keycloak",
"image": "quay.io/keycloak/keycloak:25.0.2",
"id": "keycloak_keycloak_25.0.2"
"image": "docker.io/bitnami/postgresql:17.4.0-debian-12-r2",
"id": "keycloak_postgresql_17.4.0-debian-12-r2"
},
{
"chart": "komoplane",
Expand Down
5 changes: 2 additions & 3 deletions platform-apps/charts/image-list.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,8 @@
## kargo
* ghcr.io/akuity/kargo:v1.2.3
## keycloak
* busybox
* postgres:latest
* quay.io/keycloak/keycloak:25.0.2
* docker.io/bitnami/keycloak:26.1.2-debian-12-r0
* docker.io/bitnami/postgresql:17.4.0-debian-12-r2
## komoplane
* busybox
* komodorio/komoplane:0.1.6
Expand Down
12 changes: 12 additions & 0 deletions platform-apps/charts/keycloak/Chart.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
dependencies:
- name: keycloak
repository: https://charts.bitnami.com/bitnami
version: 24.4.10
- name: postgresql
repository: https://charts.bitnami.com/bitnami
version: 16.4.14
- name: cluster
repository: https://cloudnative-pg.github.io/charts
version: 0.2.1
digest: sha256:bc4114d4fde2bad2e72d93cc3de6322c1cc252c200d8dfa1bf6531de6281ddf5
generated: "2025-03-03T14:53:56.140641+01:00"
16 changes: 15 additions & 1 deletion platform-apps/charts/keycloak/Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
apiVersion: v2
name: sx-keycloak
description: A local k8s keycloak with postgres db
description: A Helm chart for Kubernetes

# A chart can be either an 'application' or a 'library' chart.
#
Expand All @@ -23,3 +23,17 @@ version: 0.1.0
# It is recommended to use it with quotes.
appVersion: "1.0.0"

dependencies:
- name: keycloak
alias: keycloak
version: 24.4.10
repository: https://charts.bitnami.com/bitnami
- name: postgresql
alias: postgresql
version: 16.4.14
repository: https://charts.bitnami.com/bitnami
condition: postgresql.enabled
- name: cluster
version: 0.2.1
repository: https://cloudnative-pg.github.io/charts
condition: cluster.enabled
48 changes: 24 additions & 24 deletions platform-apps/charts/keycloak/templates/2faflow.yaml
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
{{- if .Values.deployments.keycloak.mfa.enabled }}
{{- if .Values.kubrix.keycloak.mfa.enabled }}
apiVersion: role.keycloak.crossplane.io/v1alpha1
kind: Role
metadata:
name: 2faotprole
labels:
platform-engineer.cloud/role: 2faotprole
annotations:
argocd.argoproj.io/sync-wave: "2"
argocd.argoproj.io/sync-wave: "6"
argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true
spec:
deletionPolicy: Delete
forProvider:
description: "${role_{{ .Values.deployments.keycloak.realm.realmid }}_otprole}"
name: {{ .Values.deployments.keycloak.realm.realmid }}_otprole
description: "${role_{{ .Values.kubrix.keycloak.realm.realmid }}_otprole}"
name: {{ .Values.kubrix.keycloak.realm.realmid }}_otprole
realmIdSelector:
matchLabels:
platform-engineer.cloud/realm: {{ .Values.deployments.keycloak.realm.realmid }}
platform-engineer.cloud/realm: {{ .Values.kubrix.keycloak.realm.realmid }}
providerConfigRef:
name: "{{ .Release.Name }}-config"
---
Expand All @@ -26,14 +26,14 @@ metadata:
labels:
platform-engineer.cloud/flow: 2faflow
annotations:
argocd.argoproj.io/sync-wave: "2"
argocd.argoproj.io/sync-wave: "6"
argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true
spec:
deletionPolicy: Delete
forProvider:
realmIdSelector:
matchLabels:
platform-engineer.cloud/realm: {{ .Values.deployments.keycloak.realm.realmid }}
platform-engineer.cloud/realm: {{ .Values.kubrix.keycloak.realm.realmid }}
alias: browser 2 FA
description: browser based authentication
providerId: basic-flow
Expand All @@ -45,7 +45,7 @@ kind: Execution
metadata:
name: 2fa-ex1
annotations:
argocd.argoproj.io/sync-wave: "3"
argocd.argoproj.io/sync-wave: "7"
argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true
spec:
forProvider:
Expand All @@ -57,7 +57,7 @@ spec:
requirement: ALTERNATIVE
realmIdSelector:
matchLabels:
platform-engineer.cloud/realm: {{ .Values.deployments.keycloak.realm.realmid }}
platform-engineer.cloud/realm: {{ .Values.kubrix.keycloak.realm.realmid }}
providerConfigRef:
name: "{{ .Release.Name }}-config"
---
Expand All @@ -66,7 +66,7 @@ kind: Execution
metadata:
name: 2fa-ex2
annotations:
argocd.argoproj.io/sync-wave: "4"
argocd.argoproj.io/sync-wave: "8"
argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true
spec:
forProvider:
Expand All @@ -77,7 +77,7 @@ spec:
platform-engineer.cloud/flow: 2faflow
realmIdSelector:
matchLabels:
platform-engineer.cloud/realm: {{ .Values.deployments.keycloak.realm.realmid }}
platform-engineer.cloud/realm: {{ .Values.kubrix.keycloak.realm.realmid }}
requirement: ALTERNATIVE
providerConfigRef:
name: "{{ .Release.Name }}-config"
Expand All @@ -87,7 +87,7 @@ kind: Execution
metadata:
name: 2fa-ex3
annotations:
argocd.argoproj.io/sync-wave: "5"
argocd.argoproj.io/sync-wave: "9"
argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true
spec:
forProvider:
Expand All @@ -98,7 +98,7 @@ spec:
platform-engineer.cloud/flow: 2faflow
realmIdSelector:
matchLabels:
platform-engineer.cloud/realm: {{ .Values.deployments.keycloak.realm.realmid }}
platform-engineer.cloud/realm: {{ .Values.kubrix.keycloak.realm.realmid }}
requirement: REQUIRED
providerConfigRef:
name: "{{ .Release.Name }}-config"
Expand All @@ -110,7 +110,7 @@ metadata:
labels:
platform-engineer.cloud/execution: 2fa-ex4
annotations:
argocd.argoproj.io/sync-wave: "6"
argocd.argoproj.io/sync-wave: "10"
argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true
spec:
forProvider:
Expand All @@ -121,7 +121,7 @@ spec:
platform-engineer.cloud/flow: 2faflow
realmIdSelector:
matchLabels:
platform-engineer.cloud/realm: {{ .Values.deployments.keycloak.realm.realmid }}
platform-engineer.cloud/realm: {{ .Values.kubrix.keycloak.realm.realmid }}
requirement: REQUIRED
providerConfigRef:
name: "{{ .Release.Name }}-config"
Expand All @@ -131,20 +131,20 @@ kind: ExecutionConfig
metadata:
name: 2fa-ex4-conf
annotations:
argocd.argoproj.io/sync-wave: "7"
argocd.argoproj.io/sync-wave: "11"
argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true
spec:
forProvider:
alias: conditional otp form
config:
defaultOtpOutcome: skip
forceOtpRole: {{ .Values.deployments.keycloak.realm.realmid }}_otprole
forceOtpRole: {{ .Values.kubrix.keycloak.realm.realmid }}_otprole
executionIdSelector:
matchLabels:
platform-engineer.cloud/execution: 2fa-ex4
realmIdSelector:
matchLabels:
platform-engineer.cloud/realm: {{ .Values.deployments.keycloak.realm.realmid }}
platform-engineer.cloud/realm: {{ .Values.kubrix.keycloak.realm.realmid }}
providerConfigRef:
name: "{{ .Release.Name }}-config"
---
Expand All @@ -153,7 +153,7 @@ kind: Bindings
metadata:
name: 2fa-browser-flow-binding
annotations:
argocd.argoproj.io/sync-wave: "8"
argocd.argoproj.io/sync-wave: "12"
argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true
spec:
forProvider:
Expand All @@ -162,20 +162,20 @@ spec:
platform-engineer.cloud/flow: 2faflow
realmIdSelector:
matchLabels:
platform-engineer.cloud/realm: {{ .Values.deployments.keycloak.realm.realmid }}
platform-engineer.cloud/realm: {{ .Values.kubrix.keycloak.realm.realmid }}
providerConfigRef:
name: "{{ .Release.Name }}-config"
{{- end }}
---
{{- range $group := .Values.deployments.keycloak.realm.groups }}
{{- range $group := .Values.kubrix.keycloak.realm.groups }}
{{- if $group.mfa }}
apiVersion: group.keycloak.crossplane.io/v1alpha1
kind: Roles
metadata:
name: {{ $.Values.deployments.keycloak.backstageclient.config.clientID }}-{{ $group.name }}-2fa-roles
name: backstage-{{ $group.name }}-2fa-roles
annotations:
argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true
argocd.argoproj.io/sync-wave: "1"
argocd.argoproj.io/sync-wave: "7"
spec:
forProvider:
exhaustive: false
Expand All @@ -184,7 +184,7 @@ spec:
roleIdsSelector:
matchLabels:
platform-engineer.cloud/role: 2faotprole
realmId: {{ $.Values.deployments.keycloak.realm.realmid }}
realmId: {{ $.Values.kubrix.keycloak.realm.realmid }}
providerConfigRef:
name: "{{ $.Release.Name }}-config"
---
Expand Down
2 changes: 1 addition & 1 deletion platform-apps/charts/keycloak/templates/comp.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ kind: Composition
metadata:
name: keycloak-builtin-objects
annotations:
argocd.argoproj.io/sync-wave: "-1"
argocd.argoproj.io/sync-wave: "1"
spec:
compositeTypeRef:
apiVersion: keycloak.crossplane.io/v1alpha1
Expand Down
29 changes: 0 additions & 29 deletions platform-apps/charts/keycloak/templates/configmap.yaml

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,37 +1,28 @@
---
apiVersion: v1
kind: Secret
metadata:
name: "{{ .Release.Name }}-client-{{ .Values.deployments.keycloak.backstageclient.config.clientID }}-password"
type: Opaque
stringData:
{{ .Values.deployments.keycloak.backstageclient.config.clientID }}: {{ .Values.deployments.keycloak.backstageclient.config.clientSecret }}

---
apiVersion: openidclient.keycloak.crossplane.io/v1alpha1
kind: Client
metadata:
name: {{ .Values.deployments.keycloak.backstageclient.config.clientID }}
name: backstage
annotations:
argocd.argoproj.io/sync-wave: "1"
argocd.argoproj.io/sync-wave: "5"
argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true
spec:
deletionPolicy: Delete
forProvider:
accessType: CONFIDENTIAL
clientId: {{ .Values.deployments.keycloak.backstageclient.config.clientID }}
name: {{ .Values.deployments.keycloak.backstageclient.config.clientID }}
realmId: {{ .Values.deployments.keycloak.realm.realmid }}
clientId: backstage
name: backstage
realmId: {{ .Values.kubrix.keycloak.realm.realmid }}
directAccessGrantsEnabled: false
standardFlowEnabled: true
serviceAccountsEnabled: true
# managementPolicies: ["Observe"]
validRedirectUris:
- "http://localhost:7007/api/auth/oidc/handler/frame"
- "https://backstage{{ .Values.deployments.ingress.fqdn }}/api/auth/oidc/handler/frame"
- "https://backstage{{ .Values.kubrix.keycloak.fqdn }}/api/auth/oidc/handler/frame"
clientSecretSecretRef:
key: {{ .Values.deployments.keycloak.backstageclient.config.clientID }}
name: "{{ .Release.Name }}-client-{{ .Values.deployments.keycloak.backstageclient.config.clientID }}-password"
key: backstage
name: keycloak-client-credentials
namespace: {{ .Release.Namespace }}
loginTheme: keycloak
providerConfigRef:
Expand Down
Loading