overlay网络模型

无论是openstack还是docker都是先创建一个网络然后再创建虚机或者容器  并把创建的虚机或者容器运行在此网络中

Docker 提供了 overlay driver,使用户可以创建基于 VxLAN 的 overlay 网络.VxLAN 可将二层数据封装到 UDP 进行传输,VxLAN 提供与 VLAN 相同的以太网二层服务,但是拥有更强的扩展性和灵活性.

Docerk overlay 网络需要一个 key-value 数据库用于保存网络状态信息  包括 Network、Endpoint、IP 等.Consul、Etcd 和 ZooKeeper 都是 Docker 支持的 key-vlaue 软件

docker network inspect 中的   "IPAM"   是指 IP Address Managemen

docker 会创建一个 bridge 网络 “docker_gwbridge”,为所有连接到 overlay 网络的容器提供访问外网的能力

overlay 网络的具体实现:

1.docker 会为每个 overlay 网络创建一个独立的 network namespace,其中会有一个 linux bridge br0,endpoint 还是由 veth pair 实现,一端连接到容器中(即 eth0),另一端连接到 namespace 的 br0 上

2.br0 除了连接所有的 endpoint,还会连接一个 vxlan 设备,用于与其他 host 建立 vxlan tunnel。容器之间的数据就是通过这个 tunnel 通信的

不同 overlay 网络之间是隔离的     即便是通过 docker_gwbridge 也不能通信

如果需要通信  需要把其它overlay网络的容器添加一个网卡连接到overlay网络中     docker network connect overlay1  容器2  表示给容器2添加一个到overlay1的连接

overlay IPAM   docker 默认为 overlay 网络分配 24 位掩码的子网(10.0.X.0/24)所有主机共享这个 subnet,容器启动时会顺序从此空间分配 IP

MACVLAN网络模型

macvlan 本身是 linxu kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 interface 可以配置自己的 IP。macvlan 本质上是一种网卡虚拟化技术.

macvlan 的最大优点是性能极好,相比其他实现.macvlan 不需要创建 Linux bridge,而是直接通过以太 interface 连接到物理网络

容器的 eth0 就是 enp0s9 通过 macvlan 虚拟出来的 interface.容器的 interface 直接与主机的网卡连接,这种方案使得容器无需通过 NAT 和端口映射就能与外网直接通信(只要有网关),在网络上与其他独立主机没有区别

用 sub-interface 实现多 macvlan 网络

     macvlan 会独占主机的网卡,也就是说一个网卡只能创建一个 macvlan 网络.但主机的网卡数量是有限的,如何支持更多的 macvlan 网络

macvlan 不仅可以连接到 interface(如 enp0s9)     也可以连接到 sub-interface(如 enp0s9.xxx)

VLAN 是现代网络常用的网络虚拟化技术,它可以将物理的二层网络划分成多达 4094 个逻辑网络,这些逻辑网络在二层上是隔离的,每个逻辑网络(即 VLAN)由 VLAN ID 区分,VLAN ID 的取值为 1-4094

Linux 的网卡也能支持 VLAN,同一个 interface 可以收发多个 VLAN 的数据包,不过前提是要创建 VLAN 的 sub-interface

如希望 enp0s9 同时支持 VLAN10 和 VLAN20,则需创建 sub-interface enp0s9.10 和 enp0s9.20

在交换机上,如果某个 port 只能收发单个 VLAN 的数据,该 port 为 Access 模式.  如果支持多 VLAN,则为 Trunk 模式.enp0s9 要接在交换机的 trunk 口上

不同 macvlan 网络不能在二层上通信    在三层上可以通过网关将 macvlan 连通

设置三层网关连通方式:

1.将 一台Host 配置成一个虚拟路由器并且设置网关IP

2.在路由器上设置iptables规则转发 VLAN10 和 VLAN20 的流量

1.因为 bbox1 与 bbox4 在不同的 IP 网段,跟据 bbox1 的路由表   数据包将发送到网关 172.16.10.1 eth2.10

2.路由器从 eth2.10 收到数据包,发现目的地址是 172.16.20.11,查看自己的路由表:于是将数据包从 eth2.20 转发出去

3.通过 ARP 记录的信息,路由器能够得知 172.16.20.11 在 host2 上,于是将数据包发送给 host2

4.host2 根据目的地址和 VLAN 信息将数据包发送给 bbox4

macvlan 网络的连通和隔离完全依赖 VLAN、IP subnet 和路由,docker 本身不做任何限制,用户可以像管理传统 VLAN 网络那样管理 macvlan

