1

通过在每个节点上添加具有适当规则的静态路由表,容器网络也可以正常工作。例如,给定三个具有三个不同 docker 网桥子网的节点:

node-1(192.168.0.1):
10.0.1.1/24
node-2(192.168.0.2):
10.0.2.1/24
node-3(192.168.0.3):
10.0.3.1/24

在每个节点上添加以下路由:

ip route add 10.0.1.0/24 via 192.168.0.1 dev eth0
ip route add 10.0.2.0/24 via 192.168.0.2 dev eth0
ip route add 10.0.3.0/24 via 192.168.0.3 dev eth0

kube-proxy 在 iptables 模式下运行,cluster-service-ip 被翻译成 pod ip,最后通过路由表路由到相关节点。

那么在路由表上使用 cni 插件有什么好处呢?路由表方法是否存在性能问题?

4

1 回答 1

3

按照设计,Kubernetes 具有流畅的结构。Pod、服务、节点可以根据需要来来去去,可以通过手动更改(滚动更新、新部署)或通过自动扩展(HPA、节点自动扩展)来实现。手动设置刚性网络结构会抵消动态 Kubernetes 环境的好处。

默认情况下不需要覆盖网络,但是,它们在特定情况下会有所帮助。比如当我们没有足够的 IP 空间,或者网络无法处理额外的路由时。或者,也许当我们想要叠加层提供的一些额外管理功能时。一种常见的情况是云提供商路由表可以处理的路由数量有限制。例如,AWS 路由表最多支持 50 条路由,而不会影响网络性能。所以如果我们有超过 50 个 Kubernetes 节点,AWS 路由表就不够用了。在这种情况下,使用覆盖网络会有所帮助。

它本质上是封装一个跨节点遍历本地网络的包中包。您可能不想使用覆盖网络,因为它可能会由于所有数据包的封装-解封装而导致一些延迟和复杂性开销。它通常是不需要的,所以我们只有在知道为什么需要它时才应该使用它。

https://itnext.io/an-illustrated-guide-to-kubernetes-networking-part-2-13fdc6c4e24c

如果您担心 CNI 插件引起的延迟和开销,这里是Kubernetes 网络插件的一个方便的基准测试结果

于 2019-06-06T16:03:54.190 回答