展开

关键词

docker网络之macvlan

macvlan接口类型简单说类似于子接口,但相比子接口来说,macvlan接口拥有自己独立的mac地址,因此使用macvlan接口可以允许更多的二层操作。 macvlan有四种模式:VEPA,bridge,Private和Passthru macvlan接口会监听并接收链路上到达本mac地址的报文,因此macvlan(除bridge外)仅能向外部网络发送报文 设备不能直接接收在同一个物理网卡的其他macvlan设备的数据包,但是其他macvlan设备可以将数据包通过物理网卡发送出去,然后通过hairpin设备返回的给其他macvlan设备,用于管理内部vm直接的流量 passthru模式:该模式仅允许一块网卡上面部署一个macvlan接口,其他使用macvlan的容器将启动失败,但只要不使用macvlan,该容器还是可以正常启动。 macvlan同bridge一样,都是linux原生支持的,可以手动实现自己的macvlan通信,具体配置操作参见:linux 网络虚拟化:macvlan 总结:通过以上示例可以看出,macvlan类型的接口可以当作正常的

1.2K30

Macvlan 网络方案实践

通过上篇文章的学习,我们已经知道 Macvlan 四种模式的工作原理,其中最常用的就是 Bridge 模式,本文我们将通过实验来验证 Macvlan Bridge 模式的连通性。 Macvlan 是 linux 内核比较新的特性,可以通过以下方法判断当前系统是否支持: $ modprobe macvlan $ lsmod | grep macvlan macvlan 各个 Linux 发行版对 Macvlan 的支持 ---- Macvlan 对 Kernel 版本依赖:Linux kernel v3.9–3.19 and 4.0+。 type macvlan mode <MODE>,其中 <PARENT> 是 Macvlan 接口的父接口名称,<NAME> 是新建的 Macvlan 接口的名称,这个名字可以任意取,<MODE> 是 Macvlan 的模式。

