1
环境准备
上一篇文章将 k8s 的网络插件改为 cilium 同时部署了观测平台 hubble,部署方式可参考上篇。
基于eBPF的k8s网络插件Cilium部署与流量治理浅尝
本篇讲一下 cilium的架构和数据流向的查看方式。首先,你需要一个kubernetes集群,并使用了 cilium 网络插件。
部署后可以看到,每个节点上都启动了一个cilium pod,还有一个cilium-operator,进到 cilium pod里,你可以使用 cilium cli工具。
2
cilium架构
Cilium的架构图如下所示。
Cilium Agent:以 DaemonSet 的方式运行在所有的节点上,负责 eBPF 程序的编辑和挂载,eBPF程序所需要的全局Maps 的初始化和维护以及 Pod 相关Maps 的创建和维护,同时负责 iptables 的初始化和维护。
Cilium Operator:负责 IPAM 的相关工作,主要是给主机节点分配 CIDR,给 Pod 分配 ip 地址由主机上的 Cilium Agent 来完成。
Cilium Cli:用来和本地的 Cilium Agent 通信,提供操作 Cilium 的能力。
3
数据流向查看
下面我们使用 cilium cli 工具查看一下数据是如何从 192.168.249.10 发送到192.168.249.12 上的 pod 10.0.0.23 里面的。
我们使用ciliummap命令,查看192.168.249.10 上的 cilium_ipcache,可以看到在 ebpf 的 map 中记录了,数据发送到10.0.0.23/32,可以通过endpoint 是192.168.249.12 的隧道发送。
然后查看192.168.249.12 上的cilium_ipcache,可以看到,发送给10.0.0.23/32 时经过的隧道 endpoint 是 0.0.0.0,说明这个 pod 在本节点上面。
继续查看 192.168.249.12 上的cilium_lxc,可以看到 10.0.0.23 的 mac 地址是 5A:xx,对应 node 上 lxc 的 mac 地址是 46:xx。
我们查看192.168.249.12上面的网络设备,可以看到 mac 地址为 46:xx 的 lxc 设备,该设备对端是 if9,也就是 pod 中的网卡设备,mac 地址应该是上面图中显示的 5A:xx。
这样,数据包就通过 eBPF 程序,从192.168.249.10 设备上发送到192.168.249.12 上的 pod 10.0.0.23 内部了。
点个赞
再走吧