k8s之calico网络

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s之calico网络相关的知识,希望对你有一定的参考价值。

参考技术A 在一个物理server上安装三个VM,VM操作系统如下:
root@master:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 19.10
Release: 19.10
Codename: eoan

一个VM作为master,另外两个VM作为worker:

calico安装
wget https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f calico.yaml

calico客户端命令工具-calicoctl,可用来查看,修改calico配置

calico支持三种网络模式,可通过修过calico.yaml进行配置:

下面分别进行配置验证,并分析数据流向

安装完calico,默认就是ipip模式。
node之间是full mesh连接。

进入calico pod,查看运行的进程。

而且在node上会多出一个网络接口tunl0,用于封装/解封装ipip报文

通过下面yaml文件部署两个pod,验证网络连通性。
nginx.yaml
1nginx.yaml -- 复制nginx.yaml,修改name

可看到两个pod分别部署在不同的worker上。
进入一个pod,可以ping通另一个pod

以10.24.166.130 ping 10.24.104.3 为例:

所以报文达到tunl0设备时,报文格式如下,源目的ip不变,因为ipip模式,所以mac已经没了。

封装完ipip,根据外层ip再次查找host路由表,从ens3网卡发送出去

参考: https://docs.projectcalico.org/getting-started/kubernetes/installation/config-options : Switching from IP-in-IP to VXLAN

修过 calico.yaml:

重新apply calico.yaml

查看calico node上运行的进程,已经没了bird等和BGP相关的进程。

calicoctl查看node状态,也已经没有BGP相关内容

而且每个节点上多了一个网络接口:

和ipip模式verify一样,创建两个pod。
进入一个pod,可以ping通另一个pod

以10.24.166.130 ping 10.24.104.2 为例:

所以pod发出icmp request报文,可在eth0抓到。

从neigh信息可知,10.24.104.0 对应的mac地址为66:2d:bf:44:a6:8b

所以报文达到vxlan.calico设备时,报文格式如下,源目的ip不变,但是目的mac已经变为10.24.104.0对应的mac,源mac变为vxlan.calico设备的mac

在 vxlan_xmit 中调用 vxlan_find_mac 根据目的mac查找fdb信息。
从fdb信息可知,mac 66:2d:bf:44:a6:8b 对应ip 192.168.122.22。
此ip即为vxlan外层目的ip。

封装完vxlan,根据外层ip再次查找host路由表,从ens3网卡发送出去

解封装后,将报文发送给vxlan.calico网卡,可在此抓到报文

修改 calico.yaml,将 CALICO_IPV4POOL_IPIP 的value改完 Never

重新apply calico.yaml

查看 calico node status和calico node上的进程,看和ipip模式没有区别。区别在于worker上的路由表,跨节点通信不再通过tunl0。

或者通过如下方式动态更新,从IPIP到纯BGP模式

和ipip模式verify一样,创建两个pod。
进入一个pod,可以ping通另一个pod

以10.24.166.128 ping 10.24.104.1为例

引用自 https://docs.projectcalico.org/reference/faq

k8s网络之Calico网络-工作原理

参考技术A 他写的太好了,上链接: https://www.cnblogs.com/goldsunshine/p/10701242.html

calico有两种模式:ipip(默认)、bgp,bgp效率更高。
如果宿主机在同一个网段,可以使用ipip模式;
如果宿主机不在同一个网段,pod通过BGP的hostGW是不可能互相通讯的,此时需要使用ipip模式(如果仍想使用bgp模式,除非你在中间路由器上手动添加路由)。

以上是关于k8s之calico网络的主要内容,如果未能解决你的问题,请参考以下文章

k8s网络之Calico网络-工作原理

死磕k8s之calico-nodeport

一文学会calico及k8s网络策略入门

k8s calico flannel cilium 网络性能测试

k8s网络模型从 Calico切换为Canal踩的坑

16.kubernetes笔记 CNI网络插件(二) Calico介绍