Skip to content
章节导航

跨主机网络:实现 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/config

4、配置 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 ACCEPT

5、启动所有服务并设置开机启动

  • systemctl daemon-reload
  • systemctl start xxxx
  • systemctl enable xxx

服务器启动顺序

  • 1、启动 flanneld
  • 2、启动 docker