行至水穷处 坐看“云”起时

Cloud Native ADN -> CNadn.Net

将k8s网络模型从canal更换为calico(IPIP模式以及BGP)

环境:
主机1: master+node1
主机2: node2
主机在同一个二层网络里互通
原来环境使用canal,flannel部分采用vxlan

首先通过kubectl delete -f canal.yaml删除原来的相关容器

删除后,系统遗留flannel.1网卡接口以及相关静态fdb表需要手工删除,如果不删除系统将继续使用以前的flannel以及相关路由,calico不能正确的创建相关路由条目

参考 https://docs.projectcalico.org/v3.4/getting-started/kubernetes/installation/calico#installing-with-the-kubernetes-api-datastore50-nodes-or-less 直接部署, 这里采用kubernetes存储模式因为是测试环境,规模很小,直接用kubernetes模式免得折腾etcd相关证书配置了, pod的地址分配采取了是host-local,由kube-controller-manager直接管理:

部署完毕后,可以看到主机路由如下

10.244.1.0/24 via 172.16.40.198 dev tunl0 proto bird onlink

可以看到去往node2 pod网络的路由是经过tunl0接口,宿主机接口情况如下

下图是calico原理图,在ipip模式下实际会做tunl0接口

《将k8s网络模型从canal更换为calico(IPIP模式以及BGP)》
calico原理

如果将上面的ipipMode修改为never,则路由表中走tunl0的路由会消失,转而变成走BGP路由

10.244.1.0/24 via 172.16.40.198 dev ens160 proto bird

对于calico 路由模式来说,一般最常见的有两种:

  1. 基于以太网二层直连的宿主机之间构建一个BGP路由网络
  2. 基于宿主机IP跨路由的全BGP网络,即宿主机之间的外部网络本身也是BGP

其实还有一种就是宿主机之间本身路由不是BGP,比如是ospf,如果希望外部的网络也能获得pod网络路由,那就需要将bgp重分发到igp中,这个一般好像不太这么去做。。

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注