前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Istio Ambient 模式流量管理实现机制详解(二)

Istio Ambient 模式流量管理实现机制详解(二)

作者头像
赵化冰
发布2022-10-04 21:24:19
发布2022-10-04 21:24:19
55200
代码可运行
举报
运行总次数:0
代码可运行

ambient 模式中,所有 pod 通过 node 上的 ztunnel 之间创建的安全通道进行通信,如下图所示:

那么 Istio 是如何将 pod 的流量发送到 ztunnel 的呢?ambient 模式采用了 iptables 规则和策略路由(Policy-based Routing)来将 pod 的流量转发到 ztunnel。下面我们以 初探 Istio Ambient 模式 中安装的 demo 为例来详细介绍 ambient 模式是如何对流量进行劫持的。

kind 集群中有三个 node,如下所示:

代码语言:javascript
代码运行次数:0
复制
~ k get node
NAME                    STATUS   ROLES           AGE    VERSION
ambient-control-plane   Ready    control-plane   4d9h   v1.25.0
ambient-worker          Ready    <none>          4d9h   v1.25.0
ambient-worker2         Ready    <none>          4d9h   v1.25.0

在 ambient-worker2 这个 node 中运行了下面这些应用 pod。

代码语言:javascript
代码运行次数:0
复制
k get pod -ocustom-columns=NAME:.metadata.name,IP:.status.podIP,NODE:.spec.nodeName|grep ambient-worker2
productpage-v1-7c548b785b-mhjm6   10.244.2.3    ambient-worker2
ratings-v1-85c74b6cb4-t4pq6       10.244.2.2    ambient-worker2
reviews-v1-6494d87c7b-jnjcl       10.244.2.7    ambient-worker2
reviews-v2-79857b95b-m4lst        10.244.2.5    ambient-worker2
reviews-v3-75f494fccb-5jgzw       10.244.2.8    ambient-worker2

在 node 中通过 ipset 命令可以看到 node 中创建了一个 ztunnel-pods-ips ipset,该 ipset 是一个 ip 地址的集合,其中包含了该 node 上所有被 ambient 模式管理的 pod IP 地址。

备注:试验环境采用的是 kind,kind 中的 node 实际上是一个 docker 容器。

代码语言:javascript
代码运行次数:0
复制
~ docker exec ambient-worker2 ipset list
Name: ztunnel-pods-ips
Type: hash:ip
Revision: 0
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 568
References: 1
Number of entries: 5
Members:
10.244.2.5
10.244.2.2
10.244.2.3
10.244.2.8
10.244.2.7

查看策略路由规则:

代码语言:javascript
代码运行次数:0
复制
~ docker exec ambient-worker2 ip rule
0:	from all lookup local
100:	from all fwmark 0x200/0x200 goto 32766
101:	from all fwmark 0x100/0x100 lookup 101
102:	from all fwmark 0x40/0x40 lookup 102
103:	from all lookup 100
32766:	from all lookup main
32767:	from all lookup default
代码语言:javascript
代码运行次数:0
复制
~ docker exec ambient-worker2 ip route show table 100
10.244.2.2 via 192.168.126.2 dev istioin src 10.244.2.1
10.244.2.3 via 192.168.126.2 dev istioin src 10.244.2.1
10.244.2.5 via 192.168.126.2 dev istioin src 10.244.2.1
10.244.2.7 via 192.168.126.2 dev istioin src 10.244.2.1
10.244.2.8 via 192.168.126.2 dev istioin src 10.244.2.1
10.244.2.10 dev veth6cc9a213 scope link
~ docker exec ambient-worker2 ip route show table 101
default via 192.168.127.2 dev istioout
10.244.2.10 dev veth6cc9a213 scope link
~ docker exec ambient-worker2 ip route show table 102
default via 10.244.2.10 dev veth6cc9a213 onlink
10.244.2.10 dev veth6cc9a213 scope link
代码语言:javascript
代码运行次数:0
复制
~ k get pod -n istio-system -ocustom-columns=NAME:.metadata.name,IP:.status.podIP,NODE:.spec.nodeName|grep 10.244.2.10
ztunnel-gzlxs                          10.244.2.10   ambient-worker2

可以看到,该节点上

。。。。。 未完待续

参考资料


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档