跨主机网络:实现 Docker 多主机容器通信
Flannel 是 CoreOs 维护的一个网络组件,在每个主机上运行守护进程负责维护本地路由转发,Flannel 使用 ETCD 来存储容器网络与主机之前的关系。
其他主流容器跨主机网络方案:
Weave
Calico
OpenvSwitch

1、ETCD 安装并配置
安装
shell
yum install etcd -y修该配置文件
shell
vi /etc/etcd/etcd.conf修改的配置文件信息
shell
## 指定 ETCD 的数据目录, 实际数据存储的文件
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
## 指定客户端连接 ETCD 的地址, 将 localhost 修改成宿主机的 IP
ETCD_LISTEN_CLIENT_URLS="http://192.168.31.73:2379"
## 指定 ETCD 的节点名
ETCD_NAME="default"
## 指定 ETCD 通告地址, 将 localhost 修改成宿主机的 IP
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.31.73:2379"启动 ETCD
shell
systemctl start etcd设置开机启动
shell
systemctl enable etcd查看是否启动成功
shell
ps -ef |grep etcd监听端口: 2379
2、flanneld 安装井配置
安装 FLANNELD
shell
yum install flannel -y修改配置
shell
vi /etc/sysconfig/flanneld配置信息
shell
## 指定连接 ETCD 的地址, 将 127.0.0.1 修改成 ETCD 的 IP:端口
FLANNEL_ETCD_ENDPOINTS="http://192.168.31.73:2379"
## ETCD 存储的前缀
FLANNEL_ETCD_PREFIX="/atomic.io/network"启动 flanneld
shell
systemctl start flanneld设置开机启动
shell
systemctl enable flanneld查看日志
shell
journalctl -u flanneld查看 messages 日志
shell
tail /var/log/massages -f如果日志中出现 Key not found 日志信息, 是因为尝试想 ETCD 发起请求, 在 ETCD 中没有找到子网的配置
3、向 etcd 写入子网
写入子网, 不要与你宿主机的网络冲突, 并不要与设置的其他的一些网络发生冲突
查看 ETCD 数据库操作命令
shell
etcdctl --help写入命令
shell
etcdctl --endpoints="http://192.168.31.73:2379" set /atomic.io/network/config '{ "Network":"172.17.0.0/16","Backend": {"Type": "vxlan"}}'查看是否写入成功
将 set 换成 get
shell
etcdctl --endpoints="http://192.168.31.73:2379" get /atomic.io/network/config4、配置 Docker 使用 flannel 生成的网络信息
每台 docker 主机都需要安装 flannel
查看 flannel 为主机分配的子网
shell
cat /var/run/flannel/docker设置环境文件
docker 服务配置文件地址: /usr/lib/systemd/system/docker.service
shell
vi /usr/lib/systemd/system/docker.service添加变量
shell
EnvironmentFile=/run/flannel/docker
ExecStart=/usr/bin/dockerd -H fd://--containerd=/run/containerd/containerd.sock $DOCKER_NETWORK_OPTIONS重启 docker
shell
systemctl daemon-reload
systemctl restart docker打开 FORWARD
如果不打开 FORWARD, 是无法 ping 通的
shell
iptables -P FORWARD ACCEPT5、启动所有服务并设置开机启动
- systemctl daemon-reload
- systemctl start xxxx
- systemctl enable xxx
服务器启动顺序
- 1、启动 flanneld
- 2、启动 docker
剑鸣秋朔