实现 docker 跨主机通信(Consul版)

本文将在云服务器之间实现基于Consul的overlay网络,以达到跨主机通信的目的。

docker 和 consul 的安装教程非常之多,这里不再赘述。

环境配置

节点名 节点IP 节点服务
consul 10.0.0.11 安装 Consul
dnode1 10.0.0.12 安装 Docker
dnode2 10.0.0.13 安装 Docker

配置三台机器,请注意修改hostname为不同的值,防火墙放行如下端口:

  • 2376
  • 4789
  • 7946
  • 8300-8302
  • 8500
  • 8600

启动一个单节点的Consul服务

consul agent -ui -server -bootstrap -data-dir /var/lib/consul -bind 10.0.0.11 -client 10.0.0.11

在其他服务器分别启动Docker服务

docker daemon -D -g /var/lib/docker -H unix:// -H tcp://0.0.0.0:2376 --cluster-advertise=eth0:2376 --cluster-store=consul://10.0.0.11:8500
  • --cluster-store 指定了consul服务发现地址
  • --cluster-advertise 指定了本机服务注册地址,其中eth0是自己网卡的名称,也可以用本机内网地址10.0.0.x代替

等待自动注册服务

可以使用浏览器打开http://10.0.0.11:8500查看

在节点上创建网络

docker network create --driver overlay \
    --subnet=10.0.2.0/24 --gateway=10.0.2.1 ovnet

为方便部署,也可以将CLI参数写入配置文件

cat <<EOF >/etc/consul/server.json
{
  "data_dir": "/var/consul",
  "server": true,
  "bootstrap": true,
  "bind_addr": "{{ GetInterfaceIP \"eth0\" }}",
  "client_addr": "0.0.0.0",
  "ui_config": {
    "enabled": true
  }
}
EOF

if [ -f /etc/conf.d/docker ]; then
    opts="--cluster-advertise=eth0:2376 --cluster-store=consul://10.0.0.11:8500"
    sed -i "s#OPTS=\"\"#OPTS=\"$opts\"#" /etc/conf.d/docker
fi

分别在不同的节点上创建可互访的容器

docker run -it --rm --network ovnet --ip 10.0.2.5 alpine
docker run -it --rm --network ovnet --ip 10.0.2.6 alpine
docker run -it --rm --network ovnet --ip 10.0.2.7 alpine
文章作者: 若海; 原文链接: https://www.rehiy.com/post/208/; 转载需声明来自技术写真 - 若海

添加新评论