Docker多主机网络
网络术语概念
二层交换技术:工作在OSI七层网络模型的第二层,通过MAC地址进行帧转发
三层交换技术:也称为IP交换技术,工作在OSI七层网络模型的第三层,通过IP地址进行包转发。它解决了局域网中网段规划之后,网段中子网必须依赖路由器进行管理的局面
网桥(Brideg):工作在OSI七层网络模型的第二层,根据MAC地址转发,类似于二层交换机。Linux网桥将不同的网络接口连接起来,连接的网络接口可以来自不同的局域网,网桥决定了接收的数据包是转发给同一个局域网内逐级还是别的网络上
VLAN(虚拟局域网):在物理网络(通常是路由器接口)基础上建立一个或多少逻辑子网,将一个大广播域切分成多个小的广播域。一个VLAN就是一个广播域,VLAN之间通信通过三层路由器或者交换机来完成。
Overlay Network
覆盖网络,在基础网络上叠加一种虚拟网络技术模式,该网络中的主机通过虚拟链路连接起来
Overlay网络有以下三种实现方式:
VXLAN(Virtual Extensible Local Area Network,虚拟可扩展局域网),通过将物理服务器或虚拟机发出的数据包封装到UDP中,并使用物理网络的IP/MAC作为外层报文头进行封装,然后在IP网络上传输,到达目的地后由隧道端点解封装并将数据发送给目标物理服务器或虚拟机,扩展了大规模虚拟机网络通信。
由于VLAN Header头部限制长度是12bit,导致只能分配4095个VLAN,也就是4095个网段,在大规模虚拟网络。VXLAN标准定义Header限制长度24bit,可以支持1600万个VLAN,满足大规模虚拟机网络需求。
VXLAN有以下核心技术组成:
NVE(Network Vritual Endpoint,网络虚拟端点):实现网络虚拟化功能。报文经过NVE封装转换后,NVE间就可基于三层基础网络建立二层虚拟化网络。
VTEP(VXLAN Tunnel Endpoints,VXLAN隧道端点):封装在NVE中,用于VXLAN报文的封装和解封装。
VNI(VXLAN Network Identifier,VXLAN网络标识ID):类似于VLAN ID,用于区分VXLAN段,不同的VXLAN段不能直接二层

其他两种实现方式
NVGRE(Network Virtual using Generic Routing Encapsulation,使用GRE虚拟网络):与VXLAN不同的是,NVGRE没有采用标准传输协议(TCP/UDP),而是借助通用路由封装协议(GRE)。采用24bit标识二层网络分段,与VXLAN一样可以支持1600万个虚拟网络。
STT(Stateless Transport Tunneling,无状态传输隧道):模拟TCP数据格式进行封装,改造了TCP传输机制,不维护TCP状态信息。
Overlay Network
讲
Docker主机之间容器通信解决方案
桥接宿主机网络
端口映射
Docker网络驱动
- Overlay:基于VXLAN封装实现原生Overlay网络
- Macvlan: Docker主机网卡接口逻辑上分为多个子接口,每个子接口标识一个VLAN。容器接口直接连接Docker主机网卡接口,通过路由策略转发到另一台Docker主机
第三方网络项目
隧道方案
- Flannel:支持UPD和VXLAN封装传输方式
- Weave: 支持UDP(sleeve模式)和VXLAN(优先fastdp模式)
- OpenSwitch: 支持VXLAN和GRE协议
路由方案
- CAlico: 支持BGP协议和IPIP隧道。每台宿主机作为虚拟路由,通过BGP谢谢实现不同主机容器间通信
部署前提
Docker通过overlay网络驱动程序支持多主机容器网络通信。
要想使用Docker原生Overlay网络,需要满足以下任意条件:
Docker运行在Swarm模式
使用键值存储的Docker主机集群
我们这里演示第二种,需要满足以下条件:
1.集群中主机连接到键值存储,Docker支持Consul、Etcd和Zookeeper;
2.集群中主机运行一个Docker守护进程;
3.集群中主机必须具有唯一的主机名,因为键值存储使用主机名来标识集群成员;
4.集群中Linux主机内核版本3.12+,支持VXLAN数据包处理,否则可能无法通信。
部署
节点1 192.168.56.128 主机名 docker1 节点2 192.168.56.129主机名docker2
查看内核版本大于3.12即可
uname -r
安装只需要在一个节点安装即可(是一个命令直接可以使用)
wget https://releases.hashicorp.com/consul/0.9.2/consul_0.9.2_linux_amd64.zip
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/bin/consul && chmod +x /usr/bin/consul
启动
nohup consul agent -server -bootstrap -ui -data-dir /var/lib/consul -client=192.168.56.128 -bind=192.168.56.128 &>/var/log/consul.log &
日志跟踪
tail -f /var/log/consul.log

节点配置守护进程连接consul
vi /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --cluster-store consul://192.168.56.128:8500 --cluster-advertise 192.168.56.128:2375
访问consul的web页面 http://192.168.56.128:8500
重启docker 修改了配置文件需要加载一下在重启
systemctl daemon-reload
service docker restart
修改节点2的配置
/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --cluster-store consul://192.168.56.128:8500 --cluster-advertise 192.168.56.129:2375
重启docker
PS:如果节点加入到swarm模式需要删除
docker swarm leave
查看

