flannel通信方式之VXLAN

背景

如果根据《K8S集群搭建——基于CentOS 7系统》配置flannel,那么backend通信方式默认为UDP。这里就有一个问题,通过UDP方式,数据包的转发是在用户态,因此性能上会有损失,假如数据包的转发能在内核完成,这样就能少一次数据报文的拷贝,性能也就能上去,这就是VXLAN通信方式。

配置vxlan backend

1、master节点

和之前类似,同样使用etcdctl命令,增加对backend的定义,指定为vxlan即可,

etcdctl set /flannel/network/config '{"Network":"10.108.0.0/16","Backend": {"Type": "vxlan"}}'

这里我们设置flannel子网使用10.108网段。

设置完网络配置后,重启flanneld服务即可,同时因为docker依赖于flannel网络,因此docker也需要重启,但是要放到后面,

systemctl restart flanneld docker

两者执行内容大致如下:

  1. flannel从etcd数据库中获取network的配置信息
  2. flannel划分子网subnet,并在etcd中进行注册
  3. flannel将子网信息记录到/run/flannel/subnet.env中
  4. docker启动时加载subnet.env中的网络配置

因此,服务重启后我们就能看到flannel.1这个网络设备,以及docker0网桥的ip已经处于我们配置的网段中。

[root@CentOS-7-4 ~]# ifconfig
docker0: flags=4099  mtu 1500
        inet 10.108.14.1  netmask 255.255.255.0  broadcast 0.0.0.0
        ether 02:42:5c:a0:56:f9  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

flannel.1: flags=4163  mtu 1450
        inet 10.108.14.0  netmask 255.255.255.255  broadcast 0.0.0.0
        inet6 fe80::1007:9aff:fe3d:2bda  prefixlen 64  scopeid 0x20
        ether 12:07:9a:3d:2b:da  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 8 overruns 0  carrier 0  collisions 0

2、node节点

对于node节点,同样也是重启flanneld和docker进程即可,

systemctl restart flanneld docker

连通性测试

分别在两个node上起一个容器,互相ping对方ip,能ping通即配置正常。

常见问题

1、docker0网桥设备ip不在我们设置的网段

这一般就是没有重启docker导致的,或者没有在flannel后重启。

2、使用etcdctl命令更新flannel子网信息,重启flannld进程,配置不生效

CentOS 7自带的flannel可能有些问题,重启服务确实无法更新配置,需要先将flannl.1这个网络设备删除,重启后才会生效。

ip link del flannel.1;
systemctl restart flanneld docker

后续使用最版本的flannel验证一下。

你可能感兴趣的:(Kubernetes)