摘要:本文主要集中剖析Ambient mesh七层服务治理相关内容 。本文分享自华为云社区《Istio Ambient Mesh七层服务治理图文详解》,作者:华为云云原生团队 。
由于Ambient mesh的工作原理比较复杂,我们在上一篇文章《深度剖析!Istio共享代理新模式Ambient Mesh》中主要剖析了Ambient mesh四层流量治理 。因此本文主要集中剖析七层治理部分 。建议在阅读本文之前 , 读者朋友先浏览上一篇文章 。
Ambient Mesh七层治理架构Ambient mesh默认对服务只进行四层治理,用户需要通过定义Gateway资源对象显式的启动七层治理 。
apiVersion: gateway.networking.k8s.io/v1alpha2kind: Gatewaymetadata:name: productpageannotations:istio.io/service-account: bookinfo-productpagespec:gatewayClassName: istio-mesh
文章插图
七层治理架构
如图所示,相比Ambient mesh四层服务治理,七层服务治理增加了新的waypoint组件 , 这是七层治理的核心组件,本质上waypoint也是通过envoy实现 。服务网格七层的治理策略均作用在waypoint上 。Sidecar模式Istio七层治理时,流量在客户端和服务端的Sidecar中分别进行七层协议的编解码等操作;而七层流量在Ambient mesh中,七层流量的处理只在一个waypoint中 。默认, Pilot通过监听Gateway对象,负责创建单实例的waypoint,那么所有的到Productpage的七层流量均由waypoint代理 。生产环境中,单实例waypoint往往不满足高可用、高并发的要求 , 因此waypoint的扩容策略还需要用户通过第三方软件例如HPA来实现 。
Ambient Mesh七层流量治理详解
文章插图
本例服务部署模型
Sleep发送侧流量处理(1)sleep访问productpage的流量被同节点的tunnel以TPROXY(透明代理)方式拦截转发到ztunnel(监听127.0.0.1:15001),使用TPROXY的好处是保留原始的目的地址 , ztunnel做转发时必须依赖原始目的地址 。这里的拦截方式与前一篇文章中讲的四层流量治理的拦截完全相同 , 因为在Ambient Mesh中网络层的拦截完全不感知应用层L7协议 。
-A PREROUTING -i pistioout -p tcp -j TPROXY --on-port 15001 --on-ip 127.0.0.1 --tproxy-mark 0x400/0xfff(2)ztunnel通过ztunnel_outbound监听器,监听在15001端口 。ztunnel_outbound监听器与Istio Sidecar模式的监听器完全不同 , 它包含所有本节点上的服务到整个网格其他服务的FilterChain(过滤器链) 。
文章插图
ztunnel_outbound监听器
ztunnel_outbound监听器如何选择合适的FilterChain处理流量的呢?如下图所示,ztunnel_outbound监听器中设置了filter_chain_matcher 。其中通过匹配数据包的源IP(10.244.1.4,即sleep容器的地址)、目的IP(10.96.179.71,即produtpage服务的ClusterIP)及目的端口(9080即productpage服务端口号),可以选择名称为"spiffe://cluster.local/ns/default/sa/sleep_to_server_waypoint_proxy_spiffe://cluster.local/ns/default/sa/bookinfo-productpage"的FilterChain来处理Sleep发往Productpage的请求 。
文章插图
FilterChain 匹配器
(3)"spiffe://cluster.local/ns/default/sa/sleep_to_server_waypoint_proxy_spiffe://cluster.local/ns/default/sa/bookinfo-productpage" FilterChain,包含一个TCPProxy过滤器,并且关联到与FilterChain同名的Cluster 。即访问请求交由同名的 Cluster处理
文章插图
FilterChain
(4)"spiffe://cluster.local/ns/default/sa/sleep_to_server_waypoint_proxy_spiffe://cluster.local/ns/default/sa/bookinfo-productpage" Cluster为EDS类型,包含的Endpoint地址为10.244.1.8:15006,即waypoint容器的监听地址 。后面我们可以看到waypoint中有监听器监听在15006端口 。此Cluster负责将流量进行加密,然后发送到waypoint(10.244.1.8:15006) 。
文章插图
Sleep到Productpage的Cluster
文章插图
Sleep到Productpage的Endpoint
Waypoint转发(1)Waypoint首先通过”inbound_CONNECT_terminate”监听器接收Sleep访问Productpage的请求 。此监听器上面配置有DownstreamTlsContext , 其负责对下游请求进行TLS终止 。另外此监听器只有一个FilterChain,包含用于处理HTTP请求的HTTP Connection Manager过滤器 。它的核心思想是通过匹配Authority(10.96.179.71:9080,也是原始目的地址)以及CONNECT请求方法进行路由 , 匹配成功后,选择”inbound-vip|9080|internal|productpage.default.svc.cluster.local” 的 Cluster进行处理 。
推荐阅读
- 十三 Istio:Istio项目实际案例——Online Boutique
- 十一 Istio:向istio服务网格中引入虚拟机
- 九 Istio:istio安全之授权
- 五 Istio:使用服务网格Istio进行流量路由
- 鹅长微服务发现与治理巨作PolarisMesh实践-上
- 二 Istio:在Kubernetes(k8s)集群上安装部署istio1.14
- 如何用AR Engine环境Mesh能力实现虚实遮挡
- 单珠网眼布英语怎么说
- gnomeshgh什么意思
- MeSH是什么简称 SH是什么简称