节点2上创建overlay网络
docker network create -d overlay multi_host
在节点1再次创建会报错,网络已经同步了
Error response from daemon: network with name multi_host already exists
查看网络
docker network ls

查看网络属性信息
network inspect dc4cc9130f97
[
{
"Name": "multi_host",
"Id": "dc4cc9130f971707d833450e87d93433029b97fcc0541bfbf7ae15a4db8293a5",
"Created": "2018-12-21T18:22:05.983865969+08:00",
"Scope": "global",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "10.0.0.0/24",
"Gateway": "10.0.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]

测试互通
节点1创建容器指定overlay网络
docker run -it --net=multi_host busybox
节点2创建


正常可以ping通 本次测试没有通
Overlay工作流程
安装查看桥接的工具
apt-get install bridge-utils
使用命令查看
brctl show
命名空间管理overlay网络
ln -s /var/run/docker/netns/ /var/run/netns
启动的容器busybox不退出另外打开一个终端输入命令ip netns ls

带-的是创建overlay网络时候创建的网络

显示的IP和容器内是完全一样的
Docker多主机网络的更多相关文章
- docker多主机网络方案
本文探讨Docker多主机网络的性能. 在过去的博文里,我测试过 Docker的网络 . MySQL服务器团队 提供了他们自己的结果,和我的观察是一致的. 本文里一系列的测试,想更多关注使用多主机的D ...
- Docker跨主机网络——overlay
前言 在Docker网络--单host网络一文中,我为大家总结了Docker的单机网络相关知识和操作,单机网络比较容易.本文我为大家总结Docker跨主机通信相关知识.同样本文大部分内容以CloudM ...
- Docker多主机网络 OpenvSwitch
一.Open vSwitch Open vSwitch(以下简称为OVS),英文全称:OpenVirtual Switch,顾名思义,Open vSwitch就是开放虚拟交换.我们可以把他理解成 ...
- Docker 单主机网络
PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 当容器逐步向容器集群,容器云技术演进的时候,一个不得不面对的问题就是各 ...
- Docker 多主机网络总结(非常全)
PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...
- Docker 跨主机网络方案分析
PS:文章首发公众号,欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 上篇文章介绍了容器网络的单主机网络,本文将进一步介绍多 ...
- Docker 跨主机网络
Docker提供两种原生的跨主机网络: Overlay 和 Macvlan libnetwork & CNM libnetwork 是 docker 容器网络库,最核心的内容是其定义的 C ...
- docker单主机网络
当你安装Docker时,它会自动创建三个网络.你可以使用以下docker network ls命令列出这些网络: [root@localhost ~]# docker network ls NETWO ...
- Docker 跨主机网络 overlay(十六)
目录 一.跨主机网络概述 二.准备 overlay 环境 1.环境描述 2.创建 consul 3.修改 docker 配置文件 4.准备就绪 三.创建 overlay 网络 1.在 host1 中创 ...
随机推荐
- Centos7安装Tomcat并部署DubboAdmin的War包并配置自动启动
一.安装过程 1.打开官网,在左侧选择要下载的版本,比如下下载Tomcat8:https://tomcat.apache.org/download-80.cgi 2.找到tar.gz的下载地址:htt ...
- 利用fstream进行文件拷贝测试
今天翻到一个早期写测试代码的目录,找到几个以前的测试代码,于是拿出来贴到博客中.(只是简单的测试,并不严谨.注意这里windows和linux的硬件环境不一样) 这一个是使用fstream进行文件拷贝 ...
- nodeJs--模块module.exports与实例化方法
在nodejs中,提供了exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象.而在e ...
- [ci]jenkins server启动,通过jnlp的方式启动slave(容器模式)
jenkins server启动,通过jnlp的方式启动slave. java -jar jenkins.jar 配置jnlp端口--全局安全 配置云 配置项目 执行成功
- [svc]rsync简单部署
安装rsync服务端-backup服务器 yum install rsync -y useradd rsync -s /sbin/nologin -M chown -R rsync.rsync /da ...
- Android adb input 命令介绍
input命令是用来向设备发送模拟操作的命令: 因为版本不同,input命令也有所不同 以下为Android 4.0的input命令: usage:input text <string> ...
- [Big Data - Kafka] Kafka设计解析(四):Kafka Consumer解析
High Level Consumer 很多时候,客户程序只是希望从Kafka读取数据,不太关心消息offset的处理.同时也希望提供一些语义,例如同一条消息只被某一个Consumer消费(单播)或被 ...
- Ubuntu命令行
1.打开图形界面的终端 打开:Ctrl+Alt+T 退出:Ctrl+D 2.打开DOS界面的终端 打开:Ctrl+Alt+F1(F1~F6) 退出:Ctrl+Alt+F7 3.用户 ubuntu初始r ...
- Linux部署Web应用程序超链接下载中文名称文件404问题解决办法
Web应用程序目录下有帮助文档,是中文名称的Word文件 超链接内容如下: <a href="jsp/plugin/用户手册.doc">用户手册</a> 开 ...
- c#扩展函数
分页 public static class IEnumerableExt { public static (IEnumerable<T> dataAfterPaging, Pageinf ...