iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >利用overlay怎么实现docker容器间跨宿主机通信
  • 727
分享到

利用overlay怎么实现docker容器间跨宿主机通信

2023-06-06 11:06:08 727人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关利用overlay怎么实现Docker容器间跨宿主机通信,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。overlay网络解析内置跨主机的网络通信一直是Docker备受期待

这期内容当中小编将会给大家带来有关利用overlay怎么实现Docker容器间跨宿主机通信,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

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地址。

利用overlay怎么实现docker容器间跨宿主机通信

环境介绍


hostnameip系统版本
cdh210.30.10.111Centos7
cdh310.30.10.112centos7

consul安装配置

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

利用overlay怎么实现docker容器间跨宿主机通信

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

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

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

在cdh2下载consul镜像并启动

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

修改cdh2中的docker配置并重启

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

修改cdh3中的docker配置并重启

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

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

此时可以通过Http://10.30.10.111:8500/访问consul地址
Key/Value菜单中的docker-nodes目录中可以看到cdh2和cdh3两个docker节点,代表consul配置成功。

利用overlay怎么实现docker容器间跨宿主机通信

创建overlay网络

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

[root@cdh2 /]# docker network lsNETWORK ID   NAME    DRIVER    SCOPEab0f335423a1  bridge    bridge    localb12e70a8c4e3  host    host    local0dd357f3ecae  none    null    local

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

[root@cdh2 /]# docker network create -d overlay my_overlaycafa97c5cf9d30dd6cef08a5e9710074c828cea3fdd72edb45315fb4b1bfd84c[root@cdh2 /]# docker network lsNETWORK ID   NAME    DRIVER    SCOPEab0f335423a1  bridge    bridge    localb12e70a8c4e3  host    host    localcafa97c5cf9d  my_overlay   overlay    global0dd357f3ecae  none    null    local

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

[root@cdh3 ~]# docker network lsNETWORK ID   NAME    DRIVER    SCOPE90d99658ee8f  bridge    bridge    local19f844200737  host    host    localcafa97c5cf9d  my_overlay   overlay    global3986fe51b271  none    null    local

网络测试

创建完成后,我们可以在cdh2和cdh3中指定overlay网络创建docker容器,并进行测试,查看是否可以跨宿主机通信。

在cdh2中创建名称为master的容器,并查看其IP

[root@cdh2 /]# docker run -itd -h master --name master --network my_overlay centos7_update /bin/bash[root@cdh2 /]# docker inspect -f "{{ .networkSettings.Networks.my_overlay.IPAddress}}" master10.0.0.2

在cdh2中创建名称为slaver的容器,并查看其IP

[root@cdh3 ~]# docker run -itd -h slaver --name slaver --network my_overlay centos7_update /bin/bash[root@cdh3 ~]# docker inspect -f "{{ .NetworkSettings.Networks.my_overlay.IPAddress}}" slaver10.0.0.3

此时进入两台容器中,互相ping对方的IP,查看是否成功通信

[root@cdh2 ~]# docker exec -it master /bin/bash[root@master /]# ping 10.0.0.3PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=0.587 ms64 bytes from 10.0.0.3: icmp_seq=2 ttl=64 time=0.511 ms64 bytes from 10.0.0.3: icmp_seq=3 ttl=64 time=0.431 ms64 bytes from 10.0.0.3: icmp_seq=4 ttl=64 time=0.551 ms64 bytes from 10.0.0.3: icmp_seq=5 ttl=64 time=0.424 ms^C--- 10.0.0.3 ping statistics ---5 packets transmitted, 5 received, 0% packet loss, time 4000msrtt min/avg/max/mdev = 0.424/0.500/0.587/0.070 ms
[root@cdh3 ~]# docker exec -it slaver /bin/bash[root@slaver /]# ping 10.0.0.2PING 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=0.499 ms64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.500 ms64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.410 ms64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.370 ms^C--- 10.0.0.2 ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 3000msrtt min/avg/max/mdev = 0.370/0.444/0.500/0.062 ms

上述就是小编为大家分享的利用overlay怎么实现docker容器间跨宿主机通信了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网精选频道。

--结束END--

本文标题: 利用overlay怎么实现docker容器间跨宿主机通信

