我一直在研究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
因此,基本上要在创建SDN的kubernetes上部署一个Container网络插件,就基本上要创建守护程序集和其他辅助kubernetes对象。
我的问题是:
这些守护程序集如何替换路由表修改并确保Pod可以在节点之间通信?
同时也是Pod的守护程序集如何影响网络和具有不同名称空间的其他Pod?
答案 0 :(得分:1)
可以使用 kubenet-plugin 或 CNI-plugin 自定义这些守护程序集如何替换路由表修改并确保Pod可以在节点之间通信?
网络,如Network Plugins至kubelet节点。网络插件负责处理路由,可能使用kube-proxy。例如。 Cilium CNI插件是complete replacement of kube-proxy,正在使用eBPF instead of iptables。
同时也是Pod的守护程序集如何影响网络和具有不同名称空间的其他Pod?
是的,DaemonSet是普通豆荚。 Kubelet是一种特殊的node-component,用于管理Pod,但不是由Kubernetes创建的容器。
Life of a packet 是有关Kubernetes Networking的推荐演示文稿