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.