服务网格本质上是将一组单独的微服务组合成单个可控的复合应用程序,Istio作为一种服务网格,也是旨在单一管理域下监视和管理协作微服务网络。对于特定大小的应用程序,所有微服务是可以在单个编排平台如一个Kubernetes集群上运行的。然而,由于规模不断增大或者冗余等原因,大多数应用程序最终将需要分发一些服务在其他地方运行。
社区越来越关注在多个集群上运行工作负载,以实现更好的扩展,故障可以更好地隔离,从而提升应用程序的敏捷性。Istio v1.0开始支持一些多集群功能,并在之后的版本中添加了新功能。
Istio服务网格支持许多可能的拓扑结构,用于在单个集群之外分发应用程序的服务,有两种常见的模式或用例:单网格和网格联合。顾名思义,单个网格将多个集群组合成一个单元,由一个Istio控制平面管理;它可以实现为一个物理控制平面,也可以实现为一组控制平面,同时所有控制平面都能通过复制配置保持同步。而网格联合则会将多个集群分离作为单独的管理域,有选择地完成集群之间的连接,仅将服务的子集暴露给其他集群;自然它的实现会包含多个控制平面。具体来说,这些不同的拓扑结构包括以下几个方面:
·网格中的服务可以使用服务条目(Service Entry)来访问独立的外部服务或访问由另一个松散耦合的服务网格公开的服务,通常称为网格联邦(Mesh Federation)。这种拓扑适合于互相独立并且网络隔离、只能通过公网交互的多集群的场景。
·支持在虚拟机或物理裸机上运行的服务进行服务网格扩展,通常称为网格联合(Mesh Expansion)。在前面章节中,我们已经讲述了这种Kubernetes集群与虚拟机、物理裸机之间混合部署的场景。
·把来自多个集群的服务组合到单个服务网格中,通常称为多集群网格(Multicluster Mesh)。根据网络拓扑结构的不同,多集群网格通常分为单控制平面VPN连接、单控制平面网关连接以及多控制平面拓扑。