跨主机网络overlay和macvlan模型的更多相关文章

  1. Docker跨主机网络——overlay

    前言 在Docker网络--单host网络一文中,我为大家总结了Docker的单机网络相关知识和操作,单机网络比较容易.本文我为大家总结Docker跨主机通信相关知识.同样本文大部分内容以CloudM ...

  2. Docker 跨主机网络 overlay(十六)

    目录 一.跨主机网络概述 二.准备 overlay 环境 1.环境描述 2.创建 consul 3.修改 docker 配置文件 4.准备就绪 三.创建 overlay 网络 1.在 host1 中创 ...

  3. centos7下安装docker(15.2跨主机网络-overlay)

    为支持容器跨主机通信,Docker提供了overlay driver,使用户可以创建基于VxLAN的overlay网络.VxLAN可将二层数据封装到UDP进行传输,VxLAN提供与VLAN相同的以太网 ...

  4. 跨主机网络-overlay(18)

    docker overlay跨主机网络 .环境 docker版本 Docker version -ce, build fc4de44 3台主机 192.168.55.51 host1 192.168. ...

  5. docker容器跨主机网络overlay

    前提:已部署好docker服务服务预计部署情况如下10.0.0.134 Consul服务10.0.0.135 host1  主机名mcw510.0.0.134 host2  主机名mcw6host1与 ...

  6. Docker系列04—跨主机网络方案(overlay/weave)

    在前面详细讲解了几种网络模式:none,host,bridge,container.他们解决了单个主机间的容器的通信问题,并不能实现多个主机容器之间的通信. 跨主机网络方案包括两大类: 1,docke ...

  7. 跨主机网络概述 - 每天5分钟玩转 Docker 容器技术(48)

    前面已经学习了 Docker 的几种网络方案:none.host.bridge 和 joined 容器,它们解决了单个 Docker Host 内容器通信的问题.本章的重点则是讨论跨主机容器间通信的方 ...

  8. Docker 跨主机网络

    Docker提供两种原生的跨主机网络: Overlay  和  Macvlan libnetwork & CNM libnetwork 是 docker 容器网络库,最核心的内容是其定义的 C ...

  9. [Kubernetes]谈谈容器跨主机网络

    继上篇文章:[Kubernetes]浅谈容器网络,自己给自己挖的坑,这篇文章来谈谈容器跨主机网络. 要理解容器"跨主通信"的原理,就要来谈谈 Flannel 这个项目. Flann ...

随机推荐

  1. js 校验 btc eth 地址

    NPM 安装 npm install wallet-address-validator Browser <script src="wallet-address-validator.mi ...

  2. Google Android SDK开发范例大全笔记 一

    方法讲解 1 获取手机分辨率方法 DisplayMetrics private void getDiaplayMetrics() { DisplayMetrics dm = new DisplayMe ...

  3. C/C++的20个位运算技巧

    一提起位运算,人们往往想到它的高效性,无论是嵌入式编程还是优化系统的核心代码,适当的运用位运算总是一种迷人的手段,或者当您求职的时候,在代码中写入适当的位运算也会让您的程序增加一丝亮点,最初当我读&l ...

  4. Hibernate Envers

    一.目的Hibernate Envers的目的是提供应用程序实体数据的历史版本,记录执行数据变更历史. 二.用途Hibernate Envers记录的审计数据,主要用于意外丢失数据找回.审查数据合法性 ...

  5. 合并K个排序链表

    合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [   1->4->5,   1->3->4,   2->6 ] 输出: 1-&g ...

  6. 在使用EF时,想要比较字符串类型的日期时

    原文地址(https://blog.csdn.net/yangxinyue315/article/details/44960895) 在使用EF时,想要比较字符串类型的日期时 在使用EF时,想要比较字 ...

  7. docker 安装mongo

    1.docker安装参考docker官网教程 2.docker中获取mongo镜像 sudo pull mongo 3.通过run命令新建/启动容器,容器名称为mongo,本地宿主机如果27017端口 ...

  8. 对《将Unreal4打包后的工程嵌入到Qt或者桌面中》一文的补充

    在上一文中本人尝试将Ue4嵌入到Qt中,但依然有一些问题没有去尝试解决.今天因为帮助知乎专栏作者@大钊的关系,顺便进行补完. 2018.7.18更新: 正好在参加杭州UnrealCircle的时候见到 ...

  9. 基于.net的微服务架构下的开发测试环境运维实践

    眼下,做互联网应用,最火的架构是微服务,最热的研发管理就是DevOps, 没有之一.微服务.DevOps已经被大量应用,它们已经像传说中的那样,可以无所不能.特来电云平台,通过近两年多的实践,发现完全 ...

  10. Dapp开发教程一 Asch Dapp Hello World

    1 基本流程 Asch有三种net,localnet,testnet,mainnet,后两种是发布到线上的,可通过公网访问. 第一种localnet是运行在本地的.只有一个节点的私链,主要是为了方便本 ...