2.2. 使用 Helm Chart 配置外部 PostgreSQL 实例


您可以使用 Helm Chart 配置外部 PostgreSQL 实例。默认情况下,Helm Chart 会在部署 RHDH 实例的同一命名空间中创建和管理 PostgreSQL 本地实例。但是,您可以更改此默认设置来配置外部 PostgreSQL 数据库服务器,例如 Amazon Web Services (AWS)相关数据库服务(RDS)或 Azure 数据库。

先决条件

  • 您使用受支持的 PostgreSQL 版本。如需更多信息,请参阅 产品生命周期页面
  • 您有以下详情:

    • db-host :注意 PostgreSQL 实例域名系统(DNS)或 IP 地址
    • db-port :注意 PostgreSQL 实例端口号,如 5432
    • 用户名 :注意要连接到 PostgreSQL 实例的用户名
    • 密码 :注意连接到 PostgreSQL 实例的密码
  • 已使用 Helm Chart 安装 RHDH 应用程序。
  • 可选: 您有一个 CA 证书、传输层安全(TLS)私钥和 TLS 证书,以便您可以使用 TLS 协议保护数据库连接。如需更多信息,请参阅 PostgreSQL 供应商文档。
注意

默认情况下,Developer Hub 为每个插件使用一个数据库,并在未找到时自动创建它。除了 PSQL Database 特权外,您可能需要 Create Database 特权来配置外部 PostgreSQL 实例。

流程

  1. 可选:创建一个证书 secret 来使用 TLS 连接配置 PostgreSQL 实例:

    cat <<EOF | oc -n <your-namespace> create -f -
    apiVersion: v1
    kind: Secret
    metadata:
     name: {my-product-database-certificates-secrets} 1
    type: Opaque
    stringData:
     postgres-ca.pem: |-
      -----BEGIN CERTIFICATE-----
      <ca-certificate-key> 2
     postgres-key.key: |-
      -----BEGIN CERTIFICATE-----
      <tls-private-key> 3
     postgres-crt.pem: |-
      -----BEGIN CERTIFICATE-----
      <tls-certificate-key> 4
      # ...
    EOF
    1
    提供证书 secret 的名称。
    2
    提供 CA 证书密钥。
    3
    可选:提供 TLS 私钥。
    4
    可选:提供 TLS 证书密钥。
  2. 创建凭证 secret 以与 PostgreSQL 实例连接:

    cat <<EOF | oc -n <your-namespace> create -f -
    apiVersion: v1
    kind: Secret
    metadata:
     name: {my-product-database-secrets} 1
    type: Opaque
    stringData: 2
     POSTGRES_PASSWORD: <password>
     POSTGRES_PORT: "<db-port>"
     POSTGRES_USER: <username>
     POSTGRES_HOST: <db-host>
     PGSSLMODE: <ssl-mode> # for TLS connection 3
     NODE_EXTRA_CA_CERTS: <abs-path-to-pem-file> # for TLS connection, e.g. /opt/app-root/src/postgres-crt.pem 4
    EOF
    1
    提供凭证 secret 的名称。
    2
    提供用于连接 PostgreSQL 实例的凭证数据。
    3
    可选:根据所需的 安全套接字层(SSL)模式提供值
    4
    可选: 只有在需要 PostgreSQL 实例的 TLS 连接时才提供值。
  3. 在名为 values.yaml 的 Helm 配置文件中配置 PostgreSQL 实例:

    # ...
    upstream:
      postgresql:
        enabled: false  # disable PostgreSQL instance creation 1
        auth:
          existingSecret: {my-product-database-secrets} # inject credentials secret to Backstage 2
      backstage:
        appConfig:
          backend:
            database:
              connection:  # configure Backstage DB connection parameters
                host: ${POSTGRES_HOST}
                port: ${POSTGRES_PORT}
                user: ${POSTGRES_USER}
                password: ${POSTGRES_PASSWORD}
                ssl:
                  rejectUnauthorized: true,
                  ca:
                    $file: /opt/app-root/src/postgres-ca.pem
                  key:
                    $file: /opt/app-root/src/postgres-key.key
                  cert:
                    $file: /opt/app-root/src/postgres-crt.pem
      extraEnvVarsSecrets:
        - {my-product-database-secrets} # inject credentials secret to Backstage 3
      extraEnvVars:
        - name: BACKEND_SECRET
          valueFrom:
            secretKeyRef:
              key: backend-secret
              name: '{{ include "janus-idp.backend-secret-name" $ }}'
      extraVolumeMounts:
        - mountPath: /opt/app-root/src/dynamic-plugins-root
          name: dynamic-plugins-root
        - mountPath: /opt/app-root/src/postgres-crt.pem
          name: postgres-crt # inject TLS certificate to Backstage cont. 4
          subPath: postgres-crt.pem
        - mountPath: /opt/app-root/src/postgres-ca.pem
          name: postgres-ca # inject CA certificate to Backstage cont. 5
          subPath: postgres-ca.pem
        - mountPath: /opt/app-root/src/postgres-key.key
          name: postgres-key # inject TLS private key to Backstage cont. 6
          subPath: postgres-key.key
      extraVolumes:
        - ephemeral:
            volumeClaimTemplate:
              spec:
                accessModes:
                  - ReadWriteOnce
                resources:
                  requests:
                    storage: 1Gi
          name: dynamic-plugins-root
        - configMap:
            defaultMode: 420
            name: dynamic-plugins
            optional: true
          name: dynamic-plugins
        - name: dynamic-plugins-npmrc
          secret:
            defaultMode: 420
            optional: true
            secretName: dynamic-plugins-npmrc
        - name: postgres-crt
          secret:
            secretName: {my-product-database-certificates-secrets} 7
            # ...
    1
    upstream.postgresql.enabled 参数的值设置为 false,以禁用创建本地 PostgreSQL 实例。
    2
    提供凭证 secret 的名称。
    3
    提供凭证 secret 的名称。
    4
    可选:仅为 TLS 连接提供 TLS 证书的名称。
    5
    可选:仅为 TLS 连接提供 CA 证书的名称。
    6
    可选:仅在 TLS 连接需要私钥时提供 TLS 私钥的名称。
    7
    如果您配置了 TLS 连接,请提供证书 secret 的名称。
  4. 在名为 values.yaml 的 Helm 配置文件中应用配置更改:

    helm upgrade -n <your-namespace> <your-deploy-name> openshift-helm-charts/redhat-developer-hub -f values.yaml --version 1.4.0
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.