美文网首页
docker容器间跨宿主机通信-基于overlay

docker容器间跨宿主机通信-基于overlay

作者: 满脸胡渣的年轻大叔 | 来源:发表于2022-11-02 14:39 被阅读0次

    overlay网络解析

    内置跨主机的网络通信一直是Docker备受期待的功能,在1.9版本之前,社区中就已经有许多第三方的工具或方法尝试解决这个问题,例如Macvlan、Pipework、Flannel、Weave等。

    虽然这些方案在实现细节上存在很多差异,但其思路无非分为两种: 二层VLAN网络和Overlay网络

    简单来说,二层VLAN网络解决跨主机通信的思路是把原先的网络架构改造为互通的大二层网络,通过特定网络设备直接路由,实现容器点到点的之间通信。这种方案在传输效率上比Overlay网络占优,然而它也存在一些固有的问题。

    这种方法需要二层网络设备支持,通用性和灵活性不如后者。

    由于通常交换机可用的VLAN数量都在4000个左右,这会对容器集群规模造成限制,远远不能满足公有云或大型私有云的部署需求; 大型数据中心部署VLAN,会导致任何一个VLAN的广播数据会在整个数据中心内泛滥,大量消耗网络带宽,带来维护的困难。

    相比之下,Overlay网络是指在不改变现有网络基础设施的前提下,通过某种约定通信协议,把二层报文封装在IP报文之上的新的数据格式。这样不但能够充分利用成熟的IP路由协议进程数据分发;而且在Overlay技术中采用扩展的隔离标识位数,能够突破VLAN的4000数量限制支持高达16M的用户,并在必要时可将广播流量转化为组播流量,避免广播数据泛滥。

    因此,Overlay网络实际上是目前最主流的容器跨节点数据传输和路由方案。

    容器在两个跨主机进行通信的时候,是使用overlay network这个网络模式进行通信;如果使用host也可以实现跨主机进行通信,直接使用这个物理的ip地址就可以进行通信。overlay它会虚拟出一个网络比如10.0.2.3这个ip地址。在这个overlay网络模式里面,有类似于服务网关的地址,然后把这个包转发到物理服务器这个地址,最终通过路由和交换,到达另一个服务器的ip地址。

    基于consul互通.png

    环境介绍

    主机1(cdh1) (内网)172.20.142.133 (外网)11.11.11.10 centos7
    主机2(cdh2) (内网)172.20.142.134 (外网) 64.90.23.0 centos7

    consul安装配置

    要实现overlay网络,我们会有一个服务发现。比如说consul,会定义一个ip地址池,比如10.0.2.0/24之类的。上面会有容器,容器的ip地址会从上面去获取。获取完了后,会通过ens33来进行通信,这样就可以实现跨主机的通信。

    consul通过docker部署在主机1,首先需要修改cdh1中的docker配置并重启

    [root@cdh1 /]# vim /etc/docker/daemon.json
    //添加以下配置
    "live-restore":true
    [root@cdh1 /]# systemctl restart docker
    

    "live-restore":true 此配置的作用为在docker守护程序停止或重启的时候,容器依然可以保持运行

    在cdh1下载consul镜像并启动

    [root@cdh1 /]# docker pull consul
    [root@cdh1 /]# docker run -d -p 8500:8500 -h consul --name consul consul
    

    修改cdh1中的docker配置并重启

    [root@cdh1 /]# vim /etc/docker/daemon.json
    # 添加以下两行配置
    "cluster-store": "consul://172.20.142.133:8500"
    "cluster-advertise": "172.20.142.133:2375"
    [root@cdh1 /]# systemctl restart docker
    

    修改cdh2中的docker配置并重启

    [root@cdh2 /]# vim /etc/docker/daemon.json
    # 添加以下两行配置
    "cluster-store": "consul://172.20.142.133:8500"
    "cluster-advertise": "172.20.142.134:2375"
    [root@cdh2 /]# systemctl restart docker
    

    cluster-store指定的是consul服务地址,因为consul服务运行在cdh1的8500端口,所以两台机器的cluster-store值均为consul://172.20.142.133:8500
    cluster-advertise指定本机与consul的通信端口,所以指定为本机的2375端口

    此时可以通过11.11.11.10:8500/访问consul地址
    注:外网ip 是可用,且8500 端口没有被安全策略拦载,才能在浏览器打开。
    内网也一样。如若无法访问查看,可先继续向下做

    image.png

    创建overlay网络

    此时我们可以创建overlay网络,首先查看目前节点中已有的网络类型

    [root@cdh1 /]# docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    ab0f335423a1        bridge              bridge              local
    b12e70a8c4e3        host                host                local
    0dd357f3ecae        none                null                local
    

    然后在cdh1的docker节点创建overlay网络,因为此时consul服务发现已经正常运行,且cdh1和cdh2的docker服务已经接入,所以此时overlay网络是全局创建的,在任何一台宿主机创建一次即可。

    [root@cdh1 /]#  docker network create -d overlay web_overlay
    52ee71d5a85ce623d6c4540c5c74d84af3bce036647a0c7004bbda9e8c7efc3d
    [root@cdh1 /]# docker network ls
    NETWORK ID     NAME                     DRIVER    SCOPE
    48265c7b2376   bridge                   bridge    local
    20de1b61d77e   docker_gwbridge          bridge    local
    27fa09aae48c   host                     host      local
    7af59b9b68d8   none                     null      local
    52ee71d5a85c   web_overlay              overlay   global
    e1be0f0195ba   webapp-network           bridge    local
    

    此时可以看到,创建的overlay网络,标识为golbal。我们可以查看cdh2的网络,可以发现overlay网络也已经创建完毕。

    [root@cdh2 ~]# docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    NETWORK ID     NAME                     DRIVER    SCOPE
    c41e341a874d   bridge                   bridge    local
    d6dde9b54c6e   host                     host      local
    56bf915f2296   monitor_webapp-network   bridge    local
    065e8322394c   nacos_default            bridge    local
    1e621adf6e1d   none                     null      local
    52ee71d5a85c   web_overlay              overlay   global
    7d55af6beb79   webapp-network           bridge    local
    

    启动网络镜像,在nacos查看容器ip

    image.png image.png

    至此,已互通

    相关文章

      网友评论

          本文标题:docker容器间跨宿主机通信-基于overlay

          本文链接:https://www.haomeiwen.com/subject/xasjtdtx.html