安装 Apigee SSO 以实现高可用性

在以下两种情况下,您可以安装多个 Apigee SSO 实例以实现高可用性:

  • 在单个数据中心环境中,安装两个 Apigee SSO 实例以创建高 可用性环境,这意味着如果其中一个 SSO 模块出现故障,系统会继续运行。
  • 在包含两个数据中心的环境中,在两个数据中心内都安装 Apigee SSO,这样如果一个数据中心内的 Apigee SSO 出现故障,系统会继续运行。

在同一数据中心内安装两个 Apigee SSO 模块

您可以在单个数据中心内的不同 apigee-openldap 节点上部署两个 Apigee SSO 实例,以支持 高可用性。在这种情况下:

  • 这两个 Apigee SSO 实例必须连接到同一 Postgres 服务器。Apigee 建议 为 Apigee SSO 使用专用 Postgres 服务器,而不是与 Edge 一起安装的 Postgres 服务器。这两个实例必须共享 apigee_dex 数据库,以实现状态持久性。
  • 无需手动分发 JWT 密钥: 与旧版 UAA 组件不同,现代化的 Apigee SSO 会将 JSON Web 密钥集 (JWKS) 和 OAuth2 状态原生存储并同步到共享的 PostgreSQL 数据库中。您无需手动跨节点复制签名密钥。
  • 内部 OpenLDAP 的凭据同步: 如果您使用的是默认内部 OpenLDAP,Apigee SSO 会使用专用只读服务账号 (cn=sso-reader)。对于 HA(节点 2),管理员必须在两个节点上的 /opt/silent.conf 中设置相同的 SSO_READER_PW,或者在节点 2 上运行 setup-sso 之前,将 /opt/apigee/data/apigee-openldap/sso-reader.key 从节点 1 复制到节点 2。

    如需手动复制密钥文件,请在节点 2 上执行以下命令:

    scp node1_ip:/opt/apigee/data/apigee-openldap/sso-reader.key /opt/apigee/data/apigee-openldap/sso-reader.key
    chown apigee:apigee /opt/apigee/data/apigee-openldap/sso-reader.key
    chmod 600 /opt/apigee/data/apigee-openldap/sso-reader.key
  • 您需要在两个 Apigee SSO 实例前面放置一个负载均衡器:
    • 将负载均衡器配置为对 SSO 执行 TCP 或 HTTP 健康检查。对于 HTTP,请添加 /healthz:
      http_or_https://edge_sso_IP_DNS:9099/healthz

      指定由 Apigee SSO 设置的端口。默认端口为 9099。

    • 某些负载均衡器设置取决于您是否在 Apigee SSO 上启用了 HTTPS。如需了解详情,请参阅以下部分。

对 Apigee SSO 的 HTTP 访问

如果您使用 HTTP 访问 Apigee SSO,请将负载均衡器配置为:

  • 使用 HTTP 模式连接到 Apigee SSO。
  • 监听与 Apigee SSO 相同的端口。

默认情况下,Apigee SSO 会监听端口 9099 上的 HTTP 请求。您也可以选择在/opt/silent.conf 文件中使用 SSO_PUBLIC_URL_PORT 来设置端口。如果您使用 SSO_PUBLIC_URL_PORT 将端口从默认端口更改为其他端口,请确保负载均衡器监听该 端口。

例如,在每个 SSO 实例上,您可以通过将以下内容添加到 配置文件中,将端口设置为 9033:

SSO_PUBLIC_URL_PORT=9033

然后,您将负载均衡器配置为监听端口 9033,并将请求转发到端口 9033 上的 SSO 实例。在这种情况下,Apigee SSO 的公开网址为:

http://LB_DNS_NAME:9033

对 Apigee SSO 的 HTTPS 访问

您可以使用以下两种模式中的任意一种来配置具有 HTTPS 的 HA。在这两种情况下,请按照为 HTTPS 访问配置 Apigee SSO中的详细设置步骤操作。

模式 1:负载均衡器终止 TLS (SSL_PROXY)

