跨主机网络:实现Docker容器多主机通信

Flannel是CoreOS维护的一个网络组件,在每个主机上运行守护 进程负责维护本地路由转发,Flannel使用ETCD来存储容器网络 与主机之前的关系。

其他主流容器跨主机网络方案:

• Weave

• Calico

• OpenvSwitch

1、etcd安装并配置(任意找一台节点安装即可)

bash
yum -y install etcd
vim /etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://192.168.0.11:2379"
ETCD_NAME="default"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.11:2379"
systemctl start etcd
systemctl enable etcd
ss -anpt |grep 2379

2、flanneld安装并配置(两台跨主机的docker主机安装)

bash
yum -y install flannel
vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.0.11:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"

3、向etcd写入子网启动并flanneld服务

bash
etcdctl --endpoints="http://192.168.0.11:2379" set /atomic.io/network/config '{ "Network":"172.17.0.0/16", "Backend": {"Type": "vxlan"}} '
etcdctl --endpoints="http://192.168.0.11:2379" get /atomic.io/network/config
systemctl start flanneld.service
systemctl enable flanneld.service

4、配置Docker使用flannel生成的网络信息 (两台跨主机的docker主机配置)

bash
vim /usr/lib/systemd/system/docker.service
EnvironmentFile=/var/run/flannel/docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_NETWORK_OPTIONS
systemctl daemon-reload
systemctl restart docker
ps -ef |grep docker

5.两台跨主机的docker主机设置iptable转发策略为允许并重启服务(按顺序启动)

bash
iptables -P FORWARD ACCEPT
systemctl restart flanneld.service
systemctl restart docker.service

6、在两台主机创建容器相互ping验证

bash
docker run -it busybox sh
ifconfig

防火墙学习:

https://www.cnblogs.com/shijiaqi1066/p/3812510.html

http://www.zsythink.net/archives/1199