修改calico网络模式为host-gw

修改calico网络模式

默认情况下,calico所有的数据包都会进行ipip封装.通过路由表可以快速判断出网络模式:

[root@master daemonset]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.88.8.254     0.0.0.0         UG    100    0        0 ens192
10.88.8.0       0.0.0.0         255.255.252.0   U     100    0        0 ens192
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.189.64  10.88.10.183    255.255.255.192 UG    0      0        0 tunl0
192.168.219.64  0.0.0.0         255.255.255.192 U     0      0        0 *
192.168.219.65  0.0.0.0         255.255.255.255 UH    0      0        0 calibdecb5b5ff2
192.168.235.128 10.88.10.182    255.255.255.192 UG    0      0        0 tunl0

去往别的主机的包都要经过tunl0设备发出,而tunl0设备就是进行IPIP封装的.

kubectl edit ippools.crd.projectcalico.org default-ipv4-ippool
spec:
  allowedUses:
  - Workload
  - Tunnel
  blockSize: 26
  cidr: 192.168.0.0/16
  # 默认为Always ,所有都会封装.修改为CrossSubnet可以让跨网段的通信才会封装.Never则为从不封装数据包.
  ipipMode: CrossSubnet
  natOutgoing: true
  nodeSelector: all()
  vxlanMode: Never

修改完成后保存自动更新,接下来你在查看路由表就发生了变化:

[root@master daemonset]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.88.8.254     0.0.0.0         UG    100    0        0 ens192
10.88.8.0       0.0.0.0         255.255.252.0   U     100    0        0 ens192
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.189.64  10.88.10.183    255.255.255.192 UG    0      0        0 ens192
192.168.219.64  0.0.0.0         255.255.255.192 U     0      0        0 *
192.168.219.65  0.0.0.0         255.255.255.255 UH    0      0        0 calibdecb5b5ff2
192.168.235.128 10.88.10.182    255.255.255.192 UG    0      0        0 ens192

关闭使用IPIP模式或者跨网段通信时使用IPIP,去往对端主机的包不再通过tunl0设备,而是直接从主机网卡发出.
calico通过虚拟设备直接将pod对接到主机上面.当流量来到主机后直接匹配对应的规则,利用对端主机IP作为下一跳地址,然后发往对端主机.对端主机同样将pod直接对接到了主机上,所以直接匹配规则通过对应的虚拟设备发出即可.

calico支持两种跨网段通信封装: IPIP和VXLAN.VXLAN开销更高因为数据标头更大,但是除非是在网络密集型的场景下,否则通常不会感觉到差异.VXLAN的实现不使用BGP,而calico使用节点之间的BGP.

而VXLAN的设置同样是上面那个配置,字段为vxlanMode: Never默认关闭不使用.

其他问题

尽量不要将使用flannel网络的集群更改为calico.因为有时flannel并不会清理干净自己的"作为".如路由表路由,网卡设备没有删除,所以尽量在部署的时候就选用好网络而不要初始化集群等更改.

flannel的host-gw网络模式和calico的同一子网内通信性能差不多.

参考文章:
《深入剖析Kubernetes》-张磊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值