在以下两种情况下,您可以安装多个 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。如需了解详情,请参阅以下部分。
- 将负载均衡器配置为对 SSO 执行 TCP 或 HTTP 健康检查。对于 HTTP,请添加
对 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 会话:
- 按照处理 PostgreSQL 数据库故障切换中的说明,将数据中心 2 中的 Postgres 备用服务器转换为主服务器。
- 更新 DNS 记录,以将
my-sso.domain.com指向 数据中心 2 中的 SSO 实例:my-sso.domain.com => apigee-sso-dc2-ip-or-lb
- 更新数据中心 2 中 Apigee SSO 的
/opt/silent.conf文件,以指向数据中心 2 中的新 Postgres 主 服务器:## Postgres configuration PG_HOST=IP_or_DNS_of_PG_Master_in_DC2 - 重新配置并重启数据中心 2 中的 Apigee SSO,以原生更新其连接:
/opt/apigee/apigee-service/bin/apigee-service apigee-openldap setup-sso -f /opt/silent.conf