Docker- 7.2、跨主机网络-overlay

news2024/10/2 10:44:04
Docker提供了overlay driver,使用户可以创建基于VxLan的overlay网络。
VxLAN可将二层数据封装到UDP进行传输,VxLAN提供与VLAN相同的 以太网二层服务,但拥有更强的扩展性和灵活性。
Docker overlay网络需要一个key-value数据库用于保存网络状态信息,包括Network、Endpoint、IP等。Consul、Etcd、ZooKeeper都是Docker支持的key-value软件,这里使用Consul。

一、准备overlay网络环境

hosts3上部署Consul:
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
可以通过http://192.168.11.73:8500访问Consul:
从上图可以看到,加载的实际是文件/usr/lib/systemd/system/docker.service
修改host1与host2的docker daemon的配置文件/usr/lib/systemd/system/docker.service。
--cluster-store:指定consul地址,表示存储在哪里
--cluster-advertise:告知consul自己的连接地址,本机网卡地址,2375为默认端口
重启docker daemon:
systemctl daemon-reload
systemctl restart docker.service
host1与hosts2将自动注册到Consul数据库:(点击KEY/VALUE,然后点击docker,nodes才会看到)
若物理网卡不支持vxlan,执行:ifconfig ens33 promisc  # 开启混杂模式
   

二、创建overlay网络

在hosts1上创建overlay网络ov_net1:
docker network create -d overlay ov_net1
注意到overlay网络的SCOPE是global,而其他网络为local。
  
在hosts2上能查看到hosts1上创建的ov_net1(因为网络信息已存如Consul中):
docker network inspect查看ov_net1的详细信息:
  

三、在overlay中运行容器

hosts1上运行busybox容器并连接到ov_net1:
docker run -itd --name bbox1 --network ov_net1 busybox
  
查看容器的网络配置:docker exec bbox1 ip r 与 docker exec bbox1 ip addr
bbox1有两个网络接口eth0与eth1
8号的那个eth0的IP为10.0.0.2,连接的是overlay网络ov_net1,容器的8号网卡连接容器外边的9号,但没在宿主机上找到,这个其实在ip netns网络空间里面,这个我们后边会讲到;
11号的那个eth1的IP为172.18.0.2,容器的11号网卡连接容器外边的12号,在住宿主机上找到了(vethfd2ceeb),默认路由走eth1,但eth1哪来的?
docker会创建一个bridge网络docker_gwbridge,为所有连接到overlay网络的容器提供访问外网的能力。
docker network inspect docker_gwbridge 的输出可以看到docker_gwbridge的IP范围是172.18.0.0/16,当前连接的容器就是bbox1。
而且此网络的网关就是网桥docker_gwbridge的IP 172.18.0.1:
这样容器bbox1就可以通过docker_gwbridge访问外网:
   

四、overlay实现跨主机通信

已经在hosts1上运行了容器bbox1。
hosts2上运行busybox容器bbox2并连接到ov_net1:
docker run -itd --name bbox2 --network ov_net1 busybox
bbox2的eth0的IP为10.0.0.3,可以直接ping通bbox1:
可见overlay网络中的容器可以直接通信,实现了DNS服务
  
overlay网络的具体实现
docker会为每个overlay网络创建一个独立的network namespace,其中会有一个linux bridge br0,endpoint还是由veth pair实现,一端连接到容器中eth0,另一端连接到namesapce的br0上。
br0除了连接所有的endpoint,还会连接一个vxlan设备,用于与其他host建立vxlan tunnel。容器之间的数据就是通过这个tunnel通信的
docker会为我们创建一个独立的网络空间,因为10网段不在物理机上,即我们使用ip a无法看到某个网卡是10网段的。
docker inspect 79 |grep -i sand 查看某个容器属于哪个netns:
使用ip netns查看宿主机的overlay网络的namespace空间,发现没有看到,此时我们需要去docker的文件系统目录下看:
里面有个netns目录,我们把它连接到我们常规查看的网络空间的目录下,然后再次查看
ln -s /var/run/docker/netns/ /var/run/netns
ip netns
这样会报错:
那就将/var/run/docker/netns/目录下的一个一个软连接到/var/run/netns/:
ln -s /var/run/docker/netns/1-16af5cc221 /var/run/netns/1-16af5cc221
ln -s /var/run/docker/netns/5d797e396ed0 /var/run/netns/5d797e396ed0
ln -s /var/run/docker/netns/f4d2d62f0696 /var/run/netns/f4d2d62f0696
再执行ip netns
hosts2上按照同样的方法:
发现两台主机都有一个1-16af5cc221的空间名字,这就是ov_net1的namespace
查看一下这个网络空间,发现了9号网卡,之前讲过创建的bbox1容器里面8号网卡连接到9号网卡,但宿主机上找不到9号网卡,在这里找到了:
发现在1-16af5cc221这个网络空间内br0这块网卡是10.0网段的,9那块网卡并没有10.0网段地址,其实我们的9号网卡也就是veth0桥接到br0上。
查看namespace中的br0上的设备:
查看vxlan0设备的具体配置信息可知此overlay使用的VNI(VxLAN ID)为256:
VxLAN IP相同,又在同一个广播域里,地址又是同一个网段,即可以通信。
    

