docker overlay 跨主机容器网络

docker overlay跨主机容器网络

这里使用libnetwork自带的Overlay类型驱动来实现跨主机的网络通信。Overlay驱动默认采用VXLAN协议,在IP地址可以互相访问的多个主机上之间搭建隧道,让容器可以互相访问。
docker overlay

环境情况

ip用途
172.16.18.18Consul、docker node1
172.16.18.17docker node2

配置服务注册与发现组件

在libnetwork网络方案中,需要配置一个服务注册与发现组件,如Consul、Etcd、Zookeeper等来实现跨主机容器网络通信。
这里使用Consul,在这里我直接借助一台不在组网内的docker服务器,来运行Consul容器,也可以直接安装对应的键值数据库。

搭建consul环境,这里选择下载二进制文件启动。

cd /data/consul/bin
wget https://releases.hashicorp.com/consul/1.4.0/consul_1.4.0_linux_amd64.zip
unzip consul_1.4.0_linux_amd64.zip
# 后台运行
nohup consul agent -server -ui -bootstrap-expect=1 -data-dir=/data/consul/data_dir -node=agent-one -advertise=172.16.18.18 -bind=0.0.0.0 -client=0.0.0.0 &

访问consul ui
ui端口默认8500
http://172.16.18.18:8500
consul ui

配置Docker主机

我这里是172.16.18.17和172.16.18.18 2台主机docker主机,
在docker.service配置文件ExecStart属性值后添加
一般默认路径 /usr/lib/systemd/system/docker.service

-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://172.16.18.18:8500 --cluster-advertise=eno1:2375

eno1为值Docker主机的网络卡,我这里是配置局域网的网卡。172.16.18.18就是consul键值数据库的地址。

我这里示例端口是2375,为了安全问题建议都配置 2376 端口

完整docker.service

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.io

[Service]
Environment="PATH=/data/docker/bin:/bin:/sbin:/usr/bin:/usr/sbin"
ExecStart=/data/docker/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=consul://172.16.18.18:8500 --cluster-advertise=eno1:2375
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure
RestartSec=5
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target

重启dokcer服务

systemctl daemon-reload
systemctl restart docker.service

成功配置后,可能consul ui查看注册到consul的docker主机
在这里插入图片描述

创建网络

在组网内任意节点创建网络

docker network create -d overlay  multihost

在另外的节点查看创建的网络,可见multihost

[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
8b87fa7f0222        bridge              bridge              local
7e59cda62600        docker_gwbridge     bridge              local
12be8c750d9c        host                host                local
239f5b055a49        multihost           overlay             global
1ad448bc358a        none                null                local

测试

在不同节点使用multihost创建容器,ping其中1容器可以ping通。

节点1

docker run -d -it --name=c1 --net multihost 镜像

节点2

docker run -d -it --name=c2 --net multihost 镜像

连到c2容器shell

docker exec -it c2 sh
ping c1

最终结果可ping c1,即成功。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值