如果您的负载均衡器终止 TLS 连接,则必须将纯 HTTP 流量转发到 Apigee SSO 实例。

  • 在 /opt/silent.conf 文件中设置 SSO_PUBLIC_URL_SCHEME=https 和 SSO_PUBLIC_URL_PORT=443(或负载均衡器的公开 HTTPS 端口)。
  • 将负载均衡器配置为使用 HTTP 模式 连接到后端 Apigee SSO 实例。
  • 将负载均衡器配置为将请求转发到本地 HTTP 绑定端口(默认值:9099)上的 Apigee SSO 实例。

模式 2:Apigee SSO 终止 TLS (SSL_TERMINATION)

如果您希望 Apigee SSO 实例直接终止 TLS 连接,则负载均衡器必须将加密流量传递给这些实例。

  • 在 /opt/silent.conf 文件中设置 SSO_PUBLIC_URL_SCHEME=https 和 SSO_PUBLIC_URL_PORT=9443(或您选择的安全端口)。
  • 将负载均衡器配置为使用 TCP 模式 (而不是 HTTP 模式)连接到后端,从而允许 Apigee SSO 终止 TLS。
  • 将负载均衡器配置为监听与 Apigee SSO 相同的端口,并将请求转发到安全端口(例如 9443)上的 Apigee SSO 实例。

在多个数据中心内安装 Apigee SSO

在多数据中心环境中,您可以在每个数据中心内安装一个 Apigee SSO 实例(通过 apigee-openldap)。 一个 SSO 实例处理所有流量。如果该实例出现故障,您可以 将流量切换到第二个 SSO 实例。

在两个数据中心内安装 Apigee SSO 之前,您需要以下内容:

  • 主 Postgres 服务器的 IP 地址或域名。

    在多数据中心环境中,您通常会在每个数据 中心内安装一个 Postgres 服务器,并以主备复制模式对其进行配置。在此示例中,数据 中心 1 包含主 Postgres 服务器,数据中心 2 包含备用。如需了解详情,请参阅为 Postgres 设置主备复制。

  • 指向一个 SSO 实例的单个 DNS 条目。 例如,您可以创建以下形式的 DNS 条目,该条目指向数据中心 1 中的 SSO 实例:
    my-sso.domain.com => apigee-sso-dc1-ip-or-lb
  • 同步的 OpenLDAP 读取器凭据。 如果您使用的是内部 OpenLDAP,则必须确保两个数据中心使用完全相同的 SSO_READER_PW 或共享相同的 sso-reader.key 文件,以防止在设置期间出现集群不同步的情况。

在每个数据中心内配置 Apigee SSO 时,您需要将这两个配置指向数据中心 1 中的 Postgres 主服务器 :

## Postgres configuration
PG_HOST=IP_or_DNS_of_PG_Master_in_DC1
PG_PORT=5432

您还必须将这两个数据中心配置为使用共享 DNS 条目作为可公开访问的网址。由于 setup-sso 脚本会自动构建网址并附加端口,因此您必须直接在 /opt/apigee/customer/application/openldap.properties 中设置确切的网址,而不是在 /opt/silent.conf 中设置,以防止在不需要时附加端口:

# Externally accessible URL of the Apigee SSO
etc_sso_config_issuer_url=https://my-sso.domain.com

处理 SSO 故障转移

如果数据中心 1 中的 Apigee SSO 实例(或其 Postgres 主服务器)出现故障,您可以切换到数据 中心 2 中的 SSO 实例,而不会丢失活跃的 OAuth 会话:

  1. 按照处理 PostgreSQL 数据库故障切换中的说明,将数据中心 2 中的 Postgres 备用服务器转换为主服务器。
  2. 更新 DNS 记录,以将 my-sso.domain.com 指向 数据中心 2 中的 SSO 实例:
    my-sso.domain.com => apigee-sso-dc2-ip-or-lb
  3. 更新数据中心 2 中 Apigee SSO 的 /opt/silent.conf 文件,以指向数据中心 2 中的新 Postgres 主 服务器:
    ## Postgres configuration
    PG_HOST=IP_or_DNS_of_PG_Master_in_DC2
  4. 重新配置并重启数据中心 2 中的 Apigee SSO,以原生更新其连接:
    /opt/apigee/apigee-service/bin/apigee-service apigee-openldap setup-sso -f /opt/silent.conf