概述
阿里云上有两台主机(interface和vpc-test1)没有安装k8s集群,只起了docker服务,要实现两台云主机上的docker容器内网互通,拟通过flanneld和etcd来配置实现。
配置步骤
环境说明:
主机 | IP地址 | 部署服务 |
interface | 10.161.137.56 | etcd、flannel、docker |
vpc-test1 | 172.16.151.113 | flannel、docker |
etcd安装
interface上操作
etcd下载地址:https://github.com/coreos/etcd/releases
解压后,将etcd和etcdctl两个可执行文件拷贝至/usr/bin 下
启动命令:
etcdctl --endpoints http://127.0.0.1:2379 set /coreos.com/network/config '{"Network": "10.0.0.0/16", "SubnetLen": 24, "SubnetMin": "10.0.1.0","SubnetMax": "10.0.20.0", "Backend": {"Type": "vxlan"}}'
安装Flannel
两台上分别操作:
flannel下载地址:https://github.com/coreos/flannel/releases
直接解压后,将flanneld和mk-docker-opts.sh拷贝至目标文件夹/usr/local/bin/。
添加flannel网络配置信息到etcd:
interface:
etcdctl --endpoints http://127.0.0.1:2379 set /coreos.com/network/config '{"Network": "10.0.0.0/16", "SubnetLen": 24, "SubnetMin": "10.0.1.0","SubnetMax": "10.0.20.0", "Backend": {"Type": "vxlan"}}'
vpc-test1:
etcdctl --endpoints http://10.161.137.56:2379 set /coreos.com/network/config '{"Network": "10.0.0.0/16", "SubnetLen": 24, "SubnetMin": "10.0.1.0","SubnetMax": "10.0.20.0", "Backend": {"Type": "vxlan"}}'
启动Flannel
# cat /etc/systemd/system/flanneld.service
[Unit]
Description=Flanneld
Documentation=https://github.com/coreos/flannel
After=network.target
Before=docker.service
[Service]
User=root
ExecStartPost=/usr/local/bin/mk-docker-opts.sh
ExecStart=/usr/local/bin/flanneld \
--etcd-endpoints="http://10.161.137.56:2379" \
--iface=10.161.137.56 \
--ip-masq=true \
--etcd-prefix=/coreos.com/network
Restart=on-failure
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
vpc-test1的配置中 --iface=172.16.151.113
# systemctl daemon-reload
# systemctl start flanneld
如果systemctl启动失败,可以尝试命令行启动:
/usr/local/bin/flanneld --etcd-endpoints=http://10.161.137.56:2379 --iface=10.161.137.56 --ip-masq=true --etcd-prefix=/coreos.com/network/ &
Flannel启动过程解析:
- 从etcd中获取network的配置信息
- 划分subnet,并在etcd中进行注册
- 将子网信息记录到/run/flannel/subnet.env中
Flannel必须先于Docker启动
验证Flannel网络
查看etcd中的数据:
# etcdctl ls /coreos.com/network/subnets
/coreos.com/network/subnets/10.0.19.0-24
查看docker1的flannel网卡信息,出现flannel.1的网卡说明启动生效:
flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
inet 10.0.19.0 netmask 255.255.255.255 broadcast 0.0.0.0
ether a6:ce:15:7f:9e:43 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
可以看到flannel0网卡的地址和etcd存储的地址一样,这样flannel网络配置完成.
配置Docker
Docker安装完成以后,需要修改其启动参数以使其能够使用flannel进行IP分配,以及网络通讯
在Flannel运行之后,会生成一个环境变量文件,包含了当前主机要使用flannel通讯的相关参数,如下:
# /usr/local/bin/mk-docker-opts.sh -c
# cat /run/docker_opts.env
DOCKER_OPTS=" --bip=10.0.19.1/24 --ip-masq=false --mtu=1450"
修改docker的服务启动文件如下:
# vim /lib/systemd/system/docker.service
EnvironmentFile=/run/docker_opts.env
ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://
docker 1.10.3版本和18.09.3的配置有些差别
docker 1.10.3配置,增加如下两行配置:
docker 18.09.3 版本,增加如下两处配置
分配重启docker服务和容器
验证容器互通
通过docker exec 方式登录容器,互ping测试。
docker inspect 来获取容器ip
原文链接:阿里云两台ECS主机flanneld配置,转载请注明来源!