Sidecar机制和istio多集群服务治理

  • Post author:
  • Post category:其他


第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的入口网关的地址。



版权声明:本文为h2604396739原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。