ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Kubernetes — MACVLAN CNI

2021-06-17 22:29:42  阅读:222  来源: 互联网

标签:Kubernetes 接口 MACVLAN 交换机 mode cni CNI


目录

文章目录

MACVLAN

MACVLAN 是 Linux Kernel 的新特性,在 Linux kernel v3.9-3.19 和 v4.0+ 版本中支持。

通过 MACVLAN 可以将一个 Physical Network Interface 虚拟成多个 Virtual Network Interfaces(虚拟网络子接口),这些 VNIs 可以拥有自己独立的 MAC/IP 地址,且与主机网络处在同一个 LAN 里面,共享同一个广播域。

粗略的看,MACVLAN 与 Bridge 很类型,但相比,MACVLAN 没有了 Bridge 带来的 MAC 地址学习和翻译的负担,是一种高效直接的互联技术。

再仔细看看,根据子通信方式的不同,MACVLAN 有四种工作模式:

  1. Private mode(私有模式):主接口会过滤掉交换机返回来的来自其子接口的报文,不同子接口之间无法互相通信。

  2. VEPA(Virtual Ethernet Port Aggregator)mode / Hairpin mode(发夹流量模式):主接口发送出去的报文经过交换机,交换机再发送到对应的目标地址,即使目标地址就是主接口上的其它子接口。这个模式需要主接口连接的交换机支持 VEPA/802.1Qbg 特性。这种方式允许一个主接口上的多个子接口借助外部交换机进行相互通信,而 LAN 里面的广播包也会被主接口转发到所有子接口。这个种方式的一个典型应用是如果在外部交换机上有一些策略(e.g. 流量检测),则可以使用 VEPA 模式让所有子接口交互的包都会经由外部交换机的处理,便于统一管理整个子网的所有物理和虚拟接口。

  3. Bridge mode(桥模式):通过 Host 上的 MACVLAN Bridge 将主接口的所有子接口连接在一起,不同子接口之间能够不借助外部交换机而进行直接通信,不需要将报文发送到 Host 之外;另外,因为所有子接口的 MAC 地址都是已知的,所以 MACVLAN Bridge 也不需要 MAC 地址学习和 STP 的能力,所以是一个高效的 Bridge 实现。

  4. Passthru mode(直通模式):将主接口直通到 Container。Container 可以直接使用主机的网络接口,并具有对接口进行参数调整的能力。

可见,MACVLAN 具有非常类型 SR-IOV PF/VFs 网卡的特性。

NOTE:虽然 MACVLAN 主接口和子接口在同一个 LAN,但是在 Host 上通过主接口是没有办法直接和子接口通信的。需要额外建立一个子接口,把主接口的 IP 配置给这个子接口,这样才能借助原来主接口的 IP 地址和子接口进行通信。

使用 MACVLAN CNI

基于 Linux Kernel MACVLAN feature,将 VNI 子接口交给 Pod 使用,作为 Pod Network Namespace 的一个 Interface。

  1. 下载 CNI:https://github.com/containernetworking/plugins/releases
  2. 把 CNI 的 binary 放置到每个 Node 的 /opt/cni/bin/。
  3. 为每个 Node 配置 kubelet:
$ vi /etc/kubernetes/kubelet
...
KUBELET_ARGS="--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
  1. MACVLAN CNI 的配置文件:
{
    "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" }
        ]
    }
}

标签:Kubernetes,接口,MACVLAN,交换机,mode,cni,CNI
来源: https://blog.csdn.net/Jmilk/article/details/118002950

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有