cilium-agent远程debug
目录
概述
通过远程 debug,来分析 cilium-agent 是如何在容器创建的时候定义容器网络接口。
编译cilium-agent
首先是在本地编译 cilium-agent,下面是以 v1.14.4 的代码作为例子来阐述,这一步可以在本地的开发机中执行。
|
|
运行cilium-agent
为了不重新打镜像,可以将重新编译后的 cilium-agent 放入到容器再启动。这里要 Hack 一下,把 Cilium 的 DaemonSet 中的 cilium-agent 的容器改用 sleep inf
的方式启动,并且将几个探针都删除,避免容器会因为探针而重启,这些都操作完之后,就可以进入到容器中手动执行下面的命令,启动远程 debug。关于 dlv 就不赘述了,可以在本地编译再上传到容器。
|
|
|
|
可以参考下面的命令,在容器内启动进程,dlv 将会在本地打开12345端口。
|
|
开启远程debug
注意上面填写的 IP 是运行 cilium-agent 的节点 IP,并且需要保证指定的端口是开放的,之后就可以进入 debug 的过程了,通过远程 debug,可以很清晰的了解 Cilium 是如何创建 Endpoint,以及如何将 eBPF 程序进行编译和 attach 到指定的网卡上的。
这里要注意,cilium-agent 启动失败,有可能会被 cilium-operator 标记一个 cilium-agent not ready 的污点,因此需要注意,如果在部署这个特殊的 cilium-agent 的时候,发现 Pod 无法正常运行,可以手动把节点上的污点去掉。
参考资料
警告
本文最后更新于 2023年11月12日,文中内容可能已过时,请谨慎参考。