macvlan和ipvlan的对比

http://hicu.be/macvlan-vs-ipvlan

macvlan

ipvlan

参考:

https://yq.aliyun.com/articles/192998

http://hicu.be/docker-networking-macvlan-bridge-mode-configuration

https://sreeninet.wordpress.com/2016/05/29/docker-macvlan-and-ipvlan-network-plugins/

  1. echo 1 > /proc/sys/net/ipv4/ip_forward
  2. - 创建macvlan网络
  3. docker network create -d macvlan \
  4. --subnet=192.168.14.0/24 \
  5. --gateway=192.168.14.2 \
  6. -o parent=eth0 mac_net1
  7. docker run -itd --name b1 --ip=192.168.14.11 --network mac_net1 busybox
  8. docker run -itd --name b2 --ip=192.168.14.12 --network mac_net1 busybox
  9. - b2 ping b1(外网)是通的
  10. $ docker exec b2 ping 192.168.14.11
  11. PING 192.168.14.11 (192.168.14.11): 56 data bytes
  12. 64 bytes from 192.168.14.11: seq=0 ttl=64 time=0.062 ms
  13. - b2 ping 宿主机ip,不通
  14. $ docker exec b2 ping 192.168.14.133
  15. ^C
  16. - 未创建新的网桥
  17. [root@n2 ~]# brctl show
  18. bridge name bridge id STP enabled interfaces
  19. docker0 8000.024243c0f3d5 no
  20. - mac地址和ip均不同
  21. $ docker exec b1 ip a
  22. 39: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
  23. link/ether 02:42:c0:a8:0e:0b brd ff:ff:ff:ff:ff:ff
  24. inet 192.168.14.11/24 scope global eth0
  25. valid_lft forever preferred_lft forever
  26. $ docker exec b2 ip a
  27. 40: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
  28. link/ether 02:42:c0:a8:0e:0c brd ff:ff:ff:ff:ff:ff
  29. inet 192.168.14.12/24 scope global eth0
  30. valid_lft forever preferred_lft forever
  31. $ ip link show eth0
  32. 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
  33. link/ether 00:50:56:33:13:b6 brd ff:ff:ff:ff:ff:ff

访问:

参考: http://hicu.be/docker-networking-macvlan-bridge-mode-configuration

总结

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

这里有个hairpin mode 模式,对比下bridge

参考: http://cizixs.com/2017/02/14/network-virtualization-macvlan

macvaln的几种模式,一般我们用桥接即可.

https://hicu.be/bridge-vs-macvlan

  1. $ brctl add help
  2. never heard of command [add]
  3. Usage: brctl [commands]
  4. commands:
  5. addbr <bridge> add bridge
  6. delbr <bridge> delete bridge
  7. addif <bridge> <device> add interface to bridge
  8. delif <bridge> <device> delete interface from bridge
  9. hairpin <bridge> <port> {on|off} turn hairpin on/off

bridge

vepa(Virtual Ethernet Port Aggregator) mode: 需要主接口连接的交换机支持 VEPA/802.1Qbg 特性。所有发送出去的报文都会经过交换机,交换机作为再发送到对应的目标地址(即使目标地址就是主机上的其他 macvlan 接口),也就是 hairpin mode 模式,这个模式用在交互机上需要做过滤、统计等功能的场景。

Macvlan 802.1q Trunk Bridge 模式使用示例

参考: https://yq.aliyun.com/articles/192998

  1. docker network create -d macvlan \
  2. --subnet=192.168.14.0/24 \
  3. --gateway=192.168.14.1 \
  4. -o parent=eth0.50 macvlan50
  5. docker rm -fv b1 b2
  6. docker run --net=macvlan50 -itd --name b1 busybox
  7. docker run --net=macvlan50 -itd --name b2 busybox
  8. docker network create -d macvlan \
  9. --subnet=192.168.15.0/24 \
  10. --gateway=192.168.15.1 \
  11. -o parent=eth0.60 macvlan60
  12. docker rm -fv b3 b4
  13. docker run --net=macvlan60 -itd --name b3 busybox
  14. docker run --net=macvlan60 -itd --name b4 busybox

多个子网的 Macvlan 802.1q Trunking

  1. docker network create -d ipvlan \
  2. --subnet=192.168.210.0/24 \
  3. --subnet=192.168.212.0/24 \
  4. --gateway=192.168.210.254 \
  5. --gateway=192.168.212.254 \
  6. -o ipvlan_mode=l2 ipvlan210
  7. # 测试 192.168.210.0/24 容器间连接性
  8. docker run --net=ipvlan210 --ip=192.168.210.10 -itd alpine /bin/sh
  9. docker run --net=ipvlan210 --ip=192.168.210.9 -it --rm alpine ping -c 2 192.168.210.10
  10. # 测试 192.168.212.0/24 容器间连接性
  11. docker run --net=ipvlan210 --ip=192.168.212.10 -itd alpine /bin/sh
  12. docker run --net=ipvlan210 --ip=192.168.212.9 -it --rm alpine ping -c 2 192.168.212.10

