到 Kubernetes 的多播流量

Multicast traffic to Kubernetes

我希望我的 pods 接收从我的 kubernetes 集群外部流向我节点中特定端口的多播网络流量。

我正在考虑两种解决方案:

  1. hostNetwork: true 标志与 hostPort 配置一起添加到他们的 yaml 文件中,以便将流量直接接收到 pod。
  2. 使用 iptables 命令将节点上的流量从 eth0 接口本地转发到 docker0 接口。

方法一是Kubernetes的官方特性,但感觉像是打破了docker原本强加的安全墙,可能会导致端口问题 与主机进程的冲突等。

另一方面,方法 2 透明地将多播网络流量转发到 pods。
尽管我可以使用自动化工具来传播此配置(ansible/salt 等),但 Kubernetes 的任何配置 'out of the scope' 对我来说都感觉有点老套。

想听听您的优缺点、评论以及关于多播到 kubernetes 集群问题的其他解决方案。

最后我们选择了方法 1,因为它是实现我们想要的目标的记录方式,我可以报告它工作正常。

我玩了一下 hostNetwork,我理解你的保留意见。我看到打开它会为我的 pod 提供与托管节点相同的 IP。但是它无法与任何节点通信(也许我做错了什么?)。

编辑: 我肯定错过了什么

hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet

我添加了 dnsPolicy

所以我现在正在尝试使用 CNI 的替代方法。还在研究那个。这对我来说是新的,所以我会尽快 post 更新。

听说WeaveWorks支持组播:https://www.weave.works/use-cases/multicast-networking/

github issue 对多播支持只字不提

支持多播的更简洁的方法是通过 multus-cni 向您的 PODs 添加一个额外的接口。然后,您可以将这个新的 multus 接口关联到您的主机网络接口,该接口将在主机上接收多播流量。总而言之,您的 POD 上将有两个界面,即:

  1. net1(默认)用于 pod 到 pod 通信和其他单播流量。
  2. eth0 (multus) 用于多播流量。然后,您需要通过使用 bridgemacvlan
  3. 将其与主机中的 NIC“加入”

在此处查看更多详细信息:https://github.com/intel/multus-cni/blob/master/docs/quickstart.md