Agenda
网络虚拟化技术演进基本思想virtio,vhost,vhost-user|snabb,openonload
物理网卡的发展
SR-IOV更彻底,将二层交换的功能也通过硬件实现,并且创建不同的虚拟功能(VF)的方式,呈现给虚机的就是具有独立的中断号的物理网卡,因为虚机直接和物理网卡通信,不需要经过软件交换机, 虚机与VF之间通过DMA传输。
传统协议栈针对通用性设计,区分内核空间和用户空间,应用无法直接访问协议栈的地址空间,因此协议栈的安全性较高。有数据表明,在Linux协议栈中,数据包通过socket从内核缓冲区复制到用户空间的时间占到了整个数据包处理时间的57.1%。
系统调用是内核态向用户态提供的一组API集,一般通过软中断实现,会产生较大的上下文 开销。
云操作系统 OSv, CoreOS, Ubuntu Core
单内核减小IPC调用,每个CPU核上单线程
基于容器技术
装载容器,在应用分发上做文章, Ubuntu Core使用了基于事务的包管理工具snappy, 且使用了微内核由vendor来实现snappy应用
在升级方面,Ubuntu Core基于事务升级,要不升级成功,要不升级不成功但不影响原有系统;CoreOS更绝采用两个root文件系统,有一个用于升级
在安全方面,容器间的共享的内核受到攻击后对容器威胁很大,Ubuntu Core采用apparmor来对程序进行资源的访问控制
内核方面,CoreOS与Ubuntu Core基于Linux内核,OSv无用户空间减少了用户态内核态切换的开销
容器,Linux容器(LXC), Docker
容器的优点:
密度大,启动快,因为它省去了一个操作系统栈,正是这点,给网络设计带来了挑战
容器解偶了应用与操作系统,为应用的分发提供了可能,更适合SaaS。它使用namespace进程资源隔离(IPC,NET,PID,UTS,NS,USER);使用chroot隔离根文件系统;使用cgroup做资源限制;
所有容器共享相同的内核,便于维护。但同时也带来了安全性风险
容器共享内核带来了安全性风险,所以云OS应该是最小化操作系统,减小攻击面
更高密度带来的网络挑战
应用分发机制,以 Ubuntu Core为例
高密度容器带来的网络挑战
没有控制平面,高密度直接要求必须禁掉ARP广播,改由地址学习。neutron的数据库是一个学习的好地方,neutron l2pop特性能允当控制平面。
高密度要求网络资源必须充足,像limit, namespace, neighbor table size, vlan等,Linux是一个通用的操作系统,不是为云设计的
容器的快速启动特性要求dnsmasq支持HUP信号持HUP信号
快速搭建可运行的环境 - devstack
计算节点 (LXC+ OVS)
网络节点
Neutron L2pop