本文链接: https://www.lsjlt.com/news/246562.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 利用overlay怎么实现docker容器间跨宿主机通信
    这期内容当中小编将会给大家带来有关利用overlay怎么实现docker容器间跨宿主机通信,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。overlay网络解析内置跨主机的网络通信一直是Docker备受期待...
    99+
    2023-06-06
  • Docker容器怎么实现跨主机通信
    本篇内容介绍了“Docker容器怎么实现跨主机通信”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Docker主机间容器通信的解决方案Do...
    99+
    2023-06-29
  • docker overlay实现跨主机的容器互通的方法
    目录1. docker配置2. 创建注册中心与网络3. 启动容器环境说明 ...
    99+
    2024-04-02
  • Docker跨服务器通信Overlay怎么实现
    本篇内容主要讲解“Docker跨服务器通信Overlay怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Docker跨服务器通信Overlay怎么实现”吧!场景公司微服务快上线了,微服务都...
    99+
    2023-06-21
  • Docker容器跨主机通信overlay网络的解决方案
    目录一、Docker主机间容器通信的解决方案二、Docker Overlay Network三、使用键值存储搭建Docker主机集群4.1 系统环境4.2 安装Consul4.3 节...
    99+
    2024-04-02
  • docker实现跨宿主机的容器之间网络互联
    目录一. 环境介绍二. docker跨主机互联实现说明三. 修改docker0网桥网段3.1 A宿主机10.1.10.1133.2 B宿主机10.1.10.114背景:最近闲来无事,...
    99+
    2023-01-04
    docker 跨宿主机互联 Docker跨宿主机
  • docker跨主机通信怎么实现
    要实现Docker跨主机通信,可以使用以下几种方法: 使用Docker的网络模式:可以使用Docker的overlay网络模式来...
    99+
    2023-10-27
    docker
  • 聊聊docker跨主机之间容器通信问题
    目录一、环境信息二、具体实践1.在testa主机上创建docker桥接网络2.在testb主机上创建docker桥接网络3.在testa主机中你自定义的网段选取任意IP地址作为你要启...
    99+
    2024-04-02
  • Docker容器跨主机通信之:OVS+GRE
    由于docker自身还未支持跨主机容器通信,需要借助docker网络开源解决方案OVSOpenVSwich即开放式虚拟交换机实现,简称OVS,OVS在云计算领域应用广泛,值得我们去学习使用。OpenVSwichOpenVSwich是一种开源...
    99+
    2023-01-31
    容器 主机 通信
  • docker容器时间与宿主机怎么同步
    Docker容器的时间通常是与宿主机同步的,但有时候可能会出现时间不同步的情况。以下是一些常见的方法来确保Docker容器的时间与宿...
    99+
    2024-04-09
    docker
  • Docker跨主机容器间相互访问的实现
    第一步:创建自定义网络 docker network create --subnet=172.18.0.0/24 docker-br0 备注:这里选取了172.18.0.0网段,也可...
    99+
    2023-01-04
    Docker 跨主机访问 Docker 容器相互访问
  • Docker容器跨主机通信之:直接路由方式
    直观上看,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)与外界相通,并可以收发数据包;此外,如果不同子网之间要进行通信,需要额外的路由机制。 Docker中的网络接口默认都是虚拟的接口。虚拟接口的最大优势就是转发效...
    99+
    2023-01-31
    路由 容器 主机
  • docker 实现容器与宿主机无缝调用shell命令
    如下所示: nsenter -t 1 -m -u -n -i sh -c "echo hello world! " docker容器加上privilege权限, 设置pid: ...
    99+
    2024-04-02
  • docker容器与容器之间怎么通信
    Docker容器与容器之间有多种通信方式,以下是一些常用的方法: 使用Docker网络:Docker提供了多种网络模式,包括桥接...
    99+
    2024-02-29
    docker
  • docker怎么映射容器目录到宿主机
    在Docker中,可以使用`-v`或`--volume`命令将容器内的目录映射到宿主机上。 以下是两种常见的方法: 使用绝对路径...
    99+
    2023-10-27
    docker
  • Docker容器之间的通信的方法实现
    情景:本地已经搭建laradock开发环境(php7.3+mysql5.7),现在想用laradock环境来运行同一个已有项目,但是该项目数据在mysql5.6的docker容器里...
    99+
    2024-04-02
  • docker容器中无法获取宿主机hostname怎么办
    小编给大家分享一下docker容器中无法获取宿主机hostname怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在nodejs环境中测试通过,其它语言同理,...
    99+
    2023-06-14
  • 常用的跨主机Docker容器互通方法有哪些
    本篇内容主要讲解“常用的跨主机Docker容器互通方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“常用的跨主机Docker容器互通方法有哪些”吧!现在提...
    99+
    2024-04-02
  • Docker容器与宿主机资源怎么隔离与共享
    Docker容器与宿主机资源可以通过一些机制进行隔离与共享: 命名空间(Namespaces):Docker使用Linux的命名...
    99+
    2024-05-07
    Docker
  • Kubernetes中容器跨主机网络怎么实现
    这篇“Kubernetes中容器跨主机网络怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Kubernetes中容器跨...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作