暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

云原生网络调优:从Calico模式切换看透K8s底层流量

Linux运维智行录 2025-04-02
203

calico默认使用使用IPIP网络模式,会有一定网络的网络性能损耗。如果业务对网络敏感的话,肯定会深有体会的。这里简要说明calico网络模式以及切换网络模式。


01
calico网络模式介绍

Calico 网络插件提供了一系列网络选项,以适应您的实施并最大限度地提高性能。



Overlay网络

Overlay网络是分层在另一个网络之上的网络。在 Kubernetes 的环境中,Overlay网络可用于处理底层网络之上的节点之间的 Pod 到 Pod 流量,该底层网络不知道 Pod IP 地址或哪些 Pod 在哪些节点上运行。Overlay网络的工作原理是将底层网络不知道如何处理的网络数据包(例如,使用 Pod IP 地址)封装在底层网络知道如何处理的外部数据包(例如节点 IP 地址)中。用于封装的两种常见网络协议是 VXLAN 和 IP-in-IP。

Tip:使用覆盖网络的主要优点是它减少了对底层网络的依赖性。例如,您可以在几乎任何底层网络上运行 VXLAN 叠加层,而无需与底层网络集成或对底层网络进行任何更改。

使用叠加网络的主要缺点是:

  • 对性能有轻微影响。封装数据包的过程需要少量 CPU,并且数据包中编码封装所需的额外字节(VXLAN 或 IP-in-IP 报头)会减少可以发送的内部数据包的最大大小,这反过来意味着需要为相同数量的总数据发送更多数据包。

  • Pod IP 地址不可路由到集群外部。



BGP网络

BGP(边界网关协议)是一种基于标准的网络协议,用于跨网络共享路由。它是 Internet 的基本构建块之一,具有卓越的扩展特性。

Calico 内置了对 BGP 的支持。在本地部署中,这允许 Calico 与物理网络(通常是架顶式路由器)对等以交换路由,从而形成一个非叠加网络,其中 Pod IP 地址可在更广泛的网络中路由,就像连接到网络的任何其他工作负载一样。



Cross-subnet网络

除了标准 VXLAN 或 IP-in-IP 覆盖之外,Calico 还支持 VXLAN 和 IP-in-IP 的“跨子网”模式。在此模式下,在每个子网中,底层网络充当 L2 网络。在单个子网内发送的数据包未封装,因此您可以获得非覆盖网络的性能。跨子网发送的数据包被封装,就像普通的覆盖网络一样,减少了对底层网络的依赖性(无需与底层网络集成或对底层网络进行任何更改)。

就像标准覆盖网络一样,底层网络不知道 Pod IP 地址,并且 Pod IP 地址无法路由到集群外部。


02
封装类型

Calico 支持两种类型的封装:VXLAN 和 IP in IP。VXLAN 在某些 IP in IP 不受支持的环境(例如 Azure)中受支持。VXLAN 的每个数据包的开销略高,因为标头更大,但除非您运行的是网络密集型工作负载,否则您通常不会注意到这种差异。两种封装类型之间的另一个细微差别是,Calico 的VXLAN 实现不使用 BGP,而 Calico 的 IP in IP 实现在 Calico 节点之间使用 BGP


03
calico网络模式切换

1、确认calico模式

$ calicoctl get ippool -owide
NAME                  CIDR            NAT    IPIPMODE   VXLANMODE   DISABLED   DISABLEBGPEXPORT   SELECTOR   
default-ipv4-ippool   10.244.0.0/16   true   Always     Never       false      false              all()  

$ ip r | grep bird
blackhole 10.244.32.128/26 proto bird 
10.244.58.192/26 via 172.139.20.75 dev tunl0 proto bird onlink 
10.244.85.192/26 via 172.139.20.175 dev tunl0 proto bird onlink 
10.244.122.128/26 via 172.139.20.176 dev tunl0 proto bird onlink 
10.244.135.128/26 via 172.139.20.66 dev tunl0 proto bird onlink 
10.244.195.0/26 via 172.139.20.151 dev tunl0 proto bird onlink 
10.244.217.64/26 via 172.139.20.19 dev tunl0 proto bird onlink 

Tip

  • calicoctl命令 就看IPIPMODE  和 VXLANMODE  字段的值

  • 路由方式就看下一跳网卡是否使用tunl0网卡,如果是的话,则说明是ipip模式

2、切换模式

$ calicoctl patch ippool default-ipv4-ippool --patch '{"spec":{"ipipMode": "CrossSubnet"}}'
Successfully patched 1 'IPPool' resource

3、验证

$ ip r | grep bird
blackhole 10.244.32.128/26 proto bird 
10.244.58.192/26 via 172.139.20.75 dev eth0 proto bird 
10.244.85.192/26 via 172.139.20.175 dev eth0 proto bird 
10.244.122.128/26 via 172.139.20.176 dev eth0 proto bird 
10.244.135.128/26 via 172.139.20.66 dev eth0 proto bird 
10.244.195.0/26 via 172.139.20.151 dev eth0 proto bird 
10.244.217.64/26 via 172.139.20.19 dev eth0 proto bird 

Tip:当下一跳是主机网卡时,则说明使用BGP模式。

4、重启所有容器

$ kubectl delete pod --all --all-namespaces

Tip:有些环境不需要执行


04
结语

以上就是切换calico模式步骤,容器网络复杂,调优步骤就变得尤为重要了。

【推荐阅读】点击下方蓝色标题跳转至详细内容!

别忘了,关注我们的公众号,获取更多关于容器技术和云原生领域的深度洞察和技术实战,让我们携手在技术的海洋中乘风破浪!

END

文章转载自Linux运维智行录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论