Docker 网络(十一)——Docker Multi-host Network
11 Docker Multi-host Network
Docker 多主机网络使用基于VXLAN解决方案在libnetwork和libkv库的基础上,所以这个重叠网络需要一个有效的键-值存储服务在不同docker间交换信息。Docker执行内建的在libnetwork库中基于VXLAN重叠网络驱动来支持不同主机间大范围的虚拟网络。
环境准备
在用Docker重叠网络前,检查docker版本使用docker -v
来确认docker版本不小于1.9。在这里我们准备的环境有两个Linux节点Node1:192.168.56.10
Node2:192.168.56.20,确保它们可以互相访问,修改两个节点的主机名分别为nod1 nod2 。
下载etcd
$ curl -L https://github.com/coreos/etcd/releases/download/v2.3.6/etcd-v2.3.6-linux-amd64.tar.gz -o etcd-v2.3.6-linux-amd64.tar.gz
$ tar zxvf etcd-v2.3.6-linux-amd64.tar.gz
$ cd etcd-v2.3.6-linux-amd64/
NODE1
./etcd -name node1 -initial-advertise-peer-urls http://192.168.56.10:2380 \-listen-peer-urls http://0.0.0.0:2380 \-listen-client-urls http://0.0.0.0:2379,http://127.0.0.1:4001 \-advertise-client-urls http://0.0.0.0:2379 \-initial-cluster-token etcd-cluster \-initial-cluster node1=http://192.168.56.10:2380,node2=http://192.168.56.20:2380 \-initial-cluster-state new
NODE2
./etcd -name node2 -initial-advertise-peer-urls http://192.168.56.20:2380 \-listen-peer-urls http://0.0.0.0:2380 \-listen-client-urls http://0.0.0.0:2379,http://127.0.0.1:4001 \-advertise-client-urls http://0.0.0.0:2379 \-initial-cluster-token etcd-cluster \-initial-cluster node1=http://192.168.56.10:2380,node2=http://192.168.56.20:2380 \-initial-cluster-state new
带集群参数启动Docker
Docker进程被启动带有集群参数 --cluster-store
和 --cluster-advertise
,因此所有运行在不同节点上的Docker能互相通信与合作。这里我们需要设置
--cluster-store
带有服务主机和端口,--ccluster-advertise
带有IP和本地点Docker进程端口号,停止当前docker进程并带有新的参数启动。
Node1
$ sudo service docker stop
$ sudo /usr/bin/docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.56.10:2379 --cluster-advertise=192.168.56.10:2375
Node2
$ sudo service docker stop
$ sudo /usr/bin/docker daemon -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.56.20:2379 --cluster-advertise=192.168.56.20:2375
创建重叠网络
在每一个节点上执行 docker network ls
查看Docker的网络配置。
$ docker network ls
NETWORK ID NAME DRIVER
342b9356834a bridge bridge
abacbe015164 host host
286a63691e10 none null
接下来我们使用 docker network
命令来创建一个新的重叠网络
$ sudo docker network create -d overlay myapp
等 一分钟 后我们执行docker network ls
命令
docker network ls
NETWORK ID NAME DRIVER
342b9356834a bridge bridge
d32569139ea9 docker_gwbridge bridge
abacbe015164 host host
7898d5978de9 myapp overlay
286a63691e10 none null
在节点node1和node2上,两个网络 myapp 和 docker_gwbridge 被添加,类型分别是 overlay 和 bridge。因此 myapp 在容器中代表重叠网络关联到eth0,
docker_gwbridge代表桥接网络连接互联网在容器里关联到eth1。
创建带有重叠网络的容器
Node1:
ubuntu@node1:~$ docker run -itd –name=worker1 –net=myapp ubuntu:14.04
Node2:
ubuntu@node2:~$ docker run -itd –name=worker2 –net=myapp ubuntu:14.04
测试两个容器的网络连接
Node1:
ubuntu@node1:~$ docker exec worker1 ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:0a:00:00:04 inet addr:10.0.0.4 Bcast:0.0.0.0 Mask:255.255.255.0inet6 addr: fe80::42:aff:fe00:4/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1450 Metric:1RX packets:14 errors:0 dropped:0 overruns:0 frame:0TX packets:8 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:1116 (1.1 KB) TX bytes:648 (648.0 B)eth1 Link encap:Ethernet HWaddr 02:42:ac:12:00:02 inet addr:172.18.0.2 Bcast:0.0.0.0 Mask:255.255.0.0inet6 addr: fe80::42:acff:fe12:2/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:8 errors:0 dropped:0 overruns:0 frame:0TX packets:8 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:648 (648.0 B) TX bytes:648 (648.0 B)lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:65536 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
我们可以看到在容器里的两块网卡,IP是10.0.0.4 和 172.18.0.2 。eth0 连接到重叠网络,eth1 连接到 docker_gwbridge。因此在不同主机上的容器可以互相访问 ,在 node2 上运行相同的命令,eth0的ip 是10.0.0.5。
测试在worker1 和 worker2的连接。
ubuntu@node1:~$ docker exec worker1 ping -c4 10.0.0.5
]PING 10.0.0.5 (10.0.0.5) 56(84) bytes of data.
64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=0.914 ms
64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=0.895 ms
64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=0.835 ms
64 bytes from 10.0.0.5: icmp_seq=4 ttl=64 time=0.808 ms--- 10.0.0.5 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 0.808/0.863/0.914/0.043 ms
性能测试
在Node1和Node2上测试本地网络性能
$ sudo iperf -c 192.168.56.10
------------------------------------------------------------
Client connecting to 192.168.56.10, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[ 3] local 192.168.56.10 port 45209 connected with 192.168.56.10 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 18.7 GBytes 16.1 Gbits/sec
在容器work1 和work2上测试
root@f8689ceade86:/# iperf -c 10.0.0.5
------------------------------------------------------------
Client connecting to 10.0.0.5, TCP port 5001
TCP window size: 2.50 MByte (default)
------------------------------------------------------------
[ 4] local 10.0.0.5 port 5001 connected with 10.0.0.5 port 55698
[ 3] local 10.0.0.5 port 55698 connected with 10.0.0.5 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 18.3 GBytes 15.7 Gbits/sec
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.0 sec 18.3 GBytes 15.7 Gbits/sec
重叠网络性能比本地网络差一些,比Calico也差一些,Calico跟本地网络性能几乎一样,因为Calico使用一个纯3层协议,Docker多主机重叠网络使用VXLAN解决方案(MAC on UDP),Calico能获得比较好的性能也是有道理的。
VXLAN技术
Virtual Extensible LAN(VXLAN)是一种网络虚拟机技术,试图改进在大的云计算部署中关于可扩展性的问题。它使用类似VLAN的封装技术,封装
基于MAC的OSI二层以太网帧到四层的UDP包中。Open vSwitch实现了VXLAN,Docker是在libnetwork中完成内置的VXLAN驱动。
Docker 网络(十一)——Docker Multi-host Network相关推荐
- Docker 学习笔记 - 进阶四 Docker网络和 Docker compose
Docker 学习笔记 - 进阶四 Docker网络和 Docker compose 4. docker 网络 4.1 docker network是什么 4.1.1 docker不启动,默认网络情况 ...
- docker网络连接——docker network connect命令
博客作为学习笔记记录,若有理解或表述错误,欢迎指出 docker network connect 命令是用于将docker容器连接到某个网络中,或者与其他容器建联,容器可以使用容器名或者容器ID. 用 ...
- Docker(二十一)--Docker k8s--Kubernetes存储--Volumes配置管理--持久卷--动态静态分配
目录 1. 简介 2. NFS PV示例(静态分配) 2.1.保证环境的干净 2.2 创建所需资源 2.3 书写pv,pvc,pod文件并进行测试 2.3.1 创建pv 2.3.2 创建pvc和pod ...
- 理解Docker(5):Docker 网络
本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
- Docker 网络之进阶篇
笔者在<Docker 基础 : 网络配置>一文中简单介绍了容器网络的基本用法,当时网络的基本使用方式还处于 --link 阶段.时过境迁,随着 docker 的快速发展,其网络架构也在不断 ...
- docker 容器之间通信_四、Docker 网络原理、分类及容器互联配置
本文是<Docker必知必会系列>第四篇,原文发布于个人博客:悟尘纪. 上一篇:Docker必知必会系列(三):基于 Docker-registry/Nexus3 搭建本地仓库 Docke ...
- Docker学习四:Docker 网络
前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...
- Docker系列文-----Docker的网络类型(4)
Docker系列文-----Docker的网络类型(4) Docker里的常见文件及作用 Docker 内部的网络类型 1.桥接模式(默认): 2.host模式: 3.container模式 4.no ...
- Docker复习07——Docker 网络
文章目录 Docker 网络 常用命令 bridge host none container 自定义网络 Docker 网络 为了通信 为了容器互联 启动docker 查看网络 发现多出来一个dock ...
- Docker学习(五):Docker网络
Docker网络 1. docker network命令 #查看docker网络 docker network ls #帮助命令 docker network --help #创建网络 docker ...
最新文章
- 数学建模——TOPSIS综合评价模型Python代码
- 【SSM】基于注解@Controller的控制器
- UML学习——类图(三)
- Quasar和Akka –比较
- python 打造一个sql注入脚本 (一)
- android cmake 打印_Android使用CMAKE编译libjpeg
- linux添加nginx,linux下安装Nginx1.16.0的教程详解
- 开源GIS(三)——openlayers地图基本框架与天地图加载
- BAT脚本每隔30秒创建一个512兆文件(测试磁盘监控用)
- 【Tableau Desktop 企业日常技巧12】Tableau CA或者CDA 考试真题(附带国外面试题目)
- SRCNN:基于深度学习的超分辨率开山之作回顾
- pageoffice
- ubuntu开机桌面不显示
- 安焦删除贴 牛人纷纷出现(2)
- 2017NHOI小甲 第五题 折纸
- 树莓派Remote GPIO启用方法
- 通过电阻色环识别(固定)电阻阻值的方法
- Fumark支持SLI双卡测试设置
- js复制图片文字图文分享到微信/QQ,插件clipboard.js的应用案例
- ⑰霍兰德EI*如何选选专业?高考志愿填报选专业
热门文章
- 韩国商业网站界面设计分析------推荐2005-5-24 出处:vipcn.com
- 快应用开发中常见的几个版本号~~
- 超级微商系统开发,社交电商3.0时代的概念
- 建立枚举类型Weekday,假设今日为星期二,计算10天后为星期几。
- 共享企业文化造就企业明天
- 解决dell 15R 双显卡笔记本桌面右键点击反应慢的问题
- 小米 微信:无法连接服务器,微信出现大规模故障 多地无法登录
- 2022最新微信小程序常见面试题总结
- 微信支付-当前页面的URL未注册
- .net 本地文件管理 代码_如何在百万行代码中发现隐藏的后门