Kubernetes (GKE) Keycloak 无法连接到 CloudSQL
Kubernetes (GKE) Keycloak couldn't connect to CloudSQL
我在我的 kubernetes 集群中 运行 keycloak,它 运行 非常好,直到我意识到数据库仍然使用 H2,即使我已经在我的 deployment.yaml
中添加了 POSTGRES 配置.
有人可以指出我遗漏的地方吗?
apiVersion: apps/v1
kind: Deployment
...
spec:
...
spec:
containers:
- name: keycloak
image: quay.io/keycloak/keycloak:17.0.0
args:
[
"start",
"--hostname-strict=false"
]
env:
- name: DB_VENDOR
value: postgres
- name: DB_ADDR
valueFrom:
secretKeyRef:
name: keycloak-db-cred
key: host
- name: DB_PORT
value: "5432"
- name: DB_DATABASE
valueFrom:
secretKeyRef:
name: keycloak-db-cred
key: database
- name: DB_SCHEMA
value: public
- name: DB_USER
valueFrom:
secretKeyRef:
name: keycloak-db-cred
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: keycloak-db-cred
key: password
- name: KEYCLOAK_ADMIN
valueFrom:
secretKeyRef:
name: keycloak-secret
key: username
- name: KEYCLOAK_ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: keycloak-secret
key: password
- name: PROXY_ADDRESS_FORWARDING
value: "true"
- name: KC_PROXY
value: "edge"
- name: JAVA_OPTS
value: -Dkeycloak.profile.feature.scripts=enabled -Dkeycloak.profile.feature.upload_scripts=enabled
我使用来自 GCP 的 Postgre CloudSQL
您设置的“db_vendor”值是针对旧的 wildfly 分布的,根据您示例中的图像,您使用的是基于 quarkus 的图像。所以首先,它现在被称为“db”。参考:https://www.keycloak.org/server/db
此外,请注意“db”选项是一个“构建选项”,这意味着您必须“构建”服务器才能使其生效。
方法 1:您可以将 start --auto-build
添加到您的 args
。这样,Keycloak 会自动为您检测您是否更改了构建时间选项,并在容器启动时运行构建。这很方便,但需要一些时间。
方式二:
或者您可以使用推荐的方法首先创建优化的服务器映像,从而缩短启动时间。例如。通过使用这样的 Dockerfile:
FROM quay.io/keycloak/keycloak:latest as builder
ENV KC_FEATURES=scripts
ENV KC_DB=postgres
RUN /opt/keycloak/bin/kc.sh build
并执行 docker build . -t my_optimized_keycloak
,然后将图像上传到所选的注册表。参考:https://www.keycloak.org/server/containers
我还注意到您将一些旧配置密钥与新配置密钥混合在一起,因此一般建议:查看 https://www.keycloak.org/guides 上的新指南部分 - 特别是“所有配置”指南提供了很好的概述。
我还注意到您正在使用已弃用的 upload_scripts 功能。自 Keycloak 18(参见 https://www.keycloak.org/2022/04/keycloak-1800-released.html)fyi.
我在我的 kubernetes 集群中 运行 keycloak,它 运行 非常好,直到我意识到数据库仍然使用 H2,即使我已经在我的 deployment.yaml
中添加了 POSTGRES 配置.
有人可以指出我遗漏的地方吗?
apiVersion: apps/v1
kind: Deployment
...
spec:
...
spec:
containers:
- name: keycloak
image: quay.io/keycloak/keycloak:17.0.0
args:
[
"start",
"--hostname-strict=false"
]
env:
- name: DB_VENDOR
value: postgres
- name: DB_ADDR
valueFrom:
secretKeyRef:
name: keycloak-db-cred
key: host
- name: DB_PORT
value: "5432"
- name: DB_DATABASE
valueFrom:
secretKeyRef:
name: keycloak-db-cred
key: database
- name: DB_SCHEMA
value: public
- name: DB_USER
valueFrom:
secretKeyRef:
name: keycloak-db-cred
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: keycloak-db-cred
key: password
- name: KEYCLOAK_ADMIN
valueFrom:
secretKeyRef:
name: keycloak-secret
key: username
- name: KEYCLOAK_ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: keycloak-secret
key: password
- name: PROXY_ADDRESS_FORWARDING
value: "true"
- name: KC_PROXY
value: "edge"
- name: JAVA_OPTS
value: -Dkeycloak.profile.feature.scripts=enabled -Dkeycloak.profile.feature.upload_scripts=enabled
我使用来自 GCP 的 Postgre CloudSQL
您设置的“db_vendor”值是针对旧的 wildfly 分布的,根据您示例中的图像,您使用的是基于 quarkus 的图像。所以首先,它现在被称为“db”。参考:https://www.keycloak.org/server/db
此外,请注意“db”选项是一个“构建选项”,这意味着您必须“构建”服务器才能使其生效。
方法 1:您可以将 start --auto-build
添加到您的 args
。这样,Keycloak 会自动为您检测您是否更改了构建时间选项,并在容器启动时运行构建。这很方便,但需要一些时间。
方式二: 或者您可以使用推荐的方法首先创建优化的服务器映像,从而缩短启动时间。例如。通过使用这样的 Dockerfile:
FROM quay.io/keycloak/keycloak:latest as builder
ENV KC_FEATURES=scripts
ENV KC_DB=postgres
RUN /opt/keycloak/bin/kc.sh build
并执行 docker build . -t my_optimized_keycloak
,然后将图像上传到所选的注册表。参考:https://www.keycloak.org/server/containers
我还注意到您将一些旧配置密钥与新配置密钥混合在一起,因此一般建议:查看 https://www.keycloak.org/guides 上的新指南部分 - 特别是“所有配置”指南提供了很好的概述。
我还注意到您正在使用已弃用的 upload_scripts 功能。自 Keycloak 18(参见 https://www.keycloak.org/2022/04/keycloak-1800-released.html)fyi.