11.8. 连接到外部数据库
您可以通过创建一个 keycloak-db-secret
YAML 文件并将 Keycloak CR externalDatabase 属性设置为 enabled,来使用 Operator 连接到外部 PostgreSQL 数据库。请注意,值为 Base64 编码。
keycloak-db-secret
的 YAML 文件示例
以下属性设置数据库的主机名或 IP 地址和端口。
-
POSTGRES_EXTERNAL_ADDRESS
- 一个 IP 地址或外部数据库的主机名。 -
POSTGRES_EXTERNAL_PORT
- (可选)数据库端口。
其他属性的工作方式与托管或外部数据库相同。将它们设置为如下:
-
POSTGRES_DATABASE
- 要使用的数据库名称。 -
POSTGRES_USERNAME
- 数据库用户名 -
POSTGRES_PASSWORD
- 数据库密码 -
POSTGRES_SUPERUSER
- 表示备份是否以超级用户身份运行。通常为。
-
SSL_MODE
- 表示是否连接到外部 PostgreSQL 数据库上的 TLS。检查 可能的值
启用 SSL_MODE
后,Operator 会搜索名为 keycloak-db-ssl-cert-secret
的 secret,其中包含 PostgreSQL 数据库使用的 root.crt
。创建 secret 是可选的,只有在您希望验证数据库的证书时(例如 SSLMODE: verify-ca
)才会使用该 secret。下面是一个示例:
operator 要使用的 TLS Secret
的 YAML 文件示例。
Operator 将创建一个名为 keycloak-postgresql
的服务。此服务由 Operator 配置,以根据 POSTGRES_EXTERNAL_ADDRESS
的内容公开外部数据库。Red Hat Single Sign-On 使用这个服务连接到数据库,这意味着它不会直接连接到数据库,而是通过这个服务。
Operator 将创建一个名为 keycloak-postgresql
的服务。此服务由 Operator 配置,以根据 POSTGRES_EXTERNAL_ADDRESS
的内容公开外部数据库。Red Hat Single Sign-On 使用这个服务连接到数据库,这意味着它不会直接连接到数据库,而是通过这个服务。
Keycloak 自定义资源需要更新来启用外部数据库支持。
支持外部数据库的 Keycloak
自定义资源的 YAML 文件示例
前提条件
-
您有一个用于
keycloak-db-secret
的 YAML 文件。 -
您已修改了 Keycloak 自定义资源,将
externalDatabase
设置为true
。 - 您有 cluster-admin 权限,或具有管理员授予的同等权限级别。
流程
查找 PostgreSQL 数据库的 secret:
oc get secret <secret_for_db> -o yaml
。例如:Copy to Clipboard Copied! Toggle word wrap Toggle overflow POSTGRES_EXTERNAL_ADDRESS
是 Base64 格式。解码 secret 的值:
echo "<encoded_secret>" | base64 -decode
。例如:echo "MTcyLjE3LjAuMw==" | base64 -decode
$ echo "MTcyLjE3LjAuMw==" | base64 -decode 192.0.2.3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认已解码的值与您的数据库的 IP 地址匹配:
oc get pods -o wide
$ oc get pods -o wide NAME READY STATUS RESTARTS AGE IP keycloak-0 1/1 Running 0 13m 192.0.2.0 keycloak-postgresql-c8vv27m 1/1 Running 0 24m 192.0.2.3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认
keycloak-postgresql
出现在运行的服务列表中:oc get svc
$ oc get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE keycloak ClusterIP 203.0.113.0 <none> 8443/TCP 27m keycloak-discovery ClusterIP None <none> 8080/TCP 27m keycloak-postgresql ClusterIP 203.0.113.1 <none> 5432/TCP 27m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow keycloak-postgresql
服务将请求发送到后端的一组 IP 地址。这些 IP 地址称为端点。查看
keycloak-postgresql
服务使用的端点,以确认它们是否将 IP 地址用于您的数据库:oc get endpoints keycloak-postgresql
$ oc get endpoints keycloak-postgresql NAME ENDPOINTS AGE keycloak-postgresql 192.0.2.3.5432 27m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认 Red Hat Single Sign-On 正在使用外部数据库运行。本例显示一切正在运行:
oc get pods
$ oc get pods NAME READY STATUS RESTARTS AGE IP keycloak-0 1/1 Running 0 26m 192.0.2.0 keycloak-postgresql-c8vv27m 1/1 Running 0 36m 192.0.2.3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow