k8s网络插件之calico两种网络模式

k8s网络插件之calico两种网络模式

一、calico概述

1、k8s网络之Calico网络
2、k8s网络组件calico详解
3、calico的组件、架构与原理
4、calico的两种网络模式BGP和IP-IP性能分析

二、IPIP与BGP两种网络模式对比

IPIP网络:

流量:tunl0设备封装数据,形成隧道,承载流量

适用网络类型:适用于互相访问的Pod不在同一个网段中,跨网段访问的场景,外层封装的IP能够解决跨网段的路由问题。

效率:流量需要tunl0设备封装,效率略低

BGP网络:

流量:使用路由信息导向流量

使用网络类型:适用于互相访问的Pod在同一个网段。

效率:原生hostgw,效率高

三、calicoctl客户端工具安装

3.1 官网下载

wget https://github.com/projectcalico/calicoctl/releases/download/v3.20.6/calicoctl
cp calicoctl /usr/bin
chmod +x /usr/bin/calicoctl

3.2 命令行测试

DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config 
calicoctl node status

3.3 配置文件测试

#1、编辑配置文件
[root@k8s-master-13 ~]# mkdir -p /etc/calico/
[root@k8s-master-13 ~]# vim /etc/calico/calicoctl.cfg
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
  datastoreType: "kubernetes"
  kubeconfig: "~/.kube/config"


#2、测试命令如下
[root@k8s-master-13 ~]# calicoctl node status
Calico process is running.


IPv4 BGP status
+--------------+-------------------+-------+----------+-------------+
| PEER ADDRESS |     PEER TYPE     | STATE |  SINCE   |    INFO     |
+--------------+-------------------+-------+----------+-------------+
| 192.168.1.14 | node-to-node mesh | up    | 07:20:27 | Established |
| 192.168.1.15 | node-to-node mesh | up    | 07:21:40 | Established |
| 192.168.1.16 | node-to-node mesh | up    | 07:20:27 | Established |
| 192.168.1.21 | node-to-node mesh | up    | 07:21:11 | Established |
+--------------+-------------------+-------+----------+-------------+


IPv6 BGP status
No IPv6 peers found.

说明:node-node mesh: 代表所有节点用full mesh的bgp连接。

我们部署calico由于集群规模不是很大,使用的是calico的bgp模式的node-to-node-mesh全节点互联,这种模式在小规模集群里面还可以用,3.4.0版本的calico支持到100多个节点。

四、calico修改网络模式为BGP

IPIP:ipip是在宿主机网络不完全支持bgp时,一种妥协的overlay机制,在宿主机创建1个”tunl0”虚拟端口;设置为false时,路由即纯bgp模式,理论上ipip模式的网络传输性能低于纯bgp模式;设置为true时,又分ipip always模式(纯ipip模式)与ipip cross-subnet模式(ipip-bgp混合模式),后者指“同子网内路由采用bgp,跨子网路由采用ipip”。

说明:本文calico.yaml文件基于3.20.0

#修改calico.yaml文件,添加内容如下
# Enable BGP
- name: CALICO_IPV4POOL_IPIP
  value: "Never"
- name: IP_AUTODETECTION_METHOD
  value: "interface=ens.*"

相比IPIP模式,BGP模式下不需要tunl0设备参与报文传输,我们从路由表信息就能看出差别,如下所示:

#1、IPIP模式
[root@k8s-master-13 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 ens33
10.244.17.0     192.168.1.15    255.255.255.192 UG    0      0        0 tunl0
10.244.27.0     192.168.1.21    255.255.255.192 UG    0      0        0 tunl0
10.244.115.0    192.168.1.16    255.255.255.192 UG    0      0        0 tunl0
10.244.170.128  192.168.1.14    255.255.255.192 UG    0      0        0 tunl0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33


#2、BGP模式
[root@localhost install-kubernetes]# route -n 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 ens33
10.244.17.0     192.168.1.15    255.255.255.192 UG    0      0        0 ens33
10.244.27.0     192.168.1.21    255.255.255.192 UG    0      0        0 ens33
10.244.115.0    192.168.1.16    255.255.255.192 UG    0      0        0 ens33
10.244.170.128  192.168.1.14    255.255.255.192 UG    0      0        0 ens33
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33

如上可见,在BGP模式下,报文直接通过ens33转发到目标机器上,不会进行二次ip报文的封装,因此从性能上来看,BGP肯定是占优势的。但是由于没有二次封包,BGP模式只能在同一个子网内使用,无法跨网段使用。

五、calico修改网络模式为混合模式

IPIP:ipip是在宿主机网络不完全支持bgp时,一种妥协的overlay机制,在宿主机创建1个”tunl0”虚拟端口;设置为false时,路由即纯bgp模式,理论上ipip模式的网络传输性能低于纯bgp模式;设置为true时,又分ipip always模式(纯ipip模式)与ipip cross-subnet模式(ipip-bgp混合模式),后者指“同子网内路由采用bgp,跨子网路由采用ipip”。

方法一:

[root@k8s-master-13 ~]# kubectl patch ippool default-ipv4-ippool -p '{"spec":{"ipipMode": "CrossSubnet"}}' --type=merge

方法二:

[root@k8s-master-13 ~]# kubectl edit ippool 
ipipMode: Always修改为ipipMode: CrossSubnet

六、bgp三种互联方案

Calico给出了三种类型的 BGP 互联方案,分别是 Full-mesh、Route reflectors和Top of Rack (ToR)

Full-mesh模式对于100个以内的工作节点或更少节点的中小规模部署非常有用,但是在较大的规模上,Full-mesh模式效率会降低,较大规模情况下,Calico官方建议使用Route reflectors。

声明: 本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
Kubernetes

Ingress出现诡异的HTTP状态码“000”

2024-11-19 16:50:24

Kubernetes

nginx-ingress代理websocket配置示例

2024-11-21 17:43:33

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索