容器网络硬核技术内幕 (25) 知微知彰,知柔知刚 (中)

2022-07-29 20:27:08 浏览数 (1)

在前面的专题中,我们梳理了容器网络安全的定义——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级流水线分别承担以下工作:

  1. 根据源IP,在TCAM中查找其Group ID;
  2. 根据目的IP,在TCAM中查找其Group ID;
  3. 根据源Group ID和目的Group ID查找相关策略值;

这样,就能够利用TCAM的O(1)查找机制,快速根据离散的IP地址查询相关的策略,实现微分段。

这样,就实现了让交换机既可以按照连续的IP地址查找策略,也可以按照离散的IP地址查找策略,正所谓“知微,知彰”。

今天留一个问题:

交换机的TCAM资源是有限的, 一般在500K以内。我们刚才提到,实现微分段需要在TCAM内查找,这会不会大量消耗交换机的TCAM资源,影响其他业务呢?

请看下回分解。

0 人点赞