在裸机(Ubuntu)服务器上使用本地 kubernetes 安装,并使用 kubeadm 安装。
Kubernetes 版本为 1.25.3
需要在 pod 的环回上进行多播,以便运行自动化测试,但我没有找到方法来实现它。对于单 pod 场景,可能可以通过使用 yaml 中的主机网络来实现:
主机网络: true
但在我们的案例中这不是一个选择,因为我们有多个 pod 同时运行来执行此任务,这样我们就会失去 pod 隔离。
ifconfig lo multicast
在根目录下的 pod 中运行会返回Operation not permitted
我想知道是否有任何可行的方法可以在 pod 的环回上进行多播?在我看来,这在技术上并非不可能,但我不知道如何实现它...
谢谢!
答案1
我找到了一种方法来做到这一点,但即使最终证明它并不那么困难,它仍然需要重新编译一些二进制文件,所以到目前为止它相当困难(但就像我说的,是可行的)
希望 CNI 插件(k8s 安装的一部分,见下文)能够更新,然后我也会更新我的答案。同时,这里有一个到目前为止对我来说非常有效的解决方案:
这适用于基于 kubeadm 的原始 kubernetes 安装,并且可能适用于允许替换 CNI 插件二进制文件的任何 kubernetes 发行版/安装。例如,对于基于 kubeadm 的方式,如果使用 containerd,则有下一步:
...
Use the following commands to install Containerd on your system:
Follow the instructions for getting started with containerd...
反过来,“入门页面”包含安装 CNI 插件的说明:
...
Step 3: Installing CNI plugins
... and extract it under /opt/cni/bin
...
... ./loopback
...
插件二进制文件可以在这里loopback
替换(也可以在安装 k8s 后进行替换,只要在所有节点上都可以找到它)。可以使用以下任一方法准备替换文件公关或来源分叉仓库(参见multicast-on-loopback
后者的分支)。
实际的改变相当简单,所需要做的就是弄清楚如何在应用插件后重新编译插件(这看起来也很简单),然后loopback
用构建的二进制文件替换原始二进制文件(如上所述)。
请注意,二进制文件需要替换全部节点,即使最初它只安装在主节点上。
替换二进制文件后,为了以防万一,我重新启动了集群中的所有节点,瞧——每个 pod 中都有了一个完美可用的环回多播。当然,loopback
应该先备份原始二进制文件。
我检查了 MC 是否在 pod 内隔离,为此我在多个 pod 上运行了 iperf。从我看到的情况来看,一切都很好,而且它实际上被正确隔离了,即环回仍然只是 pod 的环回。