您好,登录后才能下订单哦!
请求超时!
请点击 重新获取二维码本篇文章给大家分享的是有关Docker 中怎么搭建overlay 网络,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
在swarm模式下构建和测试一个Docker overlay网络
在下面的例子中,需要2个Docker主机,在两个分离的二层网络 ,通过路由器进行连接,如下图 所示:
1)构建swarm
我们要做的第一件事是把两台主机 配置成两节点的swarm。在node1上运行命令:docker swarm init,使得node1成为manager,然后在node2上运行命令:docker swarm join,使得node2成为worker。
在node1上运行命令:
$ docker swarm init \ |
--advertise-addr=172.31.1.5 \ |
--listen-addr=172.31.1.5:2377 |
Swarm initialized: current node (1ex3...o3px) is now a manager. |
在node2上运行命令:
$ docker swarm join \ |
--token SWMTKN-1-0hz2ec...2vye \ |
172.31.1.5:2377 |
This node joined a swarm as a worker. |
至此,已经创建好了包含包含node1和node2两个节点的swarm。
2)创建一个overlay网络
创建一个叫做uber-net的overlay网络。
在node1(manager)上运行如下命令:docker network create -d overlay uber-net
通过上述命令创建了一个新的overlay网络,其对Swarm中的所有主机是可用的,还包含一个用TLS加密的控制平面。如果想加密数据平面,需要在命令中增加参数:-o encrypted。
可以使用 docker network ls命令来查看每一个节点上的网络。
我们创建的uber-net网络在列表的低端。其他的网络当Docker安装的时候和初始化Swarm的时候创建。
如果在node2运行 docker network ls 命令,你将注意你不能看见uber-net网络。这是因为只有当运行中的容器连接到网络时,新网络才对worker节点可见。这种延迟方法通过减少网络数量提高了网络的可扩展性。
3)将服务连接到overlay网络
现在我们有一个overlay网络,让我们创建一个新的Docker服务并连接到overlay网络。我们将创建的服务包含两个副本(容器),因此一个可以运行在node1和另一个可以运行在node2。这将会自动化地扩展uber-net网络到node2.
在node1上执行如下命令:
docker service create --name test --network uber-net --replicas 2 ubuntu sleep infinity
创建了一个名为test的服务,并连接到uber-net网络,基于提供的镜像创建了2个副本(容器)。在上面的例子中,我们向容器发送了sleep命令保持容器运行,并且在停止后退出。
因为我们运行了2个副本(容器),Swarm有2个节点,在每一个节点上将会有一个副本。可以使用 docker service ps查看,如下所示:
当Swarm在一个overlay网络上启动一个容器时,它自动把网络扩展到运行容器的节点上。这意味着在node2上可以看见uber-net网络。
4)测试overlay网络
现在用ping命令来测试overlay网络。
如下图所示,我们在分离的网络上得到2个Docker主机,二者都接入了单一的overlay网络。在每一个节点上都有一个容器连接到overlay网络。可以用ping命令来查看两个容器之间是否连通。
为了执行测试,我们需要 知道每一个容器的IP地址,通过运行docker network inspect可以看到分配给overlay的子网
上面是输出显示uber-net’s 的子网是 10.0.0.0/24。注意,这并不匹配任何有一个物理基础网络(172.31.1.0/24 和192.168.1.0/24).
在节点1和节点2上运行如下命令,这将会得到容器的ID和IP地址。
最终的uber-net’s 的信息如下图所示:
我们可以看到,二层overlay网络横跨两个主机,在overlay网络上每一个容器都有一个IP地址。这意味着node1上的容器可以使用10.0.0.4来ping node2上的容器。尽管这两个节点位于不同的二层基础网络,但是还可以ping通。
在node1上登录进容器,并ping远程容器。
在Linux Ubuntu 容器中需要安装ping工具包。如下所示:
使用overlay网络,在node1上的容器可以ping通node2上的容器。也可以在容器内追踪ping命令的路由。
到目前为止,我们已经通过单条命令创建了overlay网络,并向网络中接入了容器。容器分布在两个不同的主机上,两台主机分属于不同的二层网络。在找出两台容器的 IP 之后,验证了容器可以通过overlay网络直接连接。
工作原理
现在,我们已经知道如何构建和使用一个容器overlay网络。让我们找出背后的工作原理。
1)VXLAN 入门
首先,Docker overlay网络使用VXLAN隧道创建虚拟的二层overlay网络。在进行下一步之前,我们先快速了解VXLAN入门。
在最高层次上,VXLAN允许在已存在的3层基础设施上创建一个虚拟的2层网络。我们前面使用的例子创建了一个新的10.0.0.0/24二层网络,其基于3层IP网络,3层IP网络由2个2层网络组成-172.31.1.0/24 和192.168.1.0/24,如下图所示:
VXLAN的美妙之处在于它是一种封装技术,使得已存在的路由和网络基础设施看起来像普通的IP/UDP数据包。处理起来无问题。
为了创建虚拟2层网络,通过基础3层IP基础设施创建了一个VXLAN隧道。你也许听过基础网络,常用于指3层以下的基础部分。
VXLAN隧道的每一端都有VXLAN岁宝端点(VTEP)。这个VTEP执行封装和解封装以及一些功能所必须的操作。如下图:
2)梳理两容器例子
在这个例子中,我们有两个通过IP网络连接的主机。每一个主机运行一个单一容器,我们创建了一个单一的VXLAN网络并让容器连接到它。
为了完成这个,在每一个主机上创建一个新的sandbox。如前述章节所述,一个sandbox像一个容器,但是代替运行一个运行程序,它运行一个隔离的网络栈
在sandbox内部创建了一个虚拟交换机(又叫虚拟网桥)叫做Br0,同时也创建了一个VTEP,一端插入到Br0虚拟交换机,另一端插入到主机网络栈(VTEP)
主机网络栈的一端从主机所连接的基础网络中获取IP地址,并以UDP的方式绑定到端口4789,每一个主机上的两个VTEPs通过VXLAN创建了一个overlay。如下所示:
这是VXLAN overlay网络的基础。
每个容器都得到它自己的虚拟Ethernet(veth)适配器,并插入到本地Br0虚拟交换机。拓扑结构如下所示。
3)通信例子
现在,我们看到了主要的插拔元素,让我们看两个容器的通信。
我们把node1上的容器称为C1,把node2上的容器称为C2,假定C1想ping通C2.如下图所示:
C1创建ping请求,并设置目的IP地址为C2的10.0.0.4地址。通过连接到Br0虚拟交换机的veth接口发送流量。虚拟交互机并不知道向什么地方发送packet,因为在它的MAC地址表里 没和目的IP地址对应的任何入口 。因此,它将数据包泛洪到所有的端口。连接到Br0的VTEP接口知道如何转发这个帧,因此用它自己的MAC地址响应。这是一个ARP代理重放。并且Br0交换机学习到了如何转发packet。因此它更新ARP路由表,将10.0.0.4映射到本地VTEP的MAC地址上。
现在 Br0 虚拟交换机已经学会如何将流量转发到 C2,所有未来发送到 C2 的包都会被直接转发到 VTEP 接口。VTEP 接口知道 C2,是因为所有新启动的容器都会将自己的网络详情采用网络内置 Gossip 协议发送给相同 Swarm 集群内的其他节点。
交换机会将包转发到 VTEP 接口,VTEP 完成数据帧的封装,这样就能在底层网络传输。具体来说,封装操作就是把 VXLAN Header 信息添加以太帧当中。
VXLAN Header 信息包含了 VXLAN 网络 ID(VNID),其作用是记录 VLAN 到 VXLAN 的映射关系。每个 VLAN 都对应一个 VNID,以便包可以在解析后被转发到正确的 VLAN。
封装的时候会将数据帧放到 UDP 包中,并设置 UDP 的目的 IP 字段为 node2 节点的 VTEP 的 IP 地址,同时设置 UDP Socket 端口为 4789。这种封装方式保证了底层网络即使不知道任何关于 VXLAN 的信息,也可以完成数据传输。
当包到达 node2 之后,内核发现目的端口为 UDP 端口 4789,同时还知道存在 VTEP 接口绑定到该 Socket。所以内核将包发给 VTEP,由 VTEP 读取 VNID,解压包信息,并根据 VNID 发送到本地名为 Br0 的连接到 VLAN 的交换机。在该交换机上,包被发送给容器 C2。
Docker 支持使用同样的覆盖网络实现三层路由。例如,读者可以创建包含两个子网的覆盖网络,Docker 会负责子网间的路由。创建的命令如 docker network create --subnet=10.1.1.0/24 --subnet=11.1.1.0/24 -d overlay prod-net。该命令会在 Sandbox 中创建两个虚拟交换机,默认支持路由。
以上就是Docker 中怎么搭建overlay 网络,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
深圳SEO优化公司朔州外贸网站制作多少钱阜新关键词按天计费推荐池州网站搜索优化价格鹤岗模板网站建设价格贺州SEO按天计费报价韶关如何制作网站价格淮安seo优化哪家好新乡网站推广价格平湖优秀网站设计哪家好营口seo网站优化公司九江网站改版哪家好甘孜关键词排名包年推广推荐萍乡网站优化多少钱长葛网站关键词优化多少钱邵阳网站优化软件推荐延安百姓网标王聊城网站推广方案永湖设计公司网站推荐铜川营销网站价格柳州百度关键词包年推广公司百色seo网站推广邯郸网络广告推广哪家好淮安英文网站建设平湖网站推广工具公司珠海营销网站推荐景德镇百度seo推荐银川seo网站推广哪家好桐城如何制作网站公司大连建设网站威海企业网站建设歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运