Keycloak-Installation mit Helm auf GKE mit Cloud SQL-Datenbank (extern)

Keycloak-Installation mit Helm auf GKE mit Cloud SQL-Datenbank (extern)

Ich versuche, Keycloak auf einem GKE-Cluster in GCP mit einer externen Datenbank zu installieren, also CloudSQL Postrges DB. Ich möchte Helm zur Installation verwenden, also:

helm repo add bitnami https://charts.bitnami.com/bitnami

Ich habe die Datei Values.yml aus dem Bitnami-Repository heruntergeladen und den Abschnitt „externalDatabase.externalSecret“ dieser Datei aktualisiert, da ich die Anmeldeinformationen nicht im Klartext eingeben möchte. Stattdessen habe ich ein Kubernetes-Geheimnis erstellt:

$ kubectl get secret keycloak-db-secret -o yaml
apiVersion: v1
data:
  POSTGRES_DATABASE: <value>
  POSTGRES_EXTERNAL_ADDRESS: <value>
  POSTGRES_EXTERNAL_PORT: <value>
  POSTGRES_PASSWORD: <value>
  POSTGRES_USERNAME: <value>
kind: Secret
metadata:
...

Und die Änderungen in Values.yml sind (der Rest der Datei wird nicht geändert):

postgresql:
  enabled: false
externalDatabase:
  existingSecret:
    name: keycloak-db-secret
    keyMapping:
      host: POSTGRES_EXTERNAL_ADDRESS
      port: POSTGRES_EXTERNAL_PORT
      user: POSTGRES_USERNAME
      password: POSTGRES_PASSWORD
      database: POSTGRES_DATABASE

Wenn ich laufe

helm install --debug my-keycloak bitnami/keycloak -f Values.yml

Ich erhalte eine Fehlermeldung

install.go:173: [debug] Original chart version: ""
install.go:190: [debug] CHART PATH: /home/michal/.cache/helm/repository/keycloak-5.0.7.tgz

coalesce.go:203: warning: destination for existingSecret is a table. Ignoring non-table value
coalesce.go:203: warning: destination for existingSecret is a table. Ignoring non-table value
Error: YAML parse error on keycloak/templates/statefulset.yaml: error converting YAML to JSON: yaml: line 88: mapping values are not allowed in this context
helm.go:81: [debug] error converting YAML to JSON: yaml: line 88: mapping values are not allowed in this context
YAML parse error on keycloak/templates/statefulset.yaml
helm.sh/helm/v3/pkg/releaseutil.(*manifestFile).sort
        /home/circleci/helm.sh/helm/pkg/releaseutil/manifest_sorter.go:146
helm.sh/helm/v3/pkg/releaseutil.SortManifests
        /home/circleci/helm.sh/helm/pkg/releaseutil/manifest_sorter.go:106
helm.sh/helm/v3/pkg/action.(*Configuration).renderResources
        /home/circleci/helm.sh/helm/pkg/action/action.go:165
helm.sh/helm/v3/pkg/action.(*Install).Run
        /home/circleci/helm.sh/helm/pkg/action/install.go:240
main.runInstall
        /home/circleci/helm.sh/helm/cmd/helm/install.go:242
main.newInstallCmd.func2
        /home/circleci/helm.sh/helm/cmd/helm/install.go:120
github.com/spf13/cobra.(*Command).execute
        /go/pkg/mod/github.com/spf13/[email protected]/command.go:850
github.com/spf13/cobra.(*Command).ExecuteC
        /go/pkg/mod/github.com/spf13/[email protected]/command.go:958
github.com/spf13/cobra.(*Command).Execute
        /go/pkg/mod/github.com/spf13/[email protected]/command.go:895
main.main
        /home/circleci/helm.sh/helm/cmd/helm/helm.go:80
runtime.main
        /usr/local/go/src/runtime/proc.go:204
runtime.goexit
        /usr/local/go/src/runtime/asm_amd64.s:1374

Ich habe templates/statefulset.yaml überprüft, konnte aber nichts finden, was ein Problem darstellen könnte (ich bin ein Helm-Anfänger). Zeile 88 bezieht sich auf die generierte YAML-Datei und nicht auf die Vorlagendatei, was die Fehlersuche erschwert.

Was fehlt in meiner Konfiguration? Wie kann ich es weiter debuggen? Bitte helfen Sie

PS. Die Dokumentation zum Verbinden von Keycloak mit einer externen Datenbank finden Sie hier :(https://docs.bitnami.com/kubernetes/apps/keycloak/configuration/use-external-database/

Antwort1

Der externalDatabase.existingSecretSchlüssel erwartet lediglich einen geheimen Namen.
Die entsprechende Zeile lautetHier.

z.B

postgresql:
  enabled: false
externalDatabase:
  existingSecret: keycloak-db-secret
  host: pg.ns.svc.cluster.local
  port: 5432
  user: pg_username
  database: db_name

HINWEIS: Das Geheimnis muss den Schlüssel „Passwort“ haben, um eine vollständig angepasste Version zu verwenden, füllen Sie entweder auth.existingSecretoderauth.existingSecretPerPassword

verwandte Informationen