前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于consul的Docker-overlay跨多宿主机容器网络

基于consul的Docker-overlay跨多宿主机容器网络

作者头像
字母哥博客
发布2020-09-23 11:27:50
1.8K1
发布2020-09-23 11:27:50
举报
文章被收录于专栏:写字母的代码哥

向您推荐

Dcoker入门与实践系列文章

环境限制

  • 必须安装key-value存储服务,如consul
  • 宿主机已经安装docker engine
  • 宿主机的hostname必须不同
  • 内核大于3.16

环境准备及角色分配

  • 两台ubuntu的server

主机名

ip

内核

启动docker容器名称

docker engine版本

consul服务

server1

192.168.1.75

4.2.0-27-generic

server1(centOS7)

1.10.2

server

server2

192.168.1.76

4.2.0-27-generic

server2(centOS7)

1.10.2

client

  • 实验目标:两个CentOS7容器server1,server2网络互通,注意本文中的hanxt@server1和hanxt@server2

下载分布式发现服务协调软件:consul

  • 下载consul软件并解压,实际就是一个二进制文件放到$PATH下面即可
代码语言:javascript
复制
hanxt@server1:~$ wget https://releases.hashicorp.com/consul/0.6.3/consul_0.6.3_linux_amd64.zip

hanxt@server1:~$ unzip consul_0.6.3_linux_amd64.zip;

hanxt@server1:~$ sudo mv consul /bin
  • 启动consul
代码语言:javascript
复制
hanxt@server1:~$ nohup sudo consul agent -server -bootstrap -data-dir /home/hanxt/workspace/data/consul -bind=192.168.1.75 &

hanxt@server2:~$ nohup sudo consul agent -data-dir /home/hanxt/workspace/data/consul -bind=192.168.1.76 &

hanxt@server2:~$ consul join 192.168.1.75

可以启动一个server和多个agent(此处是一个),然后让agent,join到consul集群中

配置Docker并重启

  • 在每一台docker宿主机上做如下配置,并重启docker
代码语言:javascript
复制
 sudo vi /etc/default/docker

DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store consul://localhost:8500 --cluster-advertise eth0:2375"



sudo service docker restart
  • 集群配置

--cluster-store= 参数指向docker daemon所使用key value service的地址(本例中即consul的服务地址) --cluster-advertise= 参数决定了所使用网卡以及docker daemon端口信息

  • 宿主机配置

上面的-H 的参数分别指定了docker demon服务的地址和协议

创建overlay网络

  • 创建
代码语言:javascript
复制
hanxt@server1:~$ sudo docker network create -d overlay  multihost
  • 验证

在server1上创建的multihost网络,会通过consul服务同步到server2上面

代码语言:javascript
复制
hanxt@server2:~$ docker network ls

NETWORK ID          NAME                DRIVER

4956314037af        multihost           overlay             

e17295058b38        bridge              bridge              

e4ef9ba16838        none                null                

f3312e582310        host                host                

创建容器

代码语言:javascript
复制
docker run -d --net=multihost --name=host1 hanxt/centos:7

docker run -d --net=multihost --name=host2 hanxt/centos:7

验证网络互通

代码语言:javascript
复制
hanxt@server2:~$ docker exec -it host2 bash

[root@2516560c337f /]# ifconfig eth0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450

        inet 10.0.0.3  netmask 255.255.255.0  broadcast 0.0.0.0

        inet6 fe80::42:aff:fe00:3  prefixlen 64  scopeid 0x20<link>

        ether 02:42:0a:00:00:03  txqueuelen 0  (Ethernet)

        RX packets 29  bytes 2522 (2.4 KiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 22  bytes 1964 (1.9 KiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@2516560c337f /]# 

[root@2516560c337f /]# ping 192.168.1.75

PING 192.168.1.75 (192.168.1.75) 56(84) bytes of data.

64 bytes from 192.168.1.75: icmp_seq=1 ttl=63 time=0.790 ms

64 bytes from 192.168.1.75: icmp_seq=2 ttl=63 time=0.825 ms

64 bytes from 192.168.1.75: icmp_seq=3 ttl=63 time=0.907 ms

^C

--- 192.168.1.75 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2002ms

rtt min/avg/max/mdev = 0.790/0.840/0.907/0.059 ms

[root@2516560c337f /]# 

[root@2516560c337f /]# ping 10.0.0.2

PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.

64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=1.13 ms

64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=1.03 ms

64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=1.06 ms

64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=1.09 ms

^C

--- 10.0.0.2 ping statistics ---

4 packets transmitted, 4 received, 0% packet loss, time 3004ms

rtt min/avg/max/mdev = 1.031/1.080/1.130/0.043 ms

[root@2516560c337f /]#
  • 验证结论,server2容器host2的ip=10.0.0.3,可以ping通server1,可以ping通server1上的容器host1的ip=10.0.0.2

如何使用静态ip

  • 以上的实验步骤。container的ip都是自动分配的,如果需要静态的固定ip,怎么办?
  • 在创建网络的过程中有区别
代码语言:javascript
复制
sudo docker network create -d overlay --ip-range=192.168.2.0/24 --gateway=192.168.2.1 --subnet=192.168.2.0/24 multihost


docker run -d --name host1 --net=multihost --ip=192.168.2.2 hanxt/centos:7

docker run -d --name host2 --net=multihost --ip=192.168.2.3 hanxt/centos:7

向您推荐

Dcoker入门与实践系列文章

喜欢 (5)or分享 (0)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-06-06),如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 向您推荐
    • 环境限制
      • 环境准备及角色分配
        • 下载分布式发现服务协调软件:consul
          • 配置Docker并重启
            • 创建overlay网络
              • 创建容器
                • 验证网络互通
                • 如何使用静态ip
                • 向您推荐
                相关产品与服务
                容器镜像服务
                容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档