
Flannel HOST-GW模式
在讲Flannel HOST-GW模式之前我们可以先来看看静态路由。
静态路由
简单讲:网络管理员在路由器上手动配置的路由条目;当网络拓扑改变时,需要让管理员手动的更新路由条目;路由过程必须根据管理员的配置转发。
当我们以主机为路由的时候,我们可以通过docker来实现linux下的静态路由。
主机k8s-1下,我们首先自定义一个Linux Bridge,并设置网段为172.19.0.0/16
取名名为br_net19
;然后创建一个c1容器并连接到我们的br_net19
网桥中。最后添加172.18.0.0/16
网络的路由指向k8s-2节点中ip为10.211.55.12
。
命令如下所示:
docker network create -d bridge --subnet 172.19.0.0/16 br_net19
docker network list
docker run --name c1 --network br_net19 -td burlyluo/nettoolbox
docker ps -a
docker exec -it c1 ifconfig
docker exec -it c1 route -n
ifconfig
route -n
# docker exec -it c1 ping 172.18.0.2
# route add -net 172.18.0.0/16 gw <节点二ip>
# 添加静态路由
route add -net 172.18.0.0/16 gw 10.211.55.12
大致如节点一的操作
docker network create -d bridge --subnet 172.18.0.0/16 br_net18
docker network list
docker run --name c2 --network br_net18 -td burlyluo/nettoolbox
docker ps -a
docker exec -it c2 ifconfig
docker exec -it c2 route -n
ifconfig
route -n
# route add -net 172.19.0.0/16 gw <节点一ip>
# 添加静态路由
route add -net 172.19.0.0/16 gw 10.211.55.11
route -n
尝试ping,是没什么问题的。
Flannel HOST-GW模式
与静态路由是一样的,唯一不同的就是添加静态路由的时候,由 flanneld
负责了设置各个节点上的路由。
那么我们应该如何进行安装呢?
只需要将net-conf.json
文件的网络类型更改为host-gw
模式即可。
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
vim kube-flannel.yml
# net-conf.json: |
# {
# "Network": "10.244.0.0/16",
# "Backend": {
# "Type": "host-gw"
# }
# }
kubectl apply -f kube-flannel.yml
由于走的是二层,所以不需要进行封包,性能也就提高了。但是HOST-GW模式只支持宿主机之间二层连接,要求集群中所以节点必须处于同一个网络中。如果不在一个网络中,三层设备路由器缺少Pod 网络的路由规则,无法转发数据包。
HOST-GW模式将目的主机当作网关,直接路由原始的数据包。flanneld会在集群节点上创建并维护路由表,当数据包到达集群节点的时,就会根据路由表直接发送到下一跳,也就是同网段的节点IP,直接通过二层网络将数据转发到目的节点上;目的节点再根据路由表规则转发到cni网桥,网桥根据路由规则转发到容器里面。
HOST-GW模式通过路由转发实现高性能网络通信,但是这种模式局限性很大,节点之间都要相互有点对点的路由覆盖,每个节点上有n-1个路由,而n个节点共有n(n-1)/2个路由,才能保证flannel的flat网络能力。
小结
Host-GW特点:
— 直接路由转发,性能损失很小
— 对宿主机网络要求二层可达
— 如果主机数量多了起来导致泛洪
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

