Apigee mTLS 功能可进一步保护边缘中私有云集群组件之间的通信。它提供了配置和安装服务网格的业界标准方法。它支持软件包管理和配置自动化。
架构概览
为了在组件之间提供安全通信,Apigee mTLS 会使用一个服务网格,在组件之间建立相互验证的 TLS 安全连接。
下图显示了 Apigee mTLS 保护的 Apigee 组件之间的连接 (in red)。图中显示的端口便是示例;如需查看每个组件可以使用的范围列表,请参阅端口使用情况。
(请注意,带有“M”标记的端口用于管理组件,并且必须在组件上对管理服务器开放。)
如上图所示,Apigee mTLS 可提高集群中大多数组件之间的连接的安全性,包括:
来源 | 目标 | |
---|---|---|
管理服务器 | 路由器、MP、QPid、 LDAP、Postgres、Zookeeper 和 Cassandra 节点 | |
路由器 | 环回;Qpid、Zookeeper 和 Cassandra 节点 | |
消息处理器 | 环回;Qpid、Zookeeper 和 Cassandra 节点 | |
ZooKeeper 和 Cassandra | 其他 Zookeeper 和 Cassandra 节点 | |
边缘界面 | SMTP(仅限外部 IdP) | |
Postgres | 其他 Postgres、Zookeeper 和 Cassandra 节点 |
消息加密/解密
Apigee mTLS 服务网格由在集群中的每个 ZooKeeper 节点上运行的 Consul 服务器组成,并在集群中的每个节点上运行以下 Consul 服务:
- 拦截主机节点上外发消息的出站代理。此服务会在外发消息发送到目的地之前对其进行加密。
- 拦截主机节点上的传入消息的入站流量代理。此服务会先对传入的消息进行解密,然后再将其发送到最终目的地。
例如,当管理服务器向路由器发送消息时,出站代理服务会拦截外发消息,对其进行加密,然后将其发送到路由器。当路由器的节点收到消息后,Ingress 代理服务会解密消息,然后将其传递给路由器组件进行处理。
这些都将以透明方式在 Edge 组件中发生:它们不知道 Consul 代理服务执行的加密和解密过程。
此外,Apigee mTLS 使用用于管理流量重定向的 Linux 防火墙服务 iptables
实用程序。
要求
您的环境必须满足以下要求,您才能安装 Apigee mTLS:
以下各部分详细介绍了这些要求。
版本、平台和拓扑
下表列出了 mTLS 要求:
要求 | 说明 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
版本 |
|
||||||||||||
拓扑 | 必须包含至少三个 Zookeeper 节点。因此,您只能在使用 5 个、9 个、12 个(多数据中心)或 13 个节点的拓扑中安装 Apigee mTLS。如需了解详情,请参阅安装拓扑。 | ||||||||||||
平台/操作系统 | 使用以下值确定特定操作系统是否支持 Apigee mTLS:
请注意,Apigee mTLS 不一定支持其运行所在的私有云版本对应的 Apigee Edge 支持的所有操作系统。 例如,如果 v4.19.06 支持 CentOS x 和 y,并不一定意味着 v4.19.06 的 CentOS x 和 y 支持 Apigee mTLS。 |
实用程序/软件包
Apigee mTLS 要求您在开始安装过程之前,在集群(包括管理机器)中的每台机器上安装并启用以下软件包:
实用程序/软件包 | 说明 | 安装后可以移除吗? |
---|---|---|
base64 |
验证安装脚本中的数据。 | |
gnu-bash gnu-sed gnu-grep |
供安装脚本和其他常用工具使用。 | |
iptables |
取代默认防火墙 firewalld 。 |
|
iptables-services |
为 iptables 实用程序提供功能。 |
|
lsof |
供安装脚本使用。 | |
nc |
验证 iptables 路由。 |
|
openssl |
在初始引导过程中在本地对证书签名。 |
在安装过程中,您还可以在管理机器上安装 Consul 软件包,以便生成凭据和加密密钥。
apigee-mtls
软件包会在集群中的 ZooKeeper 节点上安装和配置 Consul 服务器,包括入站流量代理和出站流量代理。
用户帐号权限
在安装之前,请创建一个新的用户帐号,或确保您有权访问具有较高权限的帐号。
在集群中的每个节点上执行 Apigee mTLS 安装的帐号必须能够:
- 启动、停止、重启和初始化 Apigee 组件
- 设置防火墙规则
- 创建新的操作系统/系统用户帐号
- 通过
systemctl
启用、停用、启动、停止和掩盖服务
管理机器(推荐)
Apigee 建议在集群内设置一个节点,您可以在该节点上执行本文档中所述的各种管理任务,包括:
- 安装 HashiCorp Consul 1.6.2。
- 生成并分发证书/密钥对和八卦加密密钥。
- 更新和分发配置文件。
设置管理机器时:
- 确保您拥有该权限的 root 访问权限。
- 下载并安装
apigee-service
和apigee-setup
实用程序,如安装 Edge apigee-setup 实用程序中所述。 - 确保您可以使用
scp/ssh
从管理机器访问集群中的所有节点。这是必需步骤,以便您可以分发配置文件和凭据。
端口使用情况和分配
本部分介绍端口用法和端口分配,以支持与 Apigee mTLS 的 Consul 通信。
端口用量:所有运行 apigee-mtls 的节点
集群中使用 apigee-mtls
服务的所有节点都必须允许来自本地主机上的服务 (127.0.0.1) 的连接。这样可以让 Consul 代理在处理传入和传出消息时与其他服务通信。
端口使用情况:Consul 服务器节点(运行 ZooKeeper 的节点)
您必须打开 Consul 服务器节点上(运行 ZooKeeper 的节点)上的以下端口,才能接受集群中的所有节点发出的请求:
节点 | Consul 服务器端口 | 说明 | 协议 | 允许外部 mtls-agent * |
---|---|---|---|---|
Consul 服务器(ZooKeeper 节点) | 8300 |
连接集群中的所有 Consul 服务器。 | RPC | |
8301 |
处理集群内的成员资格和广播消息。 | UDP/TCP | ||
8302 |
用于处理多数据中心配置中的成员资格和广播消息的 WAN 端口。 | UDP/TCP | ||
8500 |
处理从同一节点上的进程到 Consul Server API 的 HTTP 连接。
此端口不用于远程通信或协调;它仅监听本地主机。 |
HTTP | ||
8502 |
处理从集群中的其他节点到 Consul Server API 的 gRPC+HTTPS 连接。 | gRPC+HTTPS | ||
8503 |
处理从集群中的其他节点到 Consul Server API 的 HTTPS 连接。 | HTTPS | ||
8600 |
处理 Consul 服务器的 DNS。 | UDP/TCP | ||
* Apigee 建议您仅向集群成员(包括跨数据存储区)发送入站请求。您可以使用 iptables 来实现此目的。
|
如上表所示,运行 consul-server
组件(ZooKeeper 节点)的节点必须打开端口 8301、8302、8502 和 8503,以便向运行 apigee-mtls
服务的集群的所有成员开放,甚至能跨数据中心运行。未运行 ZooKeeper 的节点不需要打开这些端口。
所有 Consul 节点(包括运行 ZooKeeper 的节点)的端口分配
如需支持 Consul 通信,运行以下 Apigee 组件的节点必须允许外部连接以下范围内的端口:
Apigee 组件 | 范围 | 每个节点所需的端口数 |
---|---|---|
Apigee mTLS | 10700 至 10799 | 1 |
Cassandra | 10100 至 10199 | 2 |
消息处理器 | 10500 至 10599 | 2 |
OpenLDAP | 10200 至 10299 | 1 |
Postgres | 10300 至 10399 | 3 |
QPID | 10400 至 10499 | 2 |
路由器 | 10600 至 10699 | 2 |
ZooKeeper | 10001 至 10099 | 3 |
Consul 以简单的线性方式分配端口。例如,如果您的集群有两个 Postgres 节点,第一个节点会使用两个端口,因此 Consul 会为其分配端口 10300 和 10301。第二个节点还使用两个端口,因此 Consol 将 10302 和 10303 分配给该节点。这适用于所有组件类型。
如您所见,实际端口数取决于拓扑:如果您的集群有两个 Postgres 节点,则您需要打开四个端口(两个节点乘以两个端口)。
请注意以下几点:
- Consul 代理不能与 Apigee 服务侦听同一端口。
- Consul 只有一个端口地址空间。Consul 代理端口分配在集群(包括数据中心)中必须是唯一的。也就是说,如果主机 A 上的代理 A 监听端口 15000,则主机 B 上的代理 B 将无法监听端口 15000。
- 如上所述,所使用的端口数量因拓扑而异。
在多数据中心配置中,所有运行 mTLS 的主机还必须打开端口 8302。
您可以自定义 Apigee mTLS 使用的默认端口。如需了解如何执行此操作,请参阅代理端口范围自定义。
限制
Apigee mTLS 具有以下限制:
- 不加密节点间 Cassandra 通信(端口 7000)
- 配置和设置不具有幂等性。这意味着,如果您在一个节点上进行一次更改,则必须在所有节点上进行相同更改;系统不会为您在任何其他节点上应用此更改。如需了解详情,请参阅更改现有的 apigee-mtls 配置。
术语
本部分使用以下术语:
术语 | 定义 |
---|---|
集群 | 构成私有云安装边缘的机器组。 |
领事 | Apigee mTLS 使用的服务网格。如需了解 Consul 如何保护您的私有云通信,请参阅 Consul 的安全模型。 |
mTLS | 相互进行身份验证的 TLS。 |
服务网格 | 叠加网络(或网络中的网络)。 |
TLS | 事务层安全。用于安全通信的业界标准身份验证协议。 |