主机overlay和网络overlay_Docker网络篇之overlay模式
overlay网络简介
前面介绍过的host网络模式和bridge网络模式都是在单体的docker服务器上的容器间的网络通信。对于多个docker服务器上的多个容器间网络通信就需要使用到overlay网络模式了。
overlay网络常常用于docker swarm集群上的服务编排。当初始化docker swarm集群或者docker主机加入已存在的swarm集群时,会默认创建一个叫ingress的overlay网络和一个叫docker_gwbridge的bridge网络。其中docker_gwbridge的作用是将ingress跟宿主机的网络接口连接,这样才能将流量发送到swarm集群的每个节点上实现网络通信。
如果创建一个swarm集群的服务而没有自定义网络,那么会默认将服务连接到ingress的overlay网络上。建议每个swarm集群的服务都自定义overlay网络,这样可以实现不同的swarm集群服务间的网络隔离。
接下来说明overlay网络的使用,需要准备两台台已安装docker的服务器,一台初始化为manager节点,另一台加入swarm集群作为worker节点,可参考Docker系列之Docker Swarm容器管理与调度。
注: swarm集群需要用2377、7946、4798端口,配置防火墙的端口白名单或关闭防火墙。
使用overlay网络编排部署服务
使用swarm集群部署编排服务,其网络可以先创建好,而后在docker-compose.yml中配置引用。也可以直接在docker-compose.yml中定义,部署服务时会自动创建网络。
注: swarm集群管理的相关命令只能在manager节点运行。
自定义overlay网络:
$ docker network create -d overlay --subnet=10.11.0.0/16 my-overlay
定义一个overlay网络,名为my-overlay,网段为10.11.0.0/16。
查看网络列表:
$ docker network lsNETWORK ID NAME DRIVER SCOPE20706abe43b3 bridge bridge local87e7be65d0ce docker_gwbridge bridge locald2ad0895e4f3 host host local3rrki5qjsbr4 ingress overlay swarmqse9xsv76lbp my-overlay overlay swarm8e5de9308b80 none null local
在manager节点可以看到新创建的my-overlay在列表中,如果此时直接在worker节点上执行docker network ls是看不到my-overlay网络的,当部署swarm集群服务并且引用my-overlay网络,将服务部署在worker节点上时,就可以看到my-overlay网络已创建。
下面以一个tomcat与redis的服务编排来验证一下跨宿主机的网络通信。
在docker-compose.yml中引用网络,如下:
version: '3'services:tomcat:image: tomcat:8.5networks: - tc-netports: - 8080:8080deploy:replicas: 2restart_policy:condition: anyredis:image: redis:5.0networks: - tc-netdeploy:replicas: 1restart_policy:condition: anynetworks:tc-net:driver: overlayexternal:name: my-overlay
作为参考,在docker-compose.yml中定义网络:
...networks: tc-net: driver: overlay ipam: config: - subnet: 10.15.0.0/26
在docker-compose.yml中定义tomcat和redis两个服务,使用external属性来引用已经创建好的网络my-overlay。
部署服务:
# manager节点docker stack deploy -c docker-compose.yml tc
查看服务:
# manager节点$ docker stack ps tc
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS1l0pkds2izjh tc_tomcat.1 tomcat:8.5 docker-manager Running Running 5 minutes ago6icmjpn4wugt tc_redis.1 redis:5.0 docker-manager Running Running 5 minutes agoz2j2nahaxe3j tc_tomcat.2 tomcat:8.5 docker-worker Running Running 5 minutes ago
可以看到tomcat服务在manager和worker节点各有一个,redis服务在manager节点。
接下来分别在manager节点和worker节点上进入到tomcat容器中ping一下redis服务,来验证一下跨docker主机的网络通信。
manager节点
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES739058b19824 tomcat:8.5 "catalina.sh run" About a minute ago Up 58 seconds 8080/tcp tc_tomcat.1.1l0pkds2izjhju9phcil1mv02a59d511157f4 redis:5.0 "docker-entrypoint.sh..." About a minute ago Up About a minute 6379/tcp tc_redis.1.6icmjpn4wugtx22xqie0bofq2
$ docker exec -it 739058b19824 bashroot@739058b19824:/usr/local/tomcat# ping -c 2 redis
PING redis (10.11.40.60) 56(84) bytes of data.64 bytes from 10.11.40.60 (10.11.40.60): icmp_seq=1 ttl=64 time=0.052 ms64 bytes from 10.11.40.60 (10.11.40.60): icmp_seq=2 ttl=64 time=0.040 ms
--- redis ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 134msrtt min/avg/max/mdev = 0.040/0.046/0.052/0.006 ms
在manager节点上是可以ping通redis服务的。
worker节点
$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESdd3e3301de7d tomcat:8.5 "catalina.sh run" About a minute ago Up About a minute 8080/tcp tc_tomcat.2.z2j2nahaxe3j403j21at7j9a6
$ docker exec -it dd3e3301de7d bashroot@dd3e3301de7d:/usr/local/tomcat# ping -c 2 redis
PING redis (10.11.40.60) 56(84) bytes of data.64 bytes from 10.11.40.60 (10.11.40.60): icmp_seq=1 ttl=64 time=0.053 ms64 bytes from 10.11.40.60 (10.11.40.60): icmp_seq=2 ttl=64 time=0.067 ms
--- redis ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 2msrtt min/avg/max/mdev = 0.053/0.060/0.067/0.007 ms
可以看到在worker节点上同样可以ping通redis服务。
以上也能说明通过自定义overlay网络实现了跨宿主机的网络通信,这也是常用swarm集群部署服务的原因所在。
使用overlay实现单个容器服务与swarm集群服务的通信
在compose file的3.2版本后增加了对网络设置的attachable属性,将其设置为true,可以实现单个容器连接swarm集群服务的overlay网络,从而实现单个容器与swarm集群的服务间的网络通信。
注: 单个容器与swarm集群服务进行网络通信的前提是,单个容器所在的宿主机需要加入到swarm集群作为一节点。
下面以tomcat的swarm集群为例,在外部启动redis服务,将redis连接到tomcat所在的overlay网络,而后验证他们之间的网络通信。
manager节点
tomcat服务的compose file如下:
version: '3.2'services: tomcat: image: tomcat:8.5 networks: - tc-net ports: - 8080:8080 deploy: replicas: 2 restart_policy: condition: anynetworks: tc-net: driver: overlay attachable: true ipam: config: - subnet: 10.15.0.0/26
部署服务:
$ docker stack deploy -c docker-compose.yml tc
查看网络:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE927ca7d69973 bridge bridge local87e7be65d0ce docker_gwbridge bridge locald2ad0895e4f3 host host local3rrki5qjsbr4 ingress overlay swarmpknwl0oj3iu2 my-overlay overlay swarm8e5de9308b80 none null local650m9x2wl04j tc_tc-net overlay swarm
在网络列表中新增了一个tc_tc-net,这也是我们在compose file中定义的overlay网络。
在manager节点上运行一个redis的单容器服务,指定其连接到tomcat所在的overlay网络:
$ docker run --name my_redis -it -d -p 6379:6379 --network tc_tc-net redis:5.0
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES481fbb0e5b78 redis:5.0 "docker-entrypoint.sh..." 4 seconds ago Up 2 seconds 0.0.0.0:6379->6379/tcp my_redis254e161ae63c tomcat:8.5 "catalina.sh run" 34 seconds ago Up 33 seconds 8080/tcp tc_tomcat.2.ttonphlbithf2g2ocgsqltnna
接下来验证网络通信,进入tomcat服务,ping一下redis的服务,如下:
$ docker exec -it 254e161ae63c bashroot@254e161ae63c:/usr/local/tomcat# ping -c 2 my_redis
PING my_redis (10.15.0.7) 56(84) bytes of data.64 bytes from my_redis.tc_tc-net (10.15.0.7): icmp_seq=1 ttl=64 time=0.066 ms64 bytes from my_redis.tc_tc-net (10.15.0.7): icmp_seq=2 ttl=64 time=0.066 ms
--- my_redis ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 2msrtt min/avg/max/mdev = 0.066/0.066/0.066/0.000 ms
worker节点
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES58083e1ac1c7 tomcat:8.5 "catalina.sh run" 2 minutes ago Up 2 minutes 8080/tcp tc_tomcat.1.ecdd4yhm2wrnqjeobi2j6c7f5
$ docker exec -it 58083e1ac1c7 bashroot@58083e1ac1c7:/usr/local/tomcat# ping -c 2 my_redis
PING my_redis (10.15.0.7) 56(84) bytes of data.64 bytes from my_redis.tc_tc-net (10.15.0.7): icmp_seq=1 ttl=64 time=0.569 ms64 bytes from my_redis.tc_tc-net (10.15.0.7): icmp_seq=2 ttl=64 time=0.424 ms
--- my_redis ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 3msrtt min/avg/max/mdev = 0.424/0.496/0.569/0.075 ms
以上,实现和验证了单个容器与swarm服务集群间的网络通信。
如果有收获欢迎分享给你的朋友一起学习和讨论,也欢迎扫码关注公众号进击的极客。
相关链接:
Docker系列之Docker Swarm容器管理与调度
Docker网络篇之bridge网络
主机overlay和网络overlay_Docker网络篇之overlay模式相关推荐
- 网络号和主机号具体计算原理-ipv4篇
来自之前163网易博客,因博客倒闭,放CSDN供 大家学习. 1.标准分类的ip地址的网络号是, A类是前8位 B类是前16位 C类是前24位 举一个例子 如172.16.10.2,因为172.16. ...
- docker 获取宿主机ip_Docker基础修炼6——网络初探及单机容器间通信
如果觉得文章有帮助,欢迎点击头像关注我获取更多原创文章,同时也欢迎转发. 同时也可以在我的历史文章中找到Linux操作系统相关的服务器运维管理入门系列文章,欢迎交流. 前文演示docker容器内部数据 ...
- 数据中心网络里的Underlay和Overlay
数据中心网络里的Underlay和Overlay Underlay网络 以太网从最开始设计出来就是一个分布式网络,没有中心的控制节点,网路中的各个设备之间通过协议传递的方式学习网络的可达 ...
- as 不显示gradle视图_Python构建RESTful网络服务[Django篇:基于类视图的API]
系列文章介绍 本系列文章将详细介绍将Django官方引导教程中的投票项目改写为RESTful网络服务.Django官方教程地址https://docs.djangoproject.com/zh-han ...
- iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求
原文地址:https://github.com/ChenYilong/ParseSourceCodeStudy/blob/master/02_Parse的网络缓存与离线存储/iOS网络缓存扫盲篇.md ...
- Silverlight+WCF 实战-网络象棋最终篇之对战视频-下篇[客户端发送与服务端中转](六)...
本篇继上一篇:Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五) 一:对战视频 简单原理 略,内容见上篇. 二:对战视频 步骤解析: 略 ...
- Silverlight+WCF 实战-网络象棋最终篇之对战视频-上篇[客户端开启视频/注册编号/接收视频](五)...
前言: 近期在忙点"秋色园"的事情,所以网络象棋这一块文章就写的相对慢,而且刚好接上篇:Silverlight+WCF 实战-网络象棋最终篇之非线程阻塞倒计时窗口(四) 之后, ...
- TCP/IP学习——利用主机IP与子网掩码计算网络号
阿里巴巴的一道题目,是关于利用主机IP与子网掩码计算网络号. 在此之前,我们需要先了解下五类IP地址. 在同一个物理网络上的主机的地址都有一个相同前缀,即IP地址分成两个部分:netid,hostid ...
- 菜鸟学习笔记:Java提升篇9(网络1——网络基础、Java网络编程)
菜鸟学习笔记:Java提升篇9(网络1--网络基础.Java网络编程) 网络基础 什么是计算机网络 OS七层模型 Java网络编程 InetAddress InetSocketAddress URL类 ...
最新文章
- 智能文档理解:通用文档预训练模型
- expect安装使用
- 单图像三维重建、2D到3D风格迁移和3D DeepDream
- 继续- 管理百人研发团队的烦恼(下)
- 6、检查约束(CHECK)
- 直播系统:泛娱乐直播新趋势
- mxnet基础到提高(46)-ndarray.zeros,CSRNDArray稀疏矩阵
- sql server cdc 清理_基于CDC技术的ElasticSearch索引同步机制
- 线程 -- ThreadLocal
- 编译原理第二版5.1答案
- WIN11 TortoiseSVN 无论什么操作,都报同一个错误:请求的操作需要提升
- Linux安装R相关包出现icudt error
- 智能体重秤方案/案列/APP/小程序
- 斐波那契序列的实现方法及对比
- 视频教程-微信小程序开发实战之番茄时钟开发-微信开发
- Python采集常用:谷歌浏览器驱动——Chromedriver 插件安装教程
- android 代码设置密码,android-如何在MIFARE Ultralight EV1标签上设置和取消设置密码?...
- CBS paper防伪安全纸
- 达人评测 RTX3060和RX 6600M选哪个好
- 使用Auto.js实现蚂蚁森林自动收取能量
热门文章
- Django 3.2.5博客开发教程:实现模板之前的分析与准备
- GIS基本知识学习PDF文档
- Linux使用ffmpeg合并视频
- Scala模式匹配:变量声明中的模式匹配
- Docker安装启动influxDB数据库及建库查询基本操作
- Spring @ConfigurationProperties注解使用示例
- eureka之EurekaClientConfig的作用
- Freemarker基于模板字符串生成静态化html文件
- spring boot模板引擎thymleaf用法详解
- Vim取消查找后的高亮提示,:nohl或者:noh什么的都不管用,来一个简单粗暴方法