【问题标题】:"Failed to connect to database" : Keycloak Operator external database Config not working“无法连接到数据库”:Keycloak Operator 外部数据库配置不起作用
【发布时间】:2021-10-15 14:54:20
【问题描述】:

我使用外部数据库连接检查了这个 How to use 的 Keycloak 操作员自定义资源。我使用 Google 平台的 CloudSQL 作为外部数据库源。

我的配置是

  • keycloak-idm
apiVersion: keycloak.org/v1alpha1
kind: Keycloak
metadata:
  name: kiwigrid-keycloak-idm
spec:
  instances: 3
  externalAccess:
    enabled: false
  externalDatabase:
    enabled: true
  • 外部数据库存储密码
apiVersion: v1
kind: Secret
metadata:
    name: keycloak-db-secret
    namespace: kiwios-application
type: Opaque
stringData:
    POSTGRES_DATABASE: keycloak-storage
    POSTGRES_EXTERNAL_ADDRESS: pgsqlproxy.infra
    POSTGRES_EXTERNAL_PORT: "5432"
    POSTGRES_HOST: keycloak-postgresql
    POSTGRES_USERNAME: keycloak-user
    POSTGRES_PASSWORD: S1ly3AValJYBNR-fsptLYdT74
    POSTGRES_SUPERUSER: "true"

  • 存储数据库
apiVersion: sql.cnrm.cloud.google.com/v1beta1
kind: SQLDatabase
metadata:
  name: keycloak-storage
  namespace: kiwios-application
  annotations:
    cnrm.cloud.google.com/deletion-policy: "abandon"
spec:
  charset: UTF8
  collation: en_US.UTF8
  instanceRef:
    name: keycloak-storage-instance-pg
    namespace: infra
  • 存储用户
apiVersion: sql.cnrm.cloud.google.com/v1beta1
kind: SQLUser
metadata:
  name: keycloak-user
  namespace: kiwios-application
  annotations:
    cnrm.cloud.google.com/deletion-policy: "abandon"
spec:
  instanceRef:
    name: keycloak-storage-instance-pg
    namespace: infra
  password:
    valueFrom:
      secretKeyRef:
        name: keycloak-db-secret
        key: POSTGRES_PASSWORD

以及 Kubernetes 控制台中显示的错误

它不工作。任何人都请帮我弄清楚我做错了什么。

更新:我深入了解了 k9s 控制台。根据keycloak-operator 功能,它为数据库连接创建一个外部名称。 这是keycloak-postgresql

查看下方图片

keycloak-operator 控制台中没有显示错误。只有keycloak-idm 无法使用此外部名称建立连接。它显示以下错误。

【问题讨论】:

  • 这只是一个猜测,但是秘密字段应该被编码为 base 64 吗?
  • 您已经连接了一个名为 keycloak-storage 的数据库,但正在连接到 pgsqlproxy.infra。您的 pgsqlproxy 配置正确吗?
  • 是的@dreamcrash 是加密的。我在这里以纯文本形式分享,以便更多理解
  • 是的@LukasEichler 是的,它已正确配置,因为它是一个 cloudsql 实例。

标签: kubernetes keycloak keycloak-operator


【解决方案1】:

这就是我用于设置密钥斗篷的方法,如果您已经阅读了他在更新部分提到的秘密问题问题的问题

apiVersion: v1
kind: Service
metadata:
  name: keycloak
  labels:
    app: keycloak
spec:
  ports:
  - name: http
    port: 8080
    targetPort: 8080
  selector:
    app: keycloak
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: keycloak
  namespace: default
  labels:
    app: keycloak
spec:
  replicas: 1
  selector:
    matchLabels:
      app: keycloak
  template:
    metadata:
      labels:
        app: keycloak
    spec:
      containers:
      - name: keycloak
        image: quay.io/keycloak/keycloak:10.0.0
        env:
        - name: KEYCLOAK_USER
          value: "admin"
        - name: KEYCLOAK_PASSWORD
          value: "admin"
        - name: PROXY_ADDRESS_FORWARDING
          value: "true"
        - name: DB_VENDOR
          value: POSTGRES
        - name: DB_ADDR
          value: postgres
        - name: DB_DATABASE
          value: keycloak
        - name: DB_USER
          value: root
        - name: DB_PASSWORD
          value: password
        - name : KEYCLOAK_HTTP_PORT
          value : "80"
        - name: KEYCLOAK_HTTPS_PORT
          value: "443"
        - name : KEYCLOAK_HOSTNAME
          value : keycloak.harshmanvar.tk #replace with ingress URL
        ports:
        - name: http
          containerPort: 8080
        - name: https
          containerPort: 8443
        readinessProbe:
          httpGet:
            path: /auth/realms/master
            port: 8080

您可以尝试将 ENV 变量更改为您正在使用的密钥。

示例文件:https://github.com/harsh4870/Keycloack-postgres-kubernetes-deployment

Keycloak 支持的环境变量:https://github.com/keycloak/keycloak-containers/blob/master/server/README.md#environment-variables

【讨论】:

    【解决方案2】:

    你试过这种方法吗..!

    apiVersion: v1
    kind: Secret
    metadata:
        name: keycloak-db-secret
        namespace: kiwios-application
    type: Opaque
    stringData:
        POSTGRES_DATABASE: "keycloak-storage"
        POSTGRES_EXTERNAL_ADDRESS: "pgsqlproxy.infra"
        POSTGRES_EXTERNAL_PORT: "5432"
        POSTGRES_HOST: "keycloak-postgresql"
        POSTGRES_USERNAME: "keycloak-user"
        POSTGRES_PASSWORD: "S1ly3AValJYBNR-fsptLYdT74"
        POSTGRES_SUPERUSER: "true"

    【讨论】:

      猜你喜欢
      • 2020-07-10
      • 2017-07-03
      • 2021-06-21
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多