创建多个子网网段的macvlan网络

  1. docker network create -d macvlan \
  2. --subnet=192.168.216.0/24 \
  3. --gateway=192.168.216.1 \
  4. --subnet=192.168.218.0/24 \
  5. --gateway=192.168.218.1 \
  6. -o parent=eth0.218 \
  7. -o macvlan_mode=bridge macvlan216
  8. # 在第一个192.168.216.0/24网段创建一个容器
  9. docker run --net=macvlan216 --name=macnet216_test --ip=192.168.216.10 -itd busybox
  10. # 在第二个192.168.218.0/24网段创建容器
  11. docker run --net=macvlan216 --name=macnet218_test --ip=192.168.218.10 -itd busybox
  12. # 通过192.168.216.0/24的网段的容器Ping 在192.168.216.0/24网段中的第一个容器
  13. docker run --net=macvlan216 --ip=192.168.216.11 -it --rm busybox
  14. ping 192.168.216.10
  15. # 通过192.168.218.0/24的网段的容器Ping 在192.168.218.0/24网段中的第一个容器
  16. docker run --net=macvlan216 --ip=192.168.218.11 -it --rm busybox
  17. ping 192.168.218.10

[docker] macvlan最佳实战的更多相关文章

  1. 最佳实战Docker持续集成图文详解

    最佳实战Docker持续集成图文详解 这是一种真正的容器级的实现,这个带来的好处,不仅仅是效率的提升,更是一种变革:开发人员第一次真正为自己的代码负责——终于可以跳过运维和测试部门,自主维护运行环境( ...

  2. k8s pod的4种网络模式最佳实战(externalIPs )

    [k8s]k8s pod的4种网络模式最佳实战(externalIPs )       hostPort相当于docker run -p 8081:8080,不用创建svc,因此端口只在容器运行的vm ...

  3. Docker小白到实战之Docker网络简单了解一下

    前言 现在对于Docker容器的隔离性都有所了解了,但对容器IP地址的分配.容器间的访问等还是有点小疑问,如果容器的IP由于新启动导致变动,那又怎么才能保证原有业务不会被影响,这就和网络有挂钩了,接下 ...

  4. 云计算Docker全面项目实战(Maven+Jenkins、日志管理ELK、WordPress博客镜像)

    2013年,云计算领域从此多了一个名词“Docker”.以轻量著称,更好的去解决应用打包和部署.之前我们一直在构建Iaas,但通过Iaas去实现统一功  能还是相当复杂得,并且维护复杂.将特殊性封装到 ...

  5. Docker Macvlan 介绍 or 工作原理

    Docker Macvlan Network Macvlan Network:属于Docker的网络驱动. Macvlan Network:Docker主机网卡接口逻辑上分为多个子接口,每个子接口标识 ...

  6. Docker Macvlan 应用部署

    Docker Macvlan 应用部署 MacVLAN有两种桥接模式 Bridge模式:不创建子接口的情况下直接去桥接物理接口.直接桥接到与宿主级的同网段. VLAN Bridge模式:创建子接口去桥 ...

  7. [svc]NFS存储企业场景及nfs最佳实战探究

    办公网络里人一般系统用共享,尤其是财务, 他们喜欢直接点开编辑. 而不喜欢ftp nfs在网站架构中的用途 注: 如果pv量少,则放在一台机器上速度更快,如果几千万pv,则存储分布式部署. 网站架构中 ...

  8. Docker Macvlan

    参考博客:https://blog.csdn.net/daye5465/article/details/77412619 一.Macvlan 交换机的vlan是根据端口来划分的,如果一个PC接入vla ...

  9. vue2 入门 教程 单页应用最佳实战[*****]

    推荐 vue2 入门 教程 -------- 看过其他的,再看作者的,很赞 vue2 入门 教程 单页应用最佳实战 :  具体在 https://github.com/MeCKodo/vue-tuto ...

随机推荐

  1. 【Java】 剑指offer(51)数组中的逆序对

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成 ...

  2. 012 HDFS API 文件读写代码演示

    一:准备工作 1.新建class类 2.开启HDFS服务 3.将配置文件拷贝进resources路径 方便了Configuration的读取配置. 二:读出HDFS文件系统中的文件到控制台 4.读出在 ...

  3. Storm中关于Topology的设计

    一:介绍Storm设计模型 1.Topology Storm对任务的抽象,其实 就是将实时数据分析任务 分解为 不同的阶段 点: 计算组件   Spout   Bolt 边: 数据流向    数据从上 ...

  4. scanf清除缓存区

    为什么需要清除scanf缓存区呢?看一个例子: int main() { int a,b; scanf("%d",&a); scanf("%d",&am ...

  5. 获取BT节点信息bittorrent-discovery

    获取BT节点信息bittorrent-discovery   BT/磁力都是常见的P2P下载方式.用户作为一个节点node从其他用户node或者peer获取文件数据,以完成下载.bittorren-d ...

  6. windows系统,添加网络位置向导。

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha ============ 创建一个文件夹 共享. 共享位置 ,文件夹 图标 修改. 分组 ...

  7. 潭州课堂25班:Ph201805201 WEB 之 CSS 第三课 (课堂笔记)

    在 CSS 中第个标签都可以认为是个盒子,盒子就有以下几层 边框 border border-top: 5px solid black; /*上边框 实线*/ border-right: 3px do ...

  8. java显示树结构

    /** * 显示多颗树的所有节点的信息 * * @param departmentList */ private void showTreeList(Collection<Department& ...

  9. 查看 Mac/Linux 某端口占用情况

    Mac/Linux 平台下,通用命令: lsof -i:8080  (8080 为 端口号,根据需要,替换为其他端口号) 可以查看该端口被什么程序占用,并显示 pid,方便 kill 掉 Linux如 ...

  10. 在远程桌面服务中配置RD网关直接访问内网

    原文地址:http://wangchunhai.blog.51cto.com/225186/1139388/ 远程桌面网关(RD 网关)是一项角色服务,使授权远程用户可以从任何连接到 Internet ...