第6章 透明的Sidecar机制
Sidecar Injector只在创建Pod时进行Sidecar容器注入,在Pod的创建请求到达Kube-apiserver 后,首先进行认证鉴权,然后在准入控制阶段,Kube-apiserver以REST的方式同步调用Sidecar Injector Webhook服务进行init与istio-proxy容器的注入,最后将Pod对象持久化存储到etcd中。
如图:
第7章 多集群服务治理
云原生应用会越来越多地面向跨云、跨区域、跨集群的部署场景,因此支持多集群是Istio必不可少的功能之一
7.1 Istio多集群服务治理
7.1.1 Istio多集群的相关概念
◎ 集群:共享API服务器的Kubernetes节点集合。虽然还有其他集群如虚拟机集群,但是Istio社区主要支持Kubernetes集群。
◎ 网络:从网络角度来看,直接连通的一组端点(Endpoint)或者服务实例都位于同一个网络内, Istio 要求同一网络至少支持四层互通。
◎ 网格:属于同一控制面管理的工作负载集合。
在某些云环境中,网络与集群直接相关,每个集群都有自己的网络,并独立于其他集群的网络。因 此,不同的集群都可能会被分配重叠的Pod地址及服务地址。
7.2 多集群模式1:多控制面
多控制面模型原理
每个Kubernetes集群都 分别部署自己独立的Istio控制面,并且每个集群的控制面部署形态都是相似的,都各自管理自身的 Endpoint。
如图
多控制面模型特点如下:
◎ 共享根CA。为了支持安全的跨集群通信mTLS,该模型要求每个集群控制面都使用相同的中间CA 证书,供Citadel签发证书使用,以支持跨集群的TLS双向认证。
◎ 不要求不同集群之间共享网络,即容器网络不需要打通,跨集群的访问通过 Istio Gateway转发。
◎ 每个 Kubernetes集群的 Pod地址范围与服务地址范围都可以与其他集群重叠,双方集群互不干扰, 因为每个集群的Istio控制面都只管理自己集群的Endpoint。
◎ 该模型依赖于DNS解析,允许服务实例解析本集群或者远端集群的服务名称。它还扩展了Pod的DNS解析,添加了 对“.global”后缀的服务支持,以支持remote集群的服务地址解析。
在多控制面 Gateway 直连模型中,每个工作负载都可以像单集群一样使用典型的Kubernetes服务域名 访问同一集群内的服务。然而对于 Remote 集群的服务访问,Istio 扩展了CoreDNS服务器,处理“<name >.<namespace>.global”形式的服务地址解析。
在多控制面Gateway直连模型中,服务间的访问方式分为以下两种。
◎ 同一集群内部的服务访问。这种访问方式与单集群模型没有任何区别。
◎ 跨集群的服务访问。这种方式需要用户创建ServiceEntry规则,将Remote集群的服务暴露在本集群
的服务网格内,并且由于集群之间的网络并不互通,所以这种模型依赖Remote集群的Gateway中转流量。
7.2.1 服务DNS解析的原理
1.在每个Kubernetes集群中都额外部署一个istiocoredns组件
2.为Remote集群服务创建ServiceEntry
7.3 多集群模式2:vpn直连单控制面
多个集群共用同一套 Istio控制面,这套 Istio控制面感知所有集群中的 Service、Endpoint、Istio API资源等,并控制集群内或者跨集群的服务间访问。根据底层网络是否扁平, Istio设计了两种单控制面模型:
◎ 多集群容器网络通过VPN直连(Istio 1.0版本);
◎ 集群感知服务路由(Istio 1.1版本)。
在 VPN 直连的多集群中,服务网格中的每个 Pod 都可以从任何集群通过 Pod 的 IP直接访问。
如图所示为多集群VPN直连的单控制面模型
如图
只需 Istio控制面组件部署在一个集群中,就可以通
过一个控制面管理所有集群的 Service 和 Endpoint。除此之外,VirtualService、DestionationRule、Gateway 和 ServiceEntry等 API对象只需被创建在控制面所在的Kubernetes集群中,Istio本地集群的配置规则控制服 务网格所有集群内部服务间的通信、安全、遥测等。
VPN直连的多集群模型还有一个重要的要求:不同集群的服务 IP 及 Pod 的 IP 范围不能重 叠。总的来说,VPN 直连的模型虽然简洁,但是其对扁平网络的要求将很多用户都拒之门外。
7.4 多集群模式3:集群感知服务路由但控制面
Istio控制面仍然需要连接 所有Kubernetes集群的Kube-apiserver。
如果一个目标 服务实例运行在另外一个集群中,则目标集群的Gateway被用来转发服务的请求。
集群感知的服务路由核心技术就是如何为每个Sidecar都生成个性化的EDS配置(将其他
集群的服务实例地址转换成入口网关的地址),即在集群 1 的工作负载访问集群2的工作负载时,如何将 EDS配置ClusterLoadAssignment中的LbEndpoint地址转换为集群2的入口网关的地址。