1.7K40
  • 广告
    关闭

    老用户专属续费福利

    云服务器CVM、轻量应用服务器1.5折续费券等您来抽!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux 虚拟网卡技术:Macvlan

    有了 Macvlan 技术,你可以这么做了。 这也就意味着,只要是从 Macvlan 子接口发来的数据包(或者是发往 Macvlan 子接口的数据包),物理网卡只接收数据包,不处理数据包,所以这就引出了一个问题:本机 Macvlan 网卡上面的 IP Macvlan vs Bridge ---- 说到 Macvlan,就不得不提 Bridge,因为你可以把 Macvlan 看成一个简单的 Bridge。但他们之间还是有很大的区别的。 Macvlan Macvlan 有以下特点: 可让使用者在同一张实体网卡上设定多个 MAC 地址。 此种模式会直接把父接口和相应的MacVLAN接口捆绑在一起,这种模式每个父接口只能和一个 Macvlan 虚拟网卡接口进行捆绑,并且 Macvlan 虚拟网卡接口继承父接口的 MAC 地址。

    7.4K51

    Docker 网络 host、bridge、macvlan 工作原理

    yangjunsss.github.io 摘要 Docker 作为容器的主流平台,不仅仅提供了虚拟化隔离,同时也配备的网络隔离技术,并使用不同的网络驱动满足不同的场景,这篇文章对 Docker 的3种网络实现Host、Bridge、Macvlan 模式 在一些特定场景中,比如一些传统应用或者监控应用需要直接使用 HOST 的物理网络,则可以使用 kernel 提供的 macvlan 的方式,macvlan 是在 HOST 网卡上创建多个子网卡, macvlan 要求物理网卡支持混杂 promisc 模式并且要求 kernel 为 v3.9-3.19 和 4.0+,因为是直接通过子接口转发数据包,所以可想而知,性能比 bridge 要高,不需要经过 macvlan 支持四种模式: private:子接口之间不允许通信,子接口能与物理网络通讯,所有数据包都经过父接口 eth0 vepa(Virtual Ethernet Port Aggregator 所以模式都不能与 eth0 通信,并且 macvlan 在公有云上的支持并不友好。

    1.5K10

    Docker 网络模型之 macvlan 详解,图解,实验完整

    上一篇文章我们详细介绍了 macvlan 这种技术,macvlan 详解,由于它高效易配置的特性,被用在了 Docker 的网络方案设计中,这篇文章就来说说这个。 下面我们做两个实验,分别验证相同 macvlan 网络和不同 macvlan 网络的连通性。 1.2 不同 macvlan 网络之间的通信 接下来,我们来看看不同 macvlan 网络之间的连通性,搭建以下的拓扑环境: ? 由于 macvlan 网络会独占物理网卡,也就是说一张物理网卡只能创建一个 macvlan 网络,如果我们想创建多个 macvlan 网络就得用多张网卡,但主机的物理网卡是有限的,怎么办呢? 在 Docker 中,macvlan 只支持 bridge 模式。 相同 macvlan 可以通信,不同 macvlan 二层无法通信,可以借助三层路由完成通信。

    6.8K40

    网卡虚拟化技术 macvlan 详解

    01 macvlan 简介 前面的文章讲过了几种 Linux 虚拟网络设备:tap/tun、veth-pair、bridge,它们本质上是 Linux 系统 提供的网络虚拟化解决方案,今天要讲的 macvlan 02 macvlan 的工作原理 macvlan 是 Linux kernel 支持的新特性,支持的版本有 v3.9-3.19 和 4.0+,比较稳定的版本推荐 4.0+。 它一般是以内核模块的形式存在,我们可以通过以下方法判断当前系统是否支持: # modprobe macvlan # lsmod | grep macvlan macvlan VLAN 用来划分广播域,而 macvlan 共享同一个广播域。 通过不同的子接口,macvlan 也能做到流量的隔离。 macvlan 的四种通信模式,常用模式是 bridge。

    1.5K31

    完善cni的ipam方案

    上两周,为了优化k8s的网络性能,最终选择了macvlan+ptp方案,最终性能也达到标准了。但其实存在一个问题,macvlan的pod的IP其实不太好分配。 原来ip分配的问题 原来的方案直接使用官方的host-local进行IP分配,虽然很稳定,但不同的node节点需要配置一个不重叠的网段,最终需要底层网络预先分配一个比较大的网段作为macvlan的地址范围 namespace: kube-system labels: tier: node app: macvlan data: etcd.pem: | -----BEGIN mountPath: /etc/kube-macvlan/ containers: - name: kube-macvlan 这样部署就很方便了,命令如下: kubectl apply -f macvlan-dpl.yaml 总结 通过这两周的实践,基本完成了开发cni网络插件的一整套流程,算是又开启了一门技能。

    2.8K30

    Docker 容器跨主机多网段通信解决方案

    一、MacVlan 实现Docker的跨主机网络通信的方案有很多,如之前博文中写到的通过部署 Consul服务实现Docker容器跨主机通信 Macvlan工作原理: Macvlan是Linux内核支持的网络接口 当容器需要直连入物理网络时,可以使用MacvlanMacvlan本身不创建网络,本质上首先使宿主机物理网卡工作在‘混杂模式’,这样物理网卡的MAC地址将会失效,所有二层网络中的流量物理网卡都能收到。 二、配置实例 实例1(实现容器基于macvlan的单网段跨主机通信) 实现效果: 两台centos 7.3,分别运行着docker服务; 两台docker服务器创建相同的一个MacVlan网络,使docker 实例2(基于macvlan的跨主机网络多网段的解决方案) 实现的效果如下: 两台centos 7.3,分别运行着docker服务; 每台宿主机创建了两个MacVlan网段供容器使用(172.10.16.0 -o parent=ens33.20 mac_net20 #创建一个macvlan网络,给其定义一个网段、网关及绑定到ens33.20 #接下来分别基于刚刚创建的macvlan网络运行一个容器 2、第二台

    1.1K21

    Docker 跨主机网络方案分析

    macvlan macvlan 就如它的名字一样,是一种网卡虚拟化技术,它能够将一个物理网卡虚拟出多个接口,每个接口都可以配置 MAC 地址,同样每个接口也可以配自己的 IP,每个接口就像交换机的端口一样 macvlan 的做法其实就是将这些虚拟出来的接口与 Docker 容器直连来达到通信的目的。 一个 macvlan 网络对应一个接口,不同的 macvlan 网络分配不同的子网,因此,相同的 macvlan 之间可以互相通信,不同的 macvlan 网络之间在二层上不能通信,需要借助三层的路由器才能完成通信 ,如下,显示的就是两个不同的 macvlan 网络之间的通信流程。 weave weave 网络没有借助服务发现协议,也没有 macvlan 那样的虚拟化技术,只需要在不同主机上启动 weave 组件就可以完成通信。

    1.4K90

    Linux interfaces 虚拟网络类型了解01

    id 3 VXLAN # ip link add vx0 type vxlan id 100 local 1.1.1.1 remote 2.2.2.2 dev eth0 dstport 4789 MACVLAN # ip link add macvlan1 link eth0 type macvlan mode bridge # ip link add macvlan2 link eth0 type macvlan mode bridge # ip netns add net1 # ip netns add net2 # ip link set macvlan1 netns net1 # ip link set macvlan2 netns net2 IPVLAN # ip netns add ns0 # ip link add name ipvl0 link eth0 type ipvlan

    13520

    Service Mesh 应用场景如何?看看房多多的技术实践

    服务使用,macvlan 主要给 Java 服务使用。 关于 macvlan 网络性能的测试可以参照网上的一些论文,一般来说,macvlan 网络可以达到物理网络 95% 以上的性能。 我们把 Dubbo 服务挂在 macvlan 的网络下实现 Dubbo 服务与原有虚拟机服务的互联互通。 这个方案并不是很优雅,需要每个服务都维护一个环境变量用于告诉框架需要注册的 IP,所以我们采用了只挂载 macvlan 网络的方案。 为了使 Service Mesh 支持 overlay 网络和 macvlan 网络,我们把 Envoy 的一块网卡挂载在 macvlan 网络中,另一块网卡挂载在 overlay 网络中,这样 Envoy

    89130

    Docker网络——实现容器间通信、容器与外网通信以及容器的跨主机访问

    网络方案的实现 Macvlan是一个新的尝试,是真正的网络虚拟化技术的转折点。 网络实际上就是使用了Linux提供的macvlan驱 动。 在两台主机上各创建macvlan网络 创建macvlan网络不同于桥接模式,需要指定网段和网关(因为要保证跨主机上网段和网关是相同的),并且都得是真实存在的。 会独占主机网卡,但可以使用vlan子接口实现多macvlan网络 vlan可以将物理二层网络划分为4094个逻辑网络,彼此隔离,vlan id取值为1~4094 在两台主机上分别使用创建的macvlan1 macvlan会独占主机的网卡的解决方案 前面说过macvlan会独占主机网卡,但可以使用vlan子接口实现多macvlan网络 vlan可以将物理二层网络划分为4094个逻辑网络,彼此隔离,vlan

    84510

    Docker网络模型

    Docker跨主机网络 Docker容器之间的跨主机访问有很多实现方法,macvlan和overlay是两种轻量级的方式 2.1 macvlan方式实现Docker跨主机网络 # 创建名为"macvlan _1"的网络通道,并设置了其网段,网卡名 [root@bdc01 ~]# docker network create --driver macvlan --subnet=100.0.0.0/24 --gateway =100.0.0.254 -o parent=eth0 macvlan_1 02eb9a47bd4bd9b7e42f744b921a43987be9556cb08ea89dc2beb316673daf84 # 另一台机器上也用相同的方式创建了名为"macvlan_1"的网络通道 [root@bdc02 ~]# docker network create --driver macvlan --subnet [root@bdc02 ~]# docker run -it --network macvlan_1 --ip 100.0.0.2 yyh/centos6.9:v1.0 /bin/bash [root@

    20420

    Docker 网络进阶

    单主机通信:none host bridge joined 多主机通信:overlay macvlan 扩展的多主机通信:flannel weave calico ? image.png macvlan:性能优异,没有提供DNS服务,通信只能IP 1、在两台主机上搭建macvlan:要设置promiscuous Mode:Allow ALL ? image.png 2、在两台主机上都创建macvlan网络 ? image.png 3、为容器分配网络 ? image.png 一个网卡只能创建一个macvlan ? image.png 利用子网配置多个macvlan ? image.png 利用网关配置,使不同macvlan可以通信 ? image.png ?

    36920

    在Docker中运行OpenWrt旁路网关

    docker network create -d macvlan --subnet=192.168.5.0/24 --gateway=192.168.5.1 -o parent=eth0 macnet ubuntu:~# docker network ls NETWORK ID NAME DRIVER SCOPE 6f4d61090f64 macnet macvlan 因为在部署 OpenWrt 时使用到了 Docker 的 macvlan 模式 ,通俗来讲就是在树莓派的物理网卡虚拟出来两个虚拟网卡。 解决办法就是在宿主机再建立一个 macvlan 然后修改路由,使数据经过新建的 macvlan 传到容器内的 macvlan 即可。 新建接口 添加一个名为 mynet 的 macvlan 接口 ip link add mynet link eth0 type macvlan mode bridge 分配IP并启用 需按照本地网络环境

    2.5K30

    Docker中的网络

    建立macvlan虚拟网卡,容器启动后用nsenter工具映射到容器的network namespace中 这种办法我觉得是最干净简洁的,而且采用macvlan,还意外获得了一种能力,就是你能在宿主机上创建子 macvlan设备,从而能向容器内的macvlan设备打入精确的流量。 另外,在容器内tcpdump包也很完美,如果想捕获二层协议包,可以用macvtap替换macvlan。 最后推荐为了简化macvlan的操作,我写的一个小工具:dockerfly 参考: Linux 上的基础网络设备详解 http://www.ibm.com/developerworks/cn/linux 上虚拟网络与真实网络的映射 http://www.ibm.com/developerworks/cn/linux/1312_xiawc_linuxvirtnet/index.html 网络虚拟化技术: TUN/TAP MACVLAN

    38160

    kuberntes中的redis集群性能调优

    这里提一下两个概念: Underlay网络:Underlay网络由底层网络驱动将接口暴露给虚机或容器,比较常用的方案有bridge, macvlan, ipvlan, sriov等。 由于不方便升级内核,因此这里就采用最简单的macvlan CNI网络方案了,切换方法就不详述了,参考这篇文章就可以了。 不过切换为macvlan之间遇到了几个问题。 使用macvlan ip的pod无法访问kubernetes里的serviceIP。 macvlan的pod,自然无法正常访问servicrIP。 基于multus-cni插件做双网卡,然后配置默认路由走macvlan的网卡,内部网络走cluster network那块网卡。

    1.8K30

    K8s网络模型

    MacVlan MacVlan的原理是在物理网卡(父设备)上虚拟出多块虚拟网卡(子设备),并允许用户针对每个子设备单独设置MAC地址与IP地址。 Bridge:属于同一个parent接口的macvlan接口之间挂到同一个bridge上,可以二层互通,macvlan接口都无法与parent 接口互通。 1、分别在2个主机上基于macvlan创建虚拟网卡 ip link add link eth0 dev eth0.03 type macvlan ip link add link eth0 dev eth0.04 给pod划分的vlan 2、vlan标签是在出主机时就已封装 3、arp广播时发给交换机下所有主机 基于macvlan的evpn方案 macvlan的局限性: 1、网段与交换机绑定,在pod漂移时必须更换 因为所有的虚拟接口要共享 mac 地址,这种场景多用于在云厂商的虚拟机内部创建容器,因为云厂商默认不识别macvlan的mac地址。

    32320

    7-docker容器的网络通信

    与另一个运行中的容器共享网络名称空间,--net=container:ID Bridge:Docker设计的,默认的NAT网络模型,--net=bridge 原生多机网络 overlay:基于vxlan的隧道网络 macvlan 什么是macvlanmacvlan 本质上是一种网卡虚拟化技术 macvlan 本身是 linux kernel 模块,允许在同一个物理网卡上配置多个 MAC 地址,即多个 interface,每个 使用macvlan可以实现容器跨主机通信: B. 创建macvlan: 首先需要再开一台虚拟机,创建好docker环境,然后两台机器都执行下列命令 docker network create --driver macvlan --subnet 10.0.0.0 /24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1 说明:docker不会为macvlan创建网关,所以这里的网关要事先存在 macvlan

    11040

    Docker系列学习文章 - 网络基本配置(九)

    4.macvlan模式 macvlan跟overlay一样也是跨主机互联的驱动方案。 macvlan最大的优点是性能极好,相比其他方案,macvlan不需要创建Linux bridge,而是直接通过以太interface连接到物理网络,另外macvlan还支持802.1q trunk等更为复杂的网络拓扑结构 这里也要注意几点:其一,macvlan会独占主机的网卡,也就是说一个网卡只能创建一个macvlan网络,否则会报错;其二,同一个macvlan下的网络能ping通,不同的macvlan网络之间不能通信, 也就是说不同的macvlan网络不能在二层上通信,在三层可以通过网关进行通信。 总之,macvlan网络的连通性和隔离性完全依赖VLAN,IP subnet和路由,docker 本身不做任何限制,用户可以像管理传统VLAN网络那样管理macvlan

    2.2K132

    扫码关注腾讯云开发者

    领取腾讯云代金券