摘要: 容器是相比于虚拟机(Virtual Machine,VM)更轻便,部署更方便快捷的一种虚拟化技术。 Docker是目前主流的容器引擎,支持Linux,Windows等多种平台,同时支持Kubernetes(K8S), Swarm及Rocket(RKT)等主流Docker编排系统。
概述
容器是相比于虚拟机(Virtual Machine,VM)更轻便,部署更方便快捷的一种虚拟化技术。 Docker是目前主流的容器引擎,支持Linux,Windows等多种平台,同时支持Kubernetes(K8S), Swarm及Rocket(RKT)等主流Docker编排系统。常见的容器网络支持Bridge,Overlay,Host及用户自定义网络等多种模型,K8S等系统依赖于容器网络接口(Container Network Interface, CNI)插件来完成网络管理,常见的有Calico/Flannel等知名CNI插件。本文将介绍一些容器网络的基本知识,基于阿里云的弹性网络接口(Elastic Network Interface, ENI)技术实现了ECS容器网络的高性能,易部署及维护, 具有强隔离的高安全容器网络。
多网卡容器网络
当VM拥有多张网络接口卡(Network Interface Card, NIC),而且这些NIC是能够动态热插拔时,NIC就能够用于容器网络, 这样容器网络将不再需要利用Linux VETH及Bridge等技术,同时报文转发下移到了位于宿主机上的虚拟交换机(Virtual Switch,vSwitch),通过减少流程提升网络性能。
方案介绍
如下图所示,在宿主机上运行有vSwitch,用于转发VM及容器的流量, 在vSwitch上连接有多张虚拟NIC。在VM内启动容器时,在宿主机上动态地将虚拟NIC绑定容器所在的VM,然后在VM内部将NIC绑定到容器所在的网络命名空间,容器内的网络流量能够直接通过这块NIC直接发送到位于宿主机上的vSwitch(容器网络直通vSwitch), vSwith内应用ACL/QoS/Session等规则过后将流量进行转发。当位于宿主机1上的VM内运行的容器访问位于宿主机2上的VM内运行的容器时,流量大致会经历如下流程:
1> 网络报文经过容器内核网络协议栈,查找路由后通过eth0网卡发送报文;
2> 宿主机上的vSwitch从虚拟端口收到来自容器的报文,运行vSwitch的转发逻辑,将报文通过物理网络端口发送到ToR交换机 (Top of Rack Switch, ToR Switch),如果针对容器或者虚拟机网络建立了虚拟私有云 (Virtual Private Cloud, VPC)则需要对报文使用VxLAN等隧道技术进行封装;
3> ToR Switch通过查询路由信息,通过连接宿主机2的物理端口将报文转发;
4> 位于宿主机2上的vSwitch接收物理端口报文,经转发逻辑发送到连接容器的虚拟端口;
5> 容器内协议栈eth0收到由另一端发送来的报文,由容器内网络协议栈进行处理。
方案特点
与传统的在VM内运行容器的方案对比,本方案具有高性能,易管理及强隔离等特点。
VPC直通
让容器通过多网卡直通的方案,直接接入VPC网络平面,能让每个容器具备全量的VPC网络功能,包括:EIP、SLB、高防、安全组、HAVIP、NAT、用户路由等众多高级功能。
跨VPC
容器多网卡直通方案,直接接入了VPC网络平面,因此可以可以使用VPC的一些高级功能,例如能够使用peer 功能,也可以使用跨VPC的弹性网卡访问云产品, 也可以给容器分配多个不通VPC内的弹性网卡,使其能够同时跨多个VPC。
高性能