在前面的专题中,我们梳理了容器网络安全的定义——NetworkPolicy,
容器网络安全的软件实现的一个实例——iptables,
容器网络安全的硬件实现的思路——微分段。
"微分段"的英文为micro segmentation,英语好的同学会发现,micro是macro的反义词。
在通常的定义中,macro segmentation——宏分段,指的是以CIDR(网段)进行分段,而micro segmentation指的就是CIDR内部再进行分段,而这种分段不一定是连续的IP地址,也可以是离散的IP地址。 如前面的例子,
在CIDR 10.0.0.0/20 (10.0.0.0 - 10.0.15.255)中,
10.0.10.113,10.0.10.115和10.0.13.201这三个IP地址属于微分段db,
而10.0.11.60,10.0.12.8和10.0.13.217这三个IP地址属于微分段frontend。
我们知道,微分段这种手段,实际上目的是实现不同的容器之间的互访控制。那么,能不能使用ACL来实现这种互访控制呢?
答案是:
如果有机关枪就行了,
还要导弹干嘛?
是的,ACL与微分段相比,就是机枪与导弹的区别!
以前面的frontend与db之间互访为例:
我们期望的是frontend与db之间的互访默认被放通,在这种情况下,由于frontend和db各有3个离散的IP地址,我们需要配置3x3的ACL矩阵:
并对交换机配置默认策略deny-all。
如果front和db各有100个IP地址,那么,我们需要配置100x100条离散的ACL。
在容器标签有3种、4种等情况,这会迅速耗尽交换机的ACL资源……
也就是说,使用ACL实现离散的IP地址之间的访问控制,其空间复杂度为m * n * n。其中,m为标签类型数量,n为每个标签的容器数量(假设各种容器的数量相等)。显然,这是无法接受的。
因此,我们需要另一种方案。
如果我们让交换机具有根据IP地址查询标签(微分段组ID)的能力,再根据源IP对应的标签和目的IP对应的标签,来查询标签之间访问矩阵中的策略,我们发现,这种算法的空间复杂度变成了 N m * m。其中,m为标签类型数量,而N为整个CIDR中的容器数量。在这种情况下,查询的空间复杂度是可以接受的,而时间复杂度方面,如果每次查询的时间复杂度为O(1),可想而知,这也是可以接受的。
用图来表示查询流程:
那么,如何让交换机芯片实现这种快速的查询呢?
让我们回忆一下,交换机与绿帽的故事——
我们知道,交换机的硬件表项既可以实现最长匹配,又可以实现精确匹配的功能。
这样一来,无论是离散的IP地址,还是可以聚合的网段,我们都可以把它做为查询键值,放在TCAM中——
再让我们复习一下新一代交换机芯片的工作过程,以Broadcom Trident-3 (以下简称TD3)为例:
TD3芯片是可编程的,内部有5级流水线,每级流水线可以完成查表的动作。工程师们可以通过编程,让其中的3级流水线分别承担以下工作:
- 根据源IP,在TCAM中查找其Group ID;
- 根据目的IP,在TCAM中查找其Group ID;
- 根据源Group ID和目的Group ID查找相关策略值;
这样,就能够利用TCAM的O(1)查找机制,快速根据离散的IP地址查询相关的策略,实现微分段。
这样,就实现了让交换机既可以按照连续的IP地址查找策略,也可以按照离散的IP地址查找策略,正所谓“知微,知彰”。
今天留一个问题:
交换机的TCAM资源是有限的, 一般在500K以内。我们刚才提到,实现微分段需要在TCAM内查找,这会不会大量消耗交换机的TCAM资源,影响其他业务呢?
请看下回分解。