一、前言¶
在本章节中,我们将了解在多个集群上安装 Istio 的不同方法。当决定在多集群场景下运行 Istio 时,有多种组合需要考虑。
单集群部署模型就不介绍了,这里我们介绍两个集群的部署模型。三个以上集群也是类似的:
- 单个集群或多个集群
- 单个网络或多个网络
- 单个控制平面或多个控制平面
- 单个网格或多个网格
上述模式的任何组合都是可能的,然而,并非所有的模式都有意义。在本章节中,我们将重点讨论涉及多个集群的场景。
二、多集群部署¶
多集群部署是指:两个或更多的集群,为我们提供了更强大的隔离和可用性。但我们付 出的代价是增加了复杂性。
如果场景要求高可用性(HA),我们将不得不在多个区域和地区部署集群。 一个网格可以包含多个集群。使用多集群部署可以在一个网格中提供如下功能:
- 弹性和冗余:通过多集群架构,可以将应用程序部署在不同地理位置的集群中,实 现高可用性和容灾能力。当一个集群发生故障或遇到性能问题时,可以将流量自动 切换到其他健康的集群,保证服务的可靠性和稳定性。
- 地理就近性:多集群架构允许将应用程序部署在距离用户更近的集群中,从而减少 网络延迟,提高用户体验。通过智能的流量路由策略,可以根据用户的地理位置将 请求发送到最近的集群,减少数据传输时间。
- 扩展性和资源隔离:多集群架构提供了水平扩展的能力,可以将负载分散到多个集 群中,以满足不断增长的业务需求。此外,每个集群都有自己的资源池,可以隔离 和管理不同的工作负载,避免彼此之间的干扰。
- 遵循合规性要求:某些情况下,应用程序需要根据法规或合规性要求在特定地理区 域中进行部署和管理。多集群架构可以满足这些要求,确保数据存储和处理符合相 关的法规和隐私政策。
- 灵活的部署和更新策略:通过多集群架构,可以实施蓝绿部署、金丝雀发布等灰度 发布策略。不同版本的应用程序可以在不同的集群中运行,逐步测试和验证新功 能,最大程度上减少对用户的影响。
- 简化治理和管理:Istio 提供了统一的服务发现、流量管理、安全认证和监控能力, 使得在多集群环境中实现一致的服务治理和管理变得更加容易。通过集中式的控制 平面,可以集中管理和配置所有集群的策略和规则,降低管理复杂性。
下图显示了一个多集群方案(集群 A、B 和 C),跨两个网络部署。
多集群服务网格图如下:

注释:
- Cluster A 与 Cluster B C 处在不同的2个 network 层面;
- Cluster A 与 Cluster B C 共用一套控制层面;
- Cluster A 与 Cluster B C 之间的网络互不干扰;
- Cluster B 与 Cluster C 之间的 SVC 可以互相访问;
三、网络模型¶
网络可以是多网络,或单网络。有些多的集群也可以几个集群在一个网络,和其他集群 不在一个网络。单网络的性能相对比较好一点,因为pod可以直接通信。多网络需要一个东西向网关进行通信,但能对应用进行隔离。
多网络服务网格如下:

注释:
- cluster1 在 network1, cluster2 在 network2, cluster1 有一个 istiod, cluster2 使用 cluster1 的 istiod。
- cluster1 的 service 直接注册到 istiod, cluster2 的 service 通过 cluster1 的东西向网关注册到 istiod。
- cluster1 的 service 通过 cluster2 的东西向网关访问 cluster2 的 service, cluster2 得 service 通过 cluster1 的东西向网关访问 cluster1的service 。
- cluster1的istiod 同时监控 cluster1的apiserver 和 cluster2的apiserver 。
当涉及到多个网络时,集群内部运行的工作负载必须使用 Istio 网关才能到达其他集群的工作负载。使用多个网络可以实现更好的容错和网络地址的扩展。
单网络服务网格如下:

注释:
- 集群 cluster1 和 cluster2 在同一个 network1 网络, cluster1 有一个 istiod, cluster2 没有控制层面。
- cluster1 istiod 会监控 cluster1 apidserver 和 cluster2 apiserver,所以要配置访问 cluster2 apiserver的 secret。
- cluster1 svc 直接注册到 istiod 中, cluster2 svc 通过东西向网关注册到 istiod 中, cluster1 的 svc 和 cluster2 的 svc 可以直接访问。
- cluster2 没有东西向网关。
四、控制平面模型¶
控制面可以是单个控制面也可以是多个控制面;或者混合使用,部分集群共享一个控制面,和其他集群则是多个控制面。多控制面有如下好处:
- 提升可用性:如果一个控制面不可用,停机的范围将仅限于该控制平面
- 配置隔离:可以修改一个集群,zone或region中的配置,而不会影响另外一个控制面的配置。
在最简单的情况下,我们有一个服务网格,在一个集群中只有一个控制平面。这就是我们在本课程中一直使用的配置。
共享控制平面模型涉及多个集群,控制平面只在一个集群中运行。该集群被称为主集 群,而部署中的其他集群被称为远程集群。这些集群没有自己的控制平面,相反,它们 从主集群共享控制平面。
共享的控制平面图如下:

