实现 docker 跨主机通信(Consul版)
侧边栏壁纸
  • 累计撰写 170 篇文章
  • 累计收到 176 条评论

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

若海
2021-03-19 / 0 评论 / 46,487 阅读 / 正在检测是否收录...

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

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

环境配置

节点名节点IP节点服务
consul10.0.0.11安装 Consul
dnode110.0.0.12安装 Docker
dnode210.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
0

评论 (0)

取消