【发布时间】:2021-12-25 21:14:40
【问题描述】:
我想在谷歌 kubernetes 引擎 (GKE) 中运行 keycloak(在 wildfly 中运行)并将我的数据存储在我想使用谷歌服务帐户连接到的托管 SQL 实例中( GSA)使用内置的 IAM 身份验证。我主要是通过设置(云 SQL 身份验证代理在 keycloak 旁边作为 sidecar 运行,代理成功地对托管实例进行身份验证,等等...),但我无法说服 wildfly 不提供密码时尝试通过 localhost 连接到数据库(sidecar 可用)。
作为我的问题的类比,我似乎有:psql -U <service_account>@<project>.iam 就像一个魅力,其中 psql -U <service_account>@<project>.iam -p 密码为空时失败。
我已经通过安装我自己的/opt/jboss/tools/cli/databases/postgres/change-database.cli 版本来调整使用jboss/keycloak docker 映像的容器,我在其中删除了设置密码的行。文件新看起来像:
/subsystem=datasources/data-source=KeycloakDS: remove()
/subsystem=datasources/data-source=KeycloakDS: add(jndi-name=java:jboss/datasources/KeycloakDS,enabled=true,use-java-context=true,use-ccm=true, connection-url=jdbc:postgresql://${env.DB_ADDR:postgres}/${env.DB_DATABASE:keycloak}${env.JDBC_PARAMS:}, driver-name=postgresql)
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=user-name, value=${env.DB_USER:keycloak})
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=check-valid-connection-sql, value="SELECT 1")
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation, value=true)
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation-millis, value=60000)
/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=flush-strategy, value=IdleConnections)
/subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql, driver-module-name=org.postgresql.jdbc, driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)
/subsystem=keycloak-server/spi=connectionsJpa/provider=default:write-attribute(name=properties.schema,value=${env.DB_SCHEMA:public})
(不带行的标准内容:/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=password, value=${env.DB_PASSWORD:password}))。
我错过了什么?
【问题讨论】:
-
您能否提供有关您的环境和方案的更多详细信息?你是如何配置你的keycloak的?是自定义配置还是GCP Documentation中提到的配置?您能否添加有关您的 SQL 数据库的更多详细信息?是在
GKE cluster还是你用过Cloud SQL/Spanner?如果我了解您可以使用Keycloak连接到您的GKE cluster和SQL instance,但您对Wildfly有疑问?您的Wildfly是否部署在 GKE 集群中? -
设置: - 添加了GSA(分配了
cloudsql.instanceUser和cloudsql.client) - db 是在Cloud SQL及以上 GSA 中运行的 PostgreSQL v11,作为 SA 用户添加 - 用于GSA 存储在 GKE 机密中 - keycloak 作为部署在 GKE 中运行(图片:github.com/keycloak/keycloak-containers),云 SQL 代理作为 keycloak 旁边的 sidecar 运行。 keycloak 被告知连接到本地主机上的数据库(边车使代理在那里可用) -
另外,我调试了wildfly:看来
org.jboss.jca.adapters.jdbc.BaseWrapperManagedConnectionFactory#getConnectionProperties在任何情况下都设置了一个空密码props.setProperty("password", lcri.getPassword() == null ? "" : lcri.getPassword());
标签: postgresql google-cloud-platform wildfly google-kubernetes-engine google-cloud-sql