五、overlay是如何隔离的

不同的overlay网络是相互隔离的。
创建第二个overlay网络ov_net2并运行容器bbox3:
bbox3分配的IP是10.0.1.2,ping不通bbox1:
可见,不同overlay网络之间是隔离的,即便通过docker_gw_bridge也不能通信(通过iptables实现的: ):
  
实现bbox3与bbox1通信,可以将bbox3也连接到ov_net1:
docker network connect ov_net1 bbox3

六、参考

准备 Overlay 网络实验环境 - 每天5分钟玩转 Docker 容器技术(49) (qq.com)

(1条消息) docker overlay网络详解_strongleechm的博客-CSDN博客_docker overlay

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式C语言设计模式 --- 工厂方法模式

1 - 什么是工厂方法模式? 前一篇文章讲述了在使用简单工厂模式的时候,有一个明显的缺陷,就是我们添加一款新的LCD控制器的时候,需要修改工厂类的构造函数(因为只有一家工厂),在switch-case里面新增一个条件项,违背了面向对象设计的“开闭原则”。 为了解决这个问题,可…

让自己成为一个创作者

写博客三年多,创作不易,以下是自己的一点感悟,大家共勉! “千万不要把“创作”当成是一件很大的事情,那只是思维方式和行为的转变而已!” 01 — 我有个爱好--打游戏, 特别喜欢宫崎英高的魂系…

【JavaSE成神之路】数组结构的概念与应用技术

哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路! 这一节啊,咱们要学习的内容是数组的概念与应用技术。 乍一听还挺唬人的有没有,数组这个东西呢并不是什么新的知识啦,之前的章节中我们已经学习过数组…

Linux虚拟机安装Hive(mysql安装)

Hive安装第01节 Hive安装部署1. 安装前准备2. 安装MySQL3. Hive安装配置4. metastore服务第02节. Hive客户端的使用1. 客户端介绍2. HiveServer2服务3. Hive CLI的使用4. beeline客户端5. DataGrip可视化客户端第02节 Hive简单使用1. 基本操作2. 查看YARN及HDFS3. 总结第01节 H…

Java开发 - 双链表其实不可怕

前言 说起链表,那还是当初上学的时候学习的,印象里就觉得像锁链一样一环扣一环,后来工作后就几乎没实际接触过链表,每当遇到链表,总是不知道该怎么讲,因为对链表的本质一无所知。也是在学习了Java后&#…

即将2023年了,我好想念那些2022年离职的兄弟

☆ 2022年终于即将要过去了,从年初开始,就有小伙伴不断的离开,10% 15% 20%,陆陆续续的。被裁的同学还拿着赔偿走了,不管未来怎么样吧,当下总算一身轻了。 ☆ 留下的其实一点也不轻松,以下这些经…

Anchor Based和Anchor Free的相爱相杀与ATSS的诞生

前言 我们都知道按照是否出现RPN可将目标检测算法分为two-stage和one-stage,其中one-stage的一个主要代表便是YOLO系列,而根据是否存在先验锚框的定义我们也可以将其分为Anchor based和Anchor free两类,关于这两种也是各有优劣,但…

7-7 静静的推荐

天梯赛结束后,某企业的人力资源部希望组委会能推荐一批优秀的学生,这个整理推荐名单的任务就由静静姐负责。企业接受推荐的流程是这样的: 只考虑得分不低于 175 分的学生;一共接受 K 批次的推荐名单;同一批推荐名单上…

入职软件测试一年多,薪资正常应该有多少?

