配置flannel网络
2022-03-20 本文已影响0人
Robin92
节点内的容器跨节点通信ß需要网络插件,当前就用 flannel,需要在所有节点上安装。
安装 flannel
yum install flannel -y
配置
需要配置 ETCD 地址
# vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://172.16.156.128:2379" #
FLANNEL_ETCD_PREFIX="/atomic.io/network" # flannel 用于查地址范围的前缀
创建key
注意key 字母大小写,由于我本地就是 172.16 所以这里用了 172.18
etcdctl set /atomic.io/network/config '{ "Network": "172.18.0.0/16" }'
启动
systemctl start flanneld.service
systemctl enable flanneld.service
此时,ifconfig 多了一块网卡

重启 docker 之后,docker 的网络和 flannel 的就一致了

配置另外两个节点
同样,配置一下另外两个 node 节点 :
- 安装 flannel
yum install flannel -y
- 更改配置文件的 etcd 地址
172.16.156.128
- 启动 flannel
systemctl start flanneld.service
- 重启 docker
systemctl restart docker
错误调查
如果 flannel 配置文件的网段配错,启动 flannel 会一直 hang 住,可以通过 tail -f /var/log/message
看到错误信息。

跨主机测试容器互通性
测试镜像 busybox
这里用 busybox 镜像来测试
docker pull busybox # pull 镜像
docker run -it busybox # 运行并接入容器
ifconfig # 执行并查看当前容器内的地址,如 172.18.67.2, 172.18.98.2, 172.18.57.2
ping 172.18.57.2 # 在 172.18.67.2 容器内 ping 另一个容器。发现卡住不通
# (但起始我 ping 另一个能通)
修改 iptables 规则
查看 docker 版本,是 1.13.1 版本。ping 不通但原因是因为 docker 在1.13 之后将 iptables FORWARD 但规则默认改为 DROP 了,我们需要把它改为接受 ACCEPT 就好。
iptables -L -n # 查看规则,发现我 ping 通的机器是 ACCEPT 状态,而ping 不通的是 DROP 状态
iptables -P FORWARD ACCEPT # 修改 FORWARD 的规则为 ACCEPT


改后重新 ping,发现都可以ping通了。
固化 iptables 规则
如果像上方那样更改,断电后,iptables 会被重置,所以需要开机自动加。
解决方案:将其加到 docker 的启动路径下。
docker status docker # 查看其服务路径

编辑此文件,加入 ExecStartPost=/sbin/iptables -P FORWARD ACCEPT 命令,其中 ExecStartPost 是指服务启动后执行, /sbin/iptables 是通过 which iptables 找到的命令全路径命令。

想让其生效要执行 systemctl daemon-reload
(不过重启自动生效,当前不用执行)