【发布时间】:2022-03-05 07:13:41
【问题描述】:
我一直在研究 kubernetes pod 通信是如何跨节点工作的,到目前为止,这是我的收获:
基本上,下图描述。每个 pod 如何拥有连接到 veth 的网络接口 eth0,然后桥接到主机的 eth0 接口。
在 pod 之间进行跨节点通信的一种方法是相应地配置路由表。
假设节点 A 的地址域为 10.1.1.0/24,节点 B 的地址域为 10.1.2.0/24。
我可以在节点 A 上配置路由表,将 10.1.2.0/24 的流量转发到 10.100.0.2(节点 B 的 eth0),类似地配置节点 B 将 10.1.1.0/24 的流量转发到 10.100.0.1(节点A的eth0)
如果我的节点没有被路由器分隔,或者如果路由器被相应地配置,这可以工作,因为否则它们会丢弃以私有 IP 地址作为目标的数据包,这是不切实际的!
在这里,我们将讨论 SDN,我不太清楚,但显然是解决方案。 据我所知,SDN 封装数据包以设置可路由的源和目标 Ips
所以基本上要在 kubernetes 上部署一个创建 SDN 的容器网络插件,你基本上是创建守护程序集和其他辅助 kubernetes 对象。
我的问题是:
这些守护程序集如何替换路由表修改并确保 pod 可以跨节点通信?
同样是 pod 的守护程序集如何影响网络和其他具有不同命名空间的 pod?
【问题讨论】:
-
Tim Hockin(SIG 网络上的 Kubernetes 工程师)recently posted 和 document 的流程图解释了 kube-proxy 如何作用于 iptables 规则。值得一读。
-
Kube 代理实际上处理服务资源实现,它修改 iptables 以在接收到以服务 IP 地址为目的地的数据包时将数据包重定向到 pod,这是另一个话题,但谢谢!
标签: kubernetes sdn