基础概念
集群:共享API服务器的Kubernetes节点集合
网络:从网络角度来看,直接连通的一组端点(Endpoint)或者服务实例都位于同一个网络内,Istio 要求同一网络至少支持四层互通
网格:属于同一控制面管理的工作负载集合
单个网格:将多个集群组合成一个单元,由一个Istio控制平面管理;它可以实现为一个物理控制平面,也可以实现为一组控制平面,同时所有控制平面都能通过复制配置保持同步。
网格联合:将多个集群分离作为单独的管理域,有选择地完成集群之间的连接,仅将服务的子集暴露给其他集群;自然它的实现会包含多个控制平面。
网格中的服务可以使用服务条目(Service Entry)来访问独立的外部服务或访问由另一个松散耦合的服务网格公开的服务,通常称为网格联邦(Mesh Federation)。这种拓扑适合于互相独立并且网络隔离、只能通过公网交互的多集群的场景。
来自多个集群的服务组合到单个服务网格中,通常称为多集群网格(Multicluster Mesh)。根据网络拓扑结构的不同,多集群网格通常分为单控制平面VPN连接、单控制平面网关连接以及多控制平面拓扑
单控制平面VPN连接
前提:它允许多个集群连接到网格中,但所有集群都在一个共享网络上。也就是说,所有集群中所有pod和服务的IP地址都是可直接路由的,不会发生冲突,同时保证在一个集群中分配的IP地址不会在另一个集群中同时重用。
将istio-remote组件部署到每个远程Kubernetes集群。等待Istio控制平面完成初始化,然后再执行本节中的步骤。你必须在Istio控制平面集群上运行这些操作以捕获Istio控制平面服务端点
单控制平面拓扑
多个Kubernetes集群共同使用在其中一个集群上运行的单个Istio控制平面。控制平面的Pilot管理本地和远程集群上的服务,并为所有集群配置Envoy Sidecar代理。
单一控制平面拓扑配置下,使用Istio的Split-horizon EDS(水平分割端点发现服务)功能可以通过其入口网关将服务请求路由到其他集群。基于请求源的位置,Istio能够将请求路由到不同的端点
从一个集群中的Sidecar代理到同一集群中的服务的请求仍然被转发到本地服务IP。如果目标工作负载在其他集群中运行,则使用远程集群的网关IP来连接到该服务
从共享的根CA为每个集群的Citadel生成中间CA证书,共享的根CA启用跨不同集群的双向TLS通信
多控制平面拓扑
在多控制平面拓扑的配置中,每个Kubernetes集群都会安装相同的Istio控制平面,并且每个控制平面只会管理自己集群内的服务端点。通过使用Istio网关、公共根证书颁发机构(CA)以及服务条目ServiceEntry,可以将多个集群配置组成一个逻辑上的单一服务网格。这种方法没有特殊的网络要求,因此通常被认为是在Kubernetes集群之间没有通用网络连接时的一种最简单方法。