“无法连接到数据库”: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-idmapiVersion: 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?
无法使用 Python 连接到 MSSQL Server 数据库