软件测试这个行业我见过工作5年依然是初级水平的功能测试,拿着不到1W的薪资,也见过1年时间达到高级自动化水平的大牛学霸!拿着25K的薪资。 影响你薪资的有两点! 一、你的技术水平高低直接决定你薪资的多少,工作时间长…

谷粒学院——Day14【首页课程和名师功能】

❤ 作者主页:Java技术一点通的博客 ❀ 个人介绍:大家好,我是Java技术一点通!( ̄▽ ̄)~* 🍊 记得关注、点赞、收藏、评论⭐️⭐️⭐️ 📣 认真学习,共同进步!&am…

数字硬件建模SystemVerilog-组合逻辑建模(4)组合逻辑决策优先级

数字门级电路可分为两大类:组合逻辑和时序逻辑。锁存器是组合逻辑和时序逻辑的一个交叉点,在后面会作为单独的主题处理。组合逻辑描述了门级电路,其中逻辑块的输出直接反映到该块的输入值的组合,例如,双输入AND门的输出…

四点流程做好商机管理

企业想做好商机管理,仅凭员工是做不到的,借助CRM销售管理系统是比较明智的选择。接下来小编从客户信息管理、业务进程跟踪、设置提醒、销售漏斗等方面讲讲企业如何做好商机管理。 只有提高商机的转化率,企业的利润才会增长。想做好商机管理&…

MySQL 索引事务 · 讨论适合索引的数据结构 · N叉搜索树 · B+树 · 聚簇索引与非聚簇索引 · 事务的四个核心特性

一、索引1.1 概念1.2 作用1.3 讨论-如何提高查询的速度合适的数据结构:二叉搜索树AVL 树红黑树哈希表以上数据结构的问题:N 叉搜索树B 树B 树1.4 索引的使用场景1.5 索引的使用1.6 聚簇索引与非聚簇索引聚簇索引非聚簇索引1.7 索引 - 小结二、事务2.1 为…

小程序-会议OA项目-首页

目录 一,flex弹性布局 什么是flex布局? flex属性 flex-direction属性 学习地址: OA项目搭建以及flex布局演示 二,轮播图--组件的使用 1.先去官方文档中查看轮播图组件如何使 2.在开发工具中查看演示及修改代码 3. 使用mock…

异步通信技术AJAX | 基于JSON、XML的数据交换

目录 一:快速搞定AJAX(第二篇) 1、JS中如何创建和访问JSON对象 2、基于JSON的数据交换(重点) 3、基于XML的数据交换(了解) 一:快速搞定AJAX(第二篇) 1、…

-source1.5中不支持diamond运算符解决办法

写了几年代码了, 回到最初了遇到了bug了,没有仔细思考,以为很容易,起始走到了误区,有种打了一辈子鹰,最后被麻雀啄了眼 de 感觉 首先来看一下我们的错误信息,如下: [ERROR] Failed…

相机标定笔记(2) -- 标定实践

标定板 为什么需要标定板? 相机标定的第一篇笔记中提到了相机标定所使用的模型,标定算法中我们需要一些可靠的样本点,这些样本点由世界坐标系中的3D点和其在图像上的2D像点组成。用这些2D和3D点对来求解标定参数。为了构建更高精度的3D和2D点&#xff0…

对于系统架构来说,要么进化,要么死亡

在亚马逊云科技年度re:Invent,亚马逊首席技术官Dr. Werner Vogels的主题演讲历来涵盖大量科学和技术领域,今年的演讲也不例外,座无虚席。现在,亚马逊云科技 2022 re:Invent 中国区 recap 正式也开始了,欢迎大家积极参与…

单例模式之饿汉模式懒汉模式

前言 单例模式能保证某个类在程序中只存在唯一一份实例,而不会创建出多个实例,比如 JDBC 中的 DataSource 实例就只需要一个。单例模式具体的实现方式有"饿汉" 和 "懒汉" 两种。 1.饿汉模式(类加载的同时创建实例&…

SOLIDWORKS装配体如何快速导出BOM丨慧德敏学

BOM作为产品数据的组成部分,它的重要性不言而喻。采购需要BOM、成本核算需要BOM、领料加工和装配需要BOM、录入ERP需要BOM……可以说,BOM与图纸同样重要,有些产品,可以没有图纸,但是不能没有BOM。借助SOLIDWORKS BOM插…