注释:
- 2个集群在一个网络中, Primary Cluster 有一个 istiod, Remote Cluster 没 有istiod。
- Remote Cluster 直接链接 Primary Cluster 的 istiod, Service 通过 Primary Cluster 的东西向网关链接Primary Cluster 的istiod
- Primary Cluster 和 Remote Cluster 的 service 直接相互连接。
- Primary Cluster 的 istiod 监控2个集群的 apiserver 。
另一种部署模式是,我们把所有的集群都视为由外部控制平面控制的远程集群。 这样我们在控制平面和数据平面之间有了完全的分离。一个典型的外部控制平面的例子是当一个云供应商在管理它。
为了实现高可用性,我们应该在多个集群、区域或地区部署多个控制平面实例,如下图 所示。
多个控制平面图如下:

注释:
- clusterA和clusterB 使用同一个控制层面, clusterC和clusterD 使用同一个控制层面。 clusterA和clusterC 分别有一个 istiod。
- clusterA的istiod 监控 clusterA和clusterB 的 apiserver, clusterC的istiod 监控 clusterC和clusterD 的 apiserver 。
- clusterA的service 链接 clusterA的istiod , clusterC的service 链接clusterC的istiod 。
- clusterA的service 和 clusterC的service 也可以直接链接。
这种模式提供了更好的可用性和配置隔离。如果其中一个控制平面变得不可用,那么停 机就只限于这一个控制平面。
为了改善这一点,你可以实施故障转移,并配置工作负载实例,在发生故障时连接到另 一个控制平面。
当然为了达到最高的可用性,我们可以在每个集群内部署一个控制平面
五、网格部署模型¶
到目前为止,我们课程中所讲到的场景均是使用单一的网格。 在单网格模型中,所有的服务都在一个网格中,不管它们跨越多少集群和网络。
将多个网格联合起来的部署模型被称为多网格部署。在这种模式下,服务可以跨网格边 界进行通信。该模型为我们提供了一个更清晰的组织边界,更强的隔离性,并允许我们 重复使用服务名称和命名空间。
当联合两个网格时,每个网格可以暴露一组服务和身份,所有参与的网格都可以识别这 些身份。为了实现跨网格的服务通信,我们必须在两个网格之间实现信任。信任可以通 过向网格导入信任包和为这些身份配置本地策略来建立。
六、租户模式¶
租户是一组共享工作负载的共同访问权和权限的用户。租户之间的隔离是通过网络配置和策略完成的。Istio 支持命名空间和集群租户。大家注意,我们在这里谈论的租户是软多租户,而不是硬租户。当多个租户共享同一个 Istio 控制平面时,没有保证对诸如噪音邻居问题的保护。
在一个网格中,Istio 使用命名空间作为租户的单位。如果使用 Kubernetes,我们可以 为每个命名空间的工作负载部署授予权限。默认情况下,来自不同命名空间的服务可以 通过完全限定相互通信。
在安全模块中,我们已经学会了如何使用授权策略来提高隔离度,并限制只对适当的调用者进行访问。
在多集群部署模型中,每个集群中共享相同名称的命名空间被认为是同一个命名空间。 集群 A 中 def aul t 命名空间的 Customers 服务与集群 B 中 def aul t 命名空间中的 Customers 服务指的是同一个服务。当流量被发送到 Customers 服务时,负载均衡在两个服务的合并端点上进行,如下图所示。

为了在 Istio 中配置集群租约,我们需要将每个集群配置为一个独立的服务网格。网格可以由不同的团队控制和操作,我们可以将网格连接到一起,形成一个多网格部署。如果
我们使用与之前相同的例子, 在集群 A 的 default 命名空间中运行的服务 Customers 与集群 B 的 default 命名空间中的服务Customers所指的不是同一个服务。
租户的另一个重要功能是隔离不同租户的配置。目前,Istio 并没有解决这个问题,不过,它通过在命名空间级别上的范围配置来尝试解决这个问题。
七、总结¶
7.1 多集群要点¶
Q: istiod 监视 apiserver ?
A:每个 istiod 需要监视所有集群的 apiserver。
Q: service 连接到 istiod ?
A:如果多个集群共享一个 istiod,其他集群的 service 必须通过 istiod 所在集群 的东西向网关连接到
Q:不同集群之间 service 怎么访问 ?
A:如果在同一个网络 service 可以直接访问,如果不在一个网络 service 必须通过其他集群的东西向网关访问。
7.2 部署模型选择¶
考虑因素:网络隔离性,集群容错,配置隔离性。
1、如果网络需要强隔离,则选择多网络模型,否则选择单网络模型。
2、如果控制平面容错要高,则选择多控制平面模型,否则可以选择单控制平面。
3、如果 istio 相关配置需要隔离,不同集群同一个服务配置不一样,则采用多控制平面模型,否则采用单控制平面模型。