添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
任性的大象  ·  k8s 查看容器id-掘金·  1 年前    · 
热情的硬币  ·  不得不读 | ...·  1 年前    · 
威武的灯泡  ·  Docker 中的 PHP ...·  1 年前    · 

一、前言

macvlan是kernel新支持的特性之一,需要Linux kernel v3.9–3.19和4.0+的支持。这种模式所配置的container网络同主机网络在同一个LAN里面,可以具有和主机一样的网络能力。

使用macvlan可以在主机的一个网络接口上配置多个虚拟的网络接口,这些网络接口有自己独立的MAC地址和IP地址。macvlan 下的container网络和主机在同一个网段中,共享同一个广播域。基于macvlan的联网方式,可以直接访问主机所在的LAN,并且没有其它诸如bridge等方式带来的bridge处理和地址翻译的负担,是一种高效直接的互联技术。

转载自https://blog.csdn.net/cloudvtech

二、macvlan的工作模式

macvlan可以在主机的网卡上绑定多个二层mac地址,每个mac地址对应主机网卡(主接口)的一个子接口,每个container可以绑定一个子接口作为自己的网卡接口。

根据子接口通信方式的不同,macvlan存在四种工作模式:

  • private mode:主接口会过滤掉交换机返回来的来自其子接口的报文,不同子接口之间无法互相通信。
  • vepa(Virtual Ethernet Port Aggregator) mode: 发送出去的报文经过交换机,交换机再发送到对应的目标地址(即使目标地址就是主机上的其它macvlan子接口),也就是hairpin mode模式,这个模式需要主接口连接的交换机支持 VEPA/802.1Qbg 特性;这种方式允许一个主接口上的多个子接口借助外部交换机进行相互通信,而LAN里面的广播包也会被主接口forward到所有子接口。这个种方式的一个典型应用是如果在外部交换机上有一些策略,则可以使用VEPA模式让所有子接口交互的包都会经由外部交换机的处理,便于统一管理整个子网的所有物理和虚拟接口。
  • bridge mode:通过主机上的macvlan bridge将主接口的所有子接口连接在一起,不同子接口之间能够不借助外部交换机而进行直接通信,不需要将报文发送到主机之外;因为所有子接口的mac地址都是已知的,所以macvlan bridge不需要mac地址学习和STP的能力,所以是一个高效的bridge实现。
  • passthru mode:container可以直接使用主机的网络接口,并具有对接口进行参数调整的能力。

需要注意的是,如果使用macvlan模式,虽然主接口和子接口在同一LAN,但是在主机上通过主接口是没有办法直接和子接口通信的;需要额外建立一个子接口,把主接口的IP配置给这个子接口,这样才能借助原来主接口的IP和子接口进行通信。

转载自https://blog.csdn.net/cloudvtech

三、配置macvlan作为kubernetes的CNI实例

macvlan是CNI里面预先实现的插件, https://github.com/containernetworking/plugins/tree/master/plugins/main/macvlan

如果要为kubernetes配置macvlan CNI插件,需要经过如下一些步骤:

1.kubernetes配置

k8s master: 192.168.166.101
k8s node1: 192.168.166.102
k8s node2: 192.168.166.103
k8s node3: 192.168.166.104

2.下载CNI最新的发布

下载地址: https://github.com/containernetworking/plugins/releases

将下载的binary放置到每个node的/opt/cni/bin/目录


3.为kubelet配置CNI

在文件/etc/kubernetes/kubelet添加如下配置:

KUBELET_ARGS="--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"

macvlan CNI插件的配置文件/etc/cni/net.d/10-maclannet.conf如下:

{
    "name": "macvlannet",
    "type": "macvlan",
    "master": "ens33",
    "mode": "vepa"
    "isGateway": true,
    "ipMasq": false,
    "ipam": {
        "type": "host-local",
        "subnet": "192.168.166.0/24",
        "rangeStart": "192.168.166.21",
        "rangeEnd": "192.168.166.29",
        "gateway": "192.168.166.2",
        "routes": [
            { "dst": "0.0.0.0/0" }
}

转载自https://blog.csdn.net/cloudvtech

四、kubernetes运行POD使用macvlan网络

1. 启动kubernetes POD deployment

在每个k8s node上面都启动一个busybox的replica

[root@k8s-master ~]# kubectl get pods -o wide 
NAME            READY     STATUS    RESTARTS   AGE       IP               NODE
busybox-6l6rd   1/1       Running   0          1h        192.168.166.31   192.168.166.103
busybox-9j531   1/1       Running   0          1h        192.168.166.41   192.168.166.104
busybox-z6hdq   1/1       Running   0          1h        192.168.166.21   192.168.166.102

2. 测试子接口的ARP能力和IP联通性

在k8s master上可以ping通所有macvlan子接口对应的IP并且可以看到对应的mac地址:


在container里面可以看到对应mac地址和IP

[root@k8s-node1 ~]# docker exec -it 859ce6208e54 sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 
    link/ether 26:16:fe:b4:02:a4 brd ff:ff:ff:ff:ff:ff
    inet 192.168.166.21/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::2416:feff:feb4:2a4/64 scope link 
       valid_lft forever preferred_lft forever

3. container内部对外联通性

可以起ping通其它主机上macvlan主接口和子接口IP,但是无法ping通本主机主接口IP:



4. 在主机网卡上可以看到如下mac地址:

[root@k8s-node1 ~]# ip maddr show ens33
2:	ens33
link  01:00:5e:00:00:01 users 2
link  33:33:00:00:00:01 users 2
link  33:33:ff:34:7b:e9
link  26:16:fe:b4:02:a4
inet  224.0.0.1
inet6 ff02::1:ff34:7be9
inet6 ff02::1
inet6 ff01::1

转载自https://blog.csdn.net/cloudvtech
转载自https://blog.csdn.net/cloudvtech








一、前言在测试过程中,对于HLS流媒体服务,最重要的衡量量是并发用户数、延时和吞吐量。要追求的优良的性能是指能在一定数目的并发用户情况下,在应用可接受的时延内,达到一定的数据吞吐量。过多的并发用户会导... 来自: cloudvtech的博客 K8S网络详解按照我自己的理解,k8s网络分三个层面(由里到外):容器网络(不同容器之间怎么相互访问)集群内网络(不同节点之间怎么相互访问)集群外网络(集群外怎么访问到集群内的服务)容器网络熟悉doc... 来自: fy_long的博客 一、方案分析在默认container运行时(比如docker)的网络配置下,所有的container的数据包都会通过一个默认的bridge外加iptables的NAT进出,对于大流量或者大TPS的程序... 来自: cloudvtech的博客 我写这篇文章的目的是记录下制作一个支持SSH远程登录的容器的全过程。这篇文章使用Ubuntu14.04做例子。其他的操作系统应该大同小异。我这种用法,相当于把容器当成了虚拟机。用户可以远程登录容器,在... 来自: zhangchao19890805的专栏 macvlan和ipvlan的对比http://hicu.be/macvlan-vs-ipvlanmacvlanipvlan参考:https://yq.aliyun.com/articles/1929... 来自: weixin_34102807的博客 macvlan原理   在linux命令行执行 lsmod|grepmacvlan 查看当前内核是否加载了该driver;如果没有查看到,可以通过 modprobemacvlan 来载入    mac... 来自: zhonglinzhang 从多个方面总结Kubernetes配置最佳实践1.普通配置当定义配置时,使用最新的稳定版API,对于非稳定版注意后续更新。 利用版本控制器管理配置文件,有利于变更审计、审核、回滚、配置重复利用。 使用... 来自: 山不转的博客 环境:centos7两台虚拟机,每个虚拟机上有两个网卡(不必须),内核升级为4.14.13docker版本1.12.6A机:1网卡192.168.2.191;2网卡192.168.3.191B机:1网... 来自: su4416160的博客 VLANVLAN技术主要就是在二层数据包的包头加上tag标签,表示当前数据包归属的vlan号。VLAN的主要优点:(1)广播域被限制在一个VLAN内,节省了带宽,提高了网络处理能力。(2)增强局域网的... 来自: liuliuzi_hz的博客 转载自:http://cizixs.com/2016/10/25/kubernetes-intro-kubeletmacvlan简介macvlan是linuxkernel比较新的特性,可以通过以下方法... 来自: u014100559的专栏 macvlan是Linux操作系统内核提供的网络虚拟化方案之一,更准确的说法是网卡虚拟化方案。它可以为一张物理网卡设置多个mac地址,相当于物理网卡施展了影分身之术,由一个变多个,同时要求... 来自: 山不转的博客 创建docker及其macVLAN网络环境准备创建macVLAN网络创建容器测试是否work联通性测试背景结果延迟背景结果结论创建docker及其macVLAN网络环境准备使用VMWARE创建两台虚拟... 来自: Aragorn_XH的博客 除了overlay,docker还开发了另一个支持跨主机容器网络的driver:macvlan。macvlan本身是linxukernel模块,其功能是允许在同一个物理网卡上配置多个MAC地址,即多个... 来自: kof2019的博客 Kuryrkubernetes除了支持bare-metal部署,还支持nested部署,也就是容器部署在VM内而不是在物理主机上。POD部署在VM内时就要考虑网络如何穿透VM。当前Kuryr支持vla... 来自: liuliuzi_hz的博客 此文已由作者黄扬授权网易云社区发布。欢迎访问网易云社区,了解更多网易技术产品运营经验。在早先的k8s版本中,kubelet代码里提供了networkPlugin,networkPlugin是一组接口,... 来自: jessicaiu的博客 除了overlay,docker还开发了另一个支持跨主机容器网络的driver:macvlan。macvlan本身是linxukernel模块,其功能是允许在同一个物理网卡上配置多个MAC地址,即多个... 来自: weixin_33979745的博客 原文:http://qiankunli.github.io/2017/01/13/docker_macvlan.html简介macvlan基础如果采用硬件支持的方式来设置vlan,交换机是划分局域网的... 来自: su4416160的博客 看了下calicok8s布署全网文档还是比较少的,为了大家少踩坑,特拟写此文,如有任何问题,欢迎各位留言交流目前k8s网络最快的第一就是Calico第二种稍慢flannel,根据自己的网络环境条件来定... 来自: 毛台 一、前言CNCF的CNI是一个接口规范,这个规范定义了输入、输出的标准和调用的接口。只要调用CNI插件的实体遵守这个规范,就能从CNI拿到满足网络互通条件的网络参数(如IP地址、网关、路由、DNS等)... 来自: cloudvtech的博客 一、前言在生产环境下,为了保证安全性和性能,不同功能的网络进行隔离是一个必要的措施,比如管理网络、控制网络和数据网络的隔离(必要情况下,数据网络的datain和dataout网络也要进行隔离)。这种隔... 来自: cloudvtech的博客 1.kube-proxy实现的service原理剖析kubernetes的每个服务都有一个固定的虚拟ip(这个ip也被称为clusterIP),自动并且动态地绑定后面的pod,所有的网络请求直接访问服... 来自: liukuan73的专栏 1、为什么CNI    CNI是ContainerNetworkInterface的是一个标准的,通用的接口。现在容器平台:docker,kubernetes,mesos,容器网络解决方案:flann... 来自: zhonglinzhang 一、 原理简介      关于Kubernetes网络插件,要从其初始化配置讲起,      即 /etc/systemd/system/kubelet.service.d/10-kubeadm.co... 来自: shida's blog 概要项目背景(XX银行客户):私有云上要在K8S上跑像mysql这类状态的数据库服务,对性能和延时都比较敏感,并不像web偏应用的无状态延时性能差点可接受。而基于overlay方式等网络性能和延时比较... 来自: 两日当头,鱼逆游山高处 作者:翼动晴空链接:https://www.jianshu.com/p/0a656b3d94b2來源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。kubernetes基本框... 来自: qfjiang的专栏 周末的时候写了一篇关于Docker底层支撑技术的文章:以firejailsandbox解析Docker核心原理依赖的四件套:https://blog.csdn.net/dog250/article/d... 来自: Netfilter,iptables/OpenVPN/TCP guard:-( 上一节我们创建了macvlan并部署了容器,本节详细分析macvlan底层网络结构。macvlan网络结构分析macvlan不依赖Linuxbridge,brctlshow 可以确认没有创建新的bri... 来自: daye5465的博客 http://cizixs.com/2017/02/14/network-virtualization-macvlan  ***linux网络虚拟化:macvlanhttp://network.51c... 来自: MrTeq的专栏 原文地址有些应用程序,尤其是遗留的或用于监控网络流量的程序,需要直接连接到物理网络。这种场景下,可以使用macvlan网络驱动程序将MAC地址分配给每个容器的虚拟网络接口,使得看上去是物理网络接口直接... 来自: kikajack的博客 之前写过一篇文章《OpwnWrt路由器MWAN3多线多拨实现方法》,介绍了如何在具备多根入室宽带网线的情况下实现网络带宽的叠加。多线多拨一般应用在多个不同运营商线路的负载均衡场景中,那么对于同一运营商... 来自: lvshaorong的博客 跨主机网络概述docker跨主机网络方案包括:docker原生的overlay和macvlan。第三方方案:常用的包括flannel、weave和calico。docker通过libnetwork以及... 来自: wfs 上一节我们准备好了macvlan的实验环境,今天在host1和host2中创建macvlan网络mac_net1:注意:在host2中也要执行相同的命令。① -dmacvlan 指定driver为ma... 来自: 何晓龙的博客 eth0为固定ip eth1接拨号光纤,拨号方式pppoe,可多拨.拨得的ip为公网ip 用macvlan从eth1虚拟出2个接口 eth1.0和eth1.1,pppoe绑定到这2个接口拨号并得到2个 写在开篇,是为了提醒自己,要善始善终莫着急,做好每一件小事参考文献:https://blog.csdn.net/dkfajsldfsdfsd/article/details/79525187http:... 来自: weixin_34138377的博客 当容器需要直连入物理网络时,可以使用Macvlan。Macvlan本身不创建网络,本质上首先使宿主机物理网卡工作在‘混杂模式’,这样物理网卡的MAC地址将会失效,所有二层网络中的流量物理网卡都能收到。... 来自: 山不转的博客 基础概念首先来回顾一下网络的基础概念,网桥和网关网桥网桥(Bridge)是一个局域网与另一个局域网之间建立连接的桥梁.是一种二层网络设备,网关网关实质上是一个网络通向其他网络的IP地址。比如有网络A和... 来自: weixin_40581617的博客 最近在做一个项目是linux内核代码macvlan在lxc上虚拟出虚拟网口,现在macvlan模块代码阅读的不是很懂,请教一下高手,有没有相关资料,我邮箱945844419@qq.com,感谢啊。。。 Linux的网卡驱动中内含了很多“虚拟网卡”。早先的文章曾经详细分析过tun,ifb等虚拟网卡,类似的思路,在虚拟化大行其道的趋势下,Linux源码树中不断增加对“网络虚拟化”的支持,不光是为了支持“... 来自: Netfilter,iptables/OpenVPN/TCP guard:-( 原文地址本教程基于连接到macvlan网络的独立容器。在这种网络中,Docker主机接受来自多个MAC地址和对应IP地址的请求,并将这些请求路由到合适的容器。1.目标本教程的目标是设置一个桥接的mac... 来自: kikajack的博客 本汪接触macvlan没有几天,还是分享一些我的学习资料吧,学习总结就不好意思给了。macvlan对于服务器和交换机来说还是有点区别的,下面是大神们的资料对于交换机来说http://qiankunli... 来自: 风一样的少年 转载TUN设备TUN设备是一种虚拟网络设备,通过此设备,程序可以方便得模拟网络行为。先来看看物理设备是如何工作的:所有物理网卡收到的包会交给内核的NetworkStack处理,然后通过SocketAP... 来自: 追寻神迹 MACVLAN就是基于MAC地址划分的VLAN,MACVLAN的最大优点就是用户不需要固定在某些端口下,可以随意移动,比如当用户物理位置移动时,即从一台交换机换到其它的交换机时,VLAN不用重新配置,... 来自: SoldierJazz的专栏 上一节我们创建了两个macvlan并部署了容器,网络结构如下:本节验证macvlan之间的连通性。bbox1能ping通bbox3,bbox2能ping通bbox4。即:同一macvlan网络能通信。... 来自: lx520aa的博客 本测试基于VMWAREEXSI搭建环境Vmwareexsi,Ubuntu15.10内核4.2.0,docker1.11.0-devExsi上运行两套ubuntu主机系统,网卡混杂模式开启全部允许.主机... 来自: allen的博客 TUN/TAP虚拟网络设备为用户空间程序提供了网络数据包的发送和接收能力。他既可以当做点对点设备(TUN),也可以当做以太网设备(TAP)。实际上,不仅Linux支持TUN/TAP虚拟网络设备,其他U... 来自: jincm的专栏 圣诞献礼!          2012年-2013年,Sunny在CSDN技术博客中陆续发表了100多篇与设计模式相关的文章,涵盖了七个面向对象设计原则和24个设计模式(23个GoF设计模式 +  简... 来自: 刘伟技术博客 打开某个应用程序的配置文件Web.config后,我们会发现以下这段: < sessionState mode="InProc" stateConnectionString="tcpip=1... 来自: yszwn的专栏 0.绪论这篇文章主要为了研究双目立体视觉的最终目标——三维重建,系统的介绍了三维重建的整体步骤。双目立体视觉的整体流程包括:图像获取,摄像机标定,特征提取(稠密匹配中这一步可以省略),立体匹配,三维重... 来自: shiter编写程序的艺术 在虚拟机里安装hadoop,关闭防火墙、配置ip 我的系统环境为:win8系统、vmware11、centos81、设置虚拟机网络通信模式为host only模式 在虚拟机目录... 来自: 梦想的翅膀 卷积神经网络是深度学习的基础,但是学习CNN却不是那么简单,虽然网络上关于CNN的相关代码很多,比较经典的是tiny_cnn(C++)、DeepLearnToolbox(Matlab)等等,但通过C语... 来自: tostq的专栏 单机最大的TCP连接数及其修改 一个误解: 单个服务器程序可承受最大连接数“理论”上是“65535” .    65535这个数字的由来,很多人想当然地将它与port最大值联系起来。的确,TCP的... 来自: 田发江的专栏 最近公司安排了个任务:要求交付一个DLL,实现【PDF转换成图片】,最好的效果是能够掌握所有源码,实在不行才交付第三方DLL。研究了6个工作日+1双休+每晚9点下班,逛遍了国内外各种论坛,还是没能成功... 来自: 劼哥舍 众所周知,Activex组件没有进行有效的签名,在IE上无法安装的,除非你让用户手工开启“接收任何未签名的ActiveX”,这个很明显不现实。而组件签名需要证书,证书从哪里来,你可以选择付1000到3... 来自: jiangtongcn的专栏 上一篇博客介绍了如何解决Fragment重叠的问题,有需要的同学可以看一下,底部有demo下载。 直通车:完美解决Fragment重叠本篇博客我们来说一下怎么让fragment重新加载布局资源文件。... 来自: 喻志强的博客 我们可能经常会用到这一功能,比如有时,我们不希望用户没有进行登录访问后台的操作页面,而且这样的非法访问会让系统极为的不安全,所以我们常常需要进行登录才授权访问其它页面,否则只会出现登录页面,当然我的思... 来自: 沉默的鲨鱼的专栏 我在VC中用ADO调用Sybase ataptive anywhere中的一个专用于用户注册的存储过程时,ADO调用参考了MSDN和一些从网上收集到的样例,但总在执行if(!pRecSet->Ge... 来自: snowglede的专栏 自微软从2013版本推出新的插件注册器后,随着UI的重大更新后,问题也多了很多,前面已有博客提到注册assembly时看不到注册按钮(http://blog.csdn.net/vic0228/arti... 来自: Vic的博客 springmvc文件上传下载实现起来非常简单,此springmvc上传下载案例适合已经搭建好的ssm框架(spring+springmvc+mybatis)使用,ssm框架项目的搭建我相信你们已经搭... 来自: jronzhang的博客 问题场景描述整个项目通过Maven构建,大致结构如下: 核心Spring框架一个module spring-boot-base service和dao一个module server-core 提供系统... 来自: 开发随笔 工作需求,渐变色的边框和文字,还需要显示drawable。我们知道如果是View的背景色渐变,那么很好办,只需要写一个drawable文件,里面定义shape然后设置为View的background就... 来自: 泥巴城 的博客 iOS安全攻防(二十三):Objective-C代码混淆class-dump可以很方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完善的程序给同行留下笑柄。所以,我们... 来自: 念茜的博客 测试环境莫名其妙有几条重要数据被删除了,由于在binlog里面只看到是公用账号删除的,无法查询是那个谁在那个时间段登录的,就考虑怎么记录每一个MYSQL账号的登录信息,在MYSQL中,每个连接都会先执... 来自: 路在脚下 以前在博客:基于PYQT编写一个人脸识别软件 中给出了我自己用PYQT编写的一个小软件。鉴于使用的是开源库——face_recogniton,尽管使用很简单,但是还有些问题,比如:识别黄种人时... 来自: hongbin_xu的博客 最近在做一个Mac下的ssh调试工具,但是出现了一点问题。后来发现居然Mac下有串口调试工具可以用,所以果断换串口了,是普通PL2303芯片的usb转串口线。 接下来说下简单的安装步骤吧。我是勤劳的... 来自: Horizen kubernetes系列之十八:使... xiaodage: 请问不是使用helm 安装,我k8s 是二进制安装的,如何安装这个呢,我下载的是1.0.4 ,构建后 grafana 和 istio-system istio-security-post-install-bgcdf 这个总是提示 失败提示 error: unable to recognize "/tmp/security/custom-resources.yaml": no matches for authentication.istio.io/, Kind=MeshPolicy

kubernetes系列之十二:P... hiluo302: 大神你好,我按照你的教程,结果运行pod以及coredns都报错: "flannel": open /run/flannel/subnet.env: no such file or directory,我是k8s小白,求指导

kubernetes系列之十九:配... qq_32710881: 您好,我使用kubeadm部署的集群,两个节点,kubevirt部署好之后,VM启动无法访问VM,其podIP,没有办法ping通,网络采用的是flannel,其他除虚拟机外的pod可以ping通,报:Destination Host Unreachable 请问这是什么原因呀,谢谢!!!