关于istio:全网最细-深度解析-Istio-Ambient-Mesh-流量路径
前言Istio Ambient Mesh 是 Istio 社区的推出的将 Sidecar 的能力抽离至 ztunnel 和 waypoint 的全新架构,同时基于 iptables 和策略路由实现了该架构下的流量规定,目前网络上曾经有些材料对这部分的实现进行了肯定水平的分析(比方 http://Solo.io 推出的三篇系列文章),但依然有很多细节尚没有任何文章提及。本文旨在对 Istio Ambient Mesh 的流量门路进行具体解读,力求尽可能清晰地出现细节,以帮忙读者齐全了解 Istio Ambient Mesh 中最为要害的局部。浏览本文须要读者具备根本的 TCP/IP 协定常识和操作系统网络常识,包含 iptables 和路由等。鉴于篇幅限度,本文不会具体介绍这些根底概念,对于感兴趣的读者,倡议自行查阅相干材料以深刻理解。 环境咱们应用一个最简化的场景来阐明 Ambient Mesh 流量门路:从一个运行在 Node-A 上的 sleep Pod 中通过 curl 发动一个 HTTP 申请,申请的对象是集群中名为 httpbin 的服务。在该服务下有一个位于 Node-B 上的 httpbin Pod,因为服务(ClusterIP)在 K8s 中只是一个虚构的 IP(它并不是任何实在存在的网络设备地址),所以在这个场景中,这个申请是间接发往 httpbin 利用 Pod 的,该场景的网络门路看起来会像是这样: 然而,在 Ambient Mesh 流量规定的影响下,实际上从 sleep Pod 收回的数据包须要经验一系列 iptables、策略路由被转发至 ztunnel 或 waypoint 之后能力达到对端的 httpbin 利用当中。这里为了在后续的篇幅中便于形容,咱们须要先介绍一下在这一流程中的所有参与者,读者无需记住这些设施的地址和名称,此处列出只是为了不便查阅: 残缺流量门路sleep -> httpbin 的申请门路尽管看起来非常简略,然而在 Ambient Mesh 下,ztunnel 接管了所有的出入连贯,从 sleep pod 收回的 ip 包都会被劫持到 ztunnel 的 15001 端口,通过 ztunnel 加密后再收回,所以事实上 sleep pod 中执行的 curl 发动的连贯实际上是连贯到了 ztunnel Pod 中的协定栈,同样地,httpbin Pod 接管到的连贯实际上则是来自它所在 Node 上运行的 ztunnel,所以理论建设的 TCP 连贯有 3 条: ...