Cilium架构简介&eBPF数据流向查看

d6c12ec6affeb9a26f7d8800e3491b89.gif

1

环境准备

上一篇文章将 k8s 的网络插件改为 cilium 同时部署了观测平台 hubble,部署方式可参考上篇。

基于eBPF的k8s网络插件Cilium部署与流量治理浅尝

本篇讲一下 cilium 的架构和数据流向的查看方式。首先,你需要一个kubernetes集群,并使用了 cilium 网络插件。

Cilium架构简介&eBPF数据流向查看_第1张图片

部署后可以看到,每个节点上都启动了一个cilium pod,还有一个cilium-operator,进到 cilium pod里,你可以使用 cilium cli工具。

2

cilium架构

Cilium的架构图如下所示。

Cilium架构简介&eBPF数据流向查看_第2张图片

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 里面的。

Cilium架构简介&eBPF数据流向查看_第3张图片

我们使用cilium map命令,查看192.168.249.10 上的 cilium_ipcache,可以看到在 ebpf 的 map 中记录了,数据发送到 10.0.0.23/32,可以通过endpoint 是 192.168.249.12 的隧道发送。

Cilium架构简介&eBPF数据流向查看_第4张图片

然后查看 192.168.249.12 上的 cilium_ipcache,可以看到,发送给 10.0.0.23/32 时经过的隧道 endpoint 是 0.0.0.0,说明这个 pod 在本节点上面。

Cilium架构简介&eBPF数据流向查看_第5张图片

继续查看 192.168.249.12 上的  cilium_lxc,可以看到 10.0.0.23 的 mac 地址是 5A:xx,对应 node 上 lxc 的 mac 地址是 46:xx。

b5566b6474e0822ad3d9b3ba4be5790e.jpeg

我们查看192.168.249.12上面的网络设备,可以看到 mac 地址为 46:xx 的 lxc 设备,该设备对端是 if9,也就是 pod 中的网卡设备,mac 地址应该是上面图中显示的 5A:xx。

Cilium架构简介&eBPF数据流向查看_第6张图片

这样,数据包就通过 eBPF 程序,从192.168.249.10 设备上发送到192.168.249.12 上的 pod 10.0.0.23 内部了。

Cilium架构简介&eBPF数据流向查看_第7张图片

点个赞

b69aeb4c634bcf5d7cb2d5895426360b.gif

再走吧

你可能感兴趣的:(架构)