所属技术领域:
K8s
|名词定义|
常见的容器网络方案可以从协议栈层级、穿越形态、隔离方式这三种形式进行划分。
协议栈层级:
第一种:协议栈二层。
第二种:协议栈三层(纯路由转发)。
第三种:协议栈二层加三层。
穿越形态:
按穿越的形态划分,这个与实际部署环境十分相关。穿越形态分为两种:Underlay、Overlay。
Underlay:在一个较好的一个可控的网络场景下,我们一般利用 Underlay。可以这样通俗的理解,无论下面是裸机还是虚拟机,只要网络可控,整个容器的网络便可直接穿过去 ,这就是 Underlay。
Overlay:Overlay 在云化场景比较常见。Overlay 下面是受控的 VPC 网络,当出现不属于 VPC 管辖范围中的 IP 或者 MAC,VPC 将不允许此 IP/MAC 穿越。出现这种情况时,我们都利用 Overlay 方式来做。
隔离方式:
隔离方式与多种户型相关(用户与用户之间的隔离方式),隔离方式分为 FLAT、VLAN、VXLAN 三种:
FLAT:纯扁平网络,无隔离;
VLAN:VLAN 机房中使用偏多,但实际上存在一个问题?就是它总的租户数量受限。众所周知,VLAN 具有数量限制。
VXLAN:VXLAN 是现下较为主流的一种隔离方式。因为它的规模性较好较大,且它基于 IP 穿越方式较好。
|技术特点|
典型的容器网络实现方案
容器网络可能时Kubernetes领域最为百花齐放的一个领域,依照IaaS层的配置、外部物理网络的设备、性能or灵活优先,可以有不同的实现:
Flannel,最为普遍的实现,提供多种网络backend实现,覆盖多种场景
Calico,采用BGP提供网络直连,功能丰富,对底层网络有要求
Canal(Flannel for network + Calico for Firewalling),嫁接型创新项目
Ciilium,基于eBPF和XDP的高性能Overlay网络方案
Kube-router,同时采用BGP提供网络直连,集成基于LVS的负载均衡能力
Pomana,才赢BGP or OSPF 提供网络直连能力的方案
WeaveNet,采用UDP封装实现L2 Overlay,支持用户态(慢,可加密)/内内核态(快,不能加密)两种实现
Flannel 方案
Flannel 方案是目前使用最为普遍的。如上图所示,可以看到一个典型的容器网方案。它首先要解决的是 container 的包如何到达 Host,这里采用的是加一个 Bridge 的方式。它的 backend 其实是独立的,也就是说这个包如何离开 Host,是采用哪种封装方式,还是不需要封装,都是可选择的。
现在来介绍三种主要的 backend:
一种是用户态的 udp,这种是最早期的实现;
然后是内核的 Vxlan,这两种都算是 overlay 的方案。Vxlan 的性能会比较好一点,但是它对内核的版本是有要求的,需要内核支持 Vxlan 的特性功能;
如果你的集群规模不够大,又处于同一个二层域,也可以选择采用 host-gw 的方式。这种方式的 backend 基本上是由一段广播路由规则来启动的,性能比较高。