K8S Calico网络插件之BGP模式,BGP模式只能在同个子网内使用,无法跨网段
注:本文基于Calico v3.20.1版本编写
1 切换到BGP模式
因为按照官网的配置文件部署calico时,默认使用的是IPIP模式,如果需要使用BGP模式,就要做一些修改。
主要有两种方式,
修改IPPool中的ipipMode为Never,也就是禁用IPIP模式
[root@master home]# kubectl edit ippool
ipipMode: Never
也可以使用calicoctl或者kubectl命令修改,
[root@master home]# kubectl get ippool
NAME AGE
default-ipv4-ippool 14d
[root@master home]# calicoctl patch ippool default-ipv4-ippool -p '{"spec":{"ipipMode": "Never"}}'
[root@master home]# kubectl patch ippool default-ipv4-ippool -p '{"spec":{"ipipMode": "Never"}}' --type=merge
修改CALICO_IPV4POOL_IPIP为Never,不过这种方式只适用于第一次部署,也就是如果已经部署了IPIP模式,这种方式就不奏效了,除非把calico删除,修改配置后重新部署
- name: CALICO_IPV4POOL_IPIP
value: "Never"
2 BGP模式下calico的工作原理
相比IPIP模式,BGP模式下不需要tunl0设备参与报文传输,我们从路由表信息就能看出差别,
[root@master ~]# route -n #BGP模式
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 ens33
10.244.104.0 192.168.0.112 255.255.255.192 UG 0 0 0 ens33
10.244.166.128 192.168.0.111 255.255.255.192 UG 0 0 0 ens33
...
[root@master home]# route -n #IPIP模式
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 ens33
10.244.104.0 192.168.0.112 255.255.255.192 UG 0 0 0 tunl0
10.244.166.128 192.168.0.111 255.255.255.192 UG 0 0 0 tunl0
...
可见,在BGP模式下,报文直接通过ens33转发到目标机器上,不会进行二次ip报文的封装,因此从性能上来看,BGP肯定是占优的。但是,也正是没有二次封包,BGP模式只能在同个子网内使用,无法跨网段。
3 混合模式
那是否可以结合IPIP模式和BGP模式,使得同个子网内的通信使用BGP模式,跨网段时使用IPIP模式呢,当然是可以的。我们只需要把IPPool中的ipipMode为CrossSubnet即可,
[root@master home]# kubectl patch ippool default-ipv4-ippool -p '{"spec":{"ipipMode": "CrossSubnet"}}' --type=merge
参考文档:
https://docs.projectcalico.org/reference/node/configuration
https://docs.projectcalico.org/networking/vxlan-ipip
————————————————
版权声明:本文为CSDN博主「Blue summer」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010039418/article/details/120797425
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
2022-11-08 go.定时邮件发送
2021-11-08 K8S 部署 Tekton Trigger 的使用
2021-11-08 spring 工程包maven生成
2021-11-08 Go 如何利用 Linux 内核的负载均衡能力