搜索

11.7. 连接到外部数据库

download PDF

您可以通过创建一个 keycloak-db-secret YAML 文件并将 Keycloak CR externalDatabase 属性设置为启用,来使用 Operator 连接到外部 PostgreSQL 数据库。请注意,数值采用 Base64 编码。

keycloak-db-secret的 YAML 文件示例

apiVersion: v1
kind: Secret
metadata:
    name: keycloak-db-secret
    namespace: keycloak
stringData:
    POSTGRES_DATABASE: <Database Name>
    POSTGRES_EXTERNAL_ADDRESS: <External Database URL (resolvable by K8s)>
    POSTGRES_EXTERNAL_PORT: <External Database Port>
    POSTGRES_PASSWORD: <Database Password>
    # Required for AWS Backup functionality
    POSTGRES_SUPERUSER: "true"
    POSTGRES_USERNAME: <Database Username>
    SSLMODE: <TLS configuration for the Database connection>
type: Opaque

以下属性设置数据库的主机名或 IP 地址和端口。

  • POSTGRES_EXTERNAL_ADDRESS - 外部数据库的主机名。如果您的数据库只有一个 IP 而不是主机名,则创建一个 服务和相应的 EndpointSlice 或 Endpoint 来提供主机名。
  • POSTGRES_EXTERNAL_PORT - (可选)数据库端口。

其他属性的工作方式与托管或外部数据库相同。按照如下所示设置它们:

  • POSTGRES_DATABASE - 要使用的数据库名称。
  • POSTGRES_USERNAME - 数据库用户名
  • POSTGRES_PASSWORD - 数据库密码
  • POSTGRES_SUPERUSER - 表示备份是否应该以超级用户身份运行。通常为 true
  • SSLMODE - 指示是否在连接到外部 PostgreSQL 数据库的连接上使用 TLS。检查 可能的值

启用 SSLMODE 后,Operator 会搜索名为 keycloak-db-ssl-cert-secret 的 secret,其中包含 PostgreSQL 数据库使用的 root.crt。创建 secret 是可选的,只有在您要验证数据库的证书时使用 secret(例如 SSLMODE: verify-ca)。下面是一个示例:

供 Operator 使用的 TLS Secret 示例。

apiVersion: v1
kind: Secret
metadata:
  name: keycloak-db-ssl-cert-secret
  namespace: keycloak
type: Opaque
data:
  root.crt: {root.crt base64}

Operator 将创建名为 keycloak-postgresql 的 Service。该服务由 Operator 配置,以根据 POSTGRES_EXTERNAL_ADDRESS 的内容公开外部数据库。Red Hat Single Sign-On 使用此服务连接到数据库,这意味着它不直接连接到数据库,而是通过这个服务。

Keycloak 自定义资源需要更新才能启用外部数据库支持。

支持外部数据库的 Keycloak 自定义资源的 YAML 文件示例

apiVersion: keycloak.org/v1alpha1
kind: Keycloak
metadata:
  labels:
      app: sso
  name: example-keycloak
  namespace: keycloak
spec:
  externalDatabase:
    enabled: true
  instances: 1

先决条件

  • 您有一个用于 keycloak-db-secret 的 YAML 文件。
  • 您已修改 Keycloak 自定义资源,将 externalDatabase 设置为 true
  • 您有 cluster-admin 权限或管理员授予了同等权限的权限级别。

流程

  1. 为您的 PostgreSQL 数据库找到 secret: oc get secret <secret_for_db> -o yaml。例如:

    $ oc get secret keycloak-db-secret -o yaml
    apiVersion: v1
    data
      POSTGRES_DATABASE: cm9vdA==
      POSTGRES_EXTERNAL_ADDRESS: MTcyLjE3LjAuMw==
      POSTGRES_EXTERNAL_PORT: NTQzMg==

    POSTGRES_EXTERNAL_ADDRESS 是 Base64 格式。

  2. 解码 secret 的值: echo "<encoded_secret>" | base64 -decode.例如:

    $ echo "MTcyLjE3LjAuMw==" | base64 -decode
    192.0.2.3
  3. 确认已解码的值与您的数据库的 IP 地址匹配:

    $ 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
  4. 确认 keycloak-postgresql 出现在运行的服务列表中:

    $ 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

    keycloak-postgresql 服务将请求发送到后端的一组 IP 地址。这些 IP 地址称为端点。

  5. 查看 keycloak-postgresql 服务使用的端点,以确认它们将 IP 地址用于您的数据库:

    $ oc get endpoints keycloak-postgresql
    NAME                  ENDPOINTS         AGE
    keycloak-postgresql   192.0.2.3.5432    27m
  6. 确认 Red Hat Single Sign-On 使用外部数据库运行。本例显示一切都在运行:

    $ 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
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.