弹性网卡在容器网络的应用

弹性网卡(Elastic Network Interface)是一种虚拟网卡,可以挂载到已有的虚拟机上。使用弹性网卡可以实现虚拟机迁移IP地址不变(IP地址与弹性网卡绑定,弹性网卡可以在虚拟机之间迁移)、传统数据中心的多网络平面隔离功能。

弹性网卡与云上的VPC网络结合,还提供更多的管控功能,每个弹性网卡可以配置独立的防火墙(安全组)。

容器网络的痛点问题

容器是一种轻量的虚拟化技术,利用Linux的LXC技术,使用cgroup隔离cpu与内存资源,使用chroot机制隔离rootfs,使用namespace隔离用户、网络、pid等资源。

这其中最复杂的是网络的隔离与互通。

容器网络在虚拟网络上再做了一层虚拟化,必然会引入损耗;同时容器轻量化带来的实例数量比虚拟机多出几个数量级(站在网络虚拟化角度,一个容器实例相当于一台虚拟机),容器实例的特点又是持续频繁的删除与创建,这种场景下对网络虚拟化带来的巨大的冲击:ARP缓存撑爆、路由表过大导致性能下降、多层虚拟化导致链路变长性能损耗、定位问题困难等等各种问题。

总结当前容器网络的问题为:

  • 管理规模难以线性扩容(Scale)
  • 转发性能损耗(Performance)
  • 管理复杂度高(Complexity)

当前典型的容器网络方案

Overlay

一般通过VXLAN协议实现,使用TAP/TUN设备实现封包/解包。

Overlay网络对底层网络约束较少,通用性较好,但是封包/解包会存在较大性能损耗(约30%吞吐量损耗)。 Overlay网络性能损耗较高,管理复杂度较高,管理规模线性扩容能力较好。

Underlay

一般使用MACVLAN或IPVLAN方式实现。

MACVLAN会给每个容器实例分配一个MAC地址,会导致MAC地址极速增长,导致ARP缓存满。同时容器实例频繁创建与销毁会导致ARP缓存刷新频繁刷新。 MACVLAN模式性能较高,管理规模线性扩容能力一般,管理复杂度一般。

IPVLAN使用路由方式与外部通信,每台HOST机器作为一个路由器,外部应用访问容器内应用,需要配置好路由,容器节点增删也需要更新网络中的路由表。 IPVLAN模式性能较高,管理规模线性扩容能力较高,管理复杂度一般。

ENI实现容器网络与VPC网络直通

目前一些云厂家推出了弹性网卡与容器结合的方案,将弹性网卡分配给容器POD使用,弹性网卡可以在VPC内获得一个VPC IP,使得容器网络与虚拟机网络融为一体,免去了容器网络这一层虚拟化。 这种模式下性能较高,管理复杂度也比较简单,麻烦点是弹性网卡本身的性能,容器POD频繁创建与删除,弹性网卡管理能否跟的上?同时弹性网卡的数量一般会受限,要真正规模生产使用还有一定距离。

各公有云厂商对Docker+ENI的支持

Reference

弹性网卡概述-阿里云

为容器(Pod)分配弹性网卡(ENI)

网络虚拟化技术(一): Linux网络虚拟化

网络虚拟化技术(二): TUN/TAP MACVLAN MACVTAP

Introduction to Linux interfaces for virtual networking

Linux虚拟网络设备之tun/tap

腾讯云容器服务TKE产品介绍

关注公众号获得更多云最佳实践