“无法连接到数据库”:Keycloak Operator 外部数据库配置不起作用

Posted

技术标签:

【中文标题】“无法连接到数据库”:Keycloak Operator 外部数据库配置不起作用【英文标题】:"Failed to connect to database" : Keycloak Operator external database Config not working 【发布时间】: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 实例。 【参考方案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"

【讨论】:

以上是关于“无法连接到数据库”:Keycloak Operator 外部数据库配置不起作用的主要内容,如果未能解决你的问题,请参考以下文章

连接网站显示数据库错误:无法连接到数据库:无法连接到MySQL?

无法连接到数据库服务器 [1040]啥意思

数据库连接错误(3):无法连接到数据库',

无法使用 Python 连接到 MSSQL Server 数据库

无法连接到数据库(HY000/1045),尝试使用 php mysqli_connection 连接到数据库 [重复]

无法连接到数据库。不会停止加载