从5.0版本开始(版本更迭时间和具体内容),Tungsten Fabric支持使用防火墙安全策略框架实现Kubernetes 1.9.2网络策略。虽然Kubernetes网络策略也可以使用TF中的其它安全对象(如安全组和TF网络策略)来实现,但TF防火墙安全策略对标签的支持,有助于简化和抽象Kubernetes的工作负载。
TF防火墙安全策略可以实现路由与安全策略的解耦,并提供多维度分段和策略可移植性,同时显著提升用户可见性和分析功能。
另外,TF防火墙安全策略使用标签来实现不同实体之间的多维度流量分段,并具有安全功能。标签是与部署中不同实体相关联的键值对。标签可以是预先定义的,也可以是自定义的。
Kubernetes网络策略是有关如何允许Kubernetes工作负载的组(以下简称为pod)与其它网络端点相互通信的规范。网络策略资源使用标签来选择pod,并定义规则,这些规则规定了允许哪些流量进入所选的pod。
Kubernetes网络策略特性
Kubernetes网络策略具有以下特性:
- 网络策略是特定于pod的,适用于一个pod或一组pod。如果指定的网络策略适用于一个pod,则到pod的流量由网络策略的规则决定。
- 如果网络策略没有应用到pod,那么pod就会接受来自所有来源的流量。
- 网络策略可以在ingress、egress或两个方向上为pod定义流量规则。如果没有明确指定方向,默认情况下,网络策略应用于ingress方向。
- 当网络策略应用于pod时,该策略必须有明确的规则来指定ingress和egress方向的允许流量的允许列表。所有不符合允许列表规则的流量都会被拒绝和丢弃。
- 可以在任何pod上应用多个网络策略。必须允许符合任何一个网络策略的流量通过。
- 网络策略作用于连接而不是单个数据包。例如,如果从pod A到pod B的流量被配置的策略所允许,那么从pod B到pod A的该连接的返回数据包也是被允许的,即使已制定的策略不允许从pod B发起到pod A的连接。
- Ingress策略。Ingress规则由源的身份和允许转发到pod的源的流量的protocol:port类型组成。
源身份可以是以下类型:
-
无类别域间路由(CIDR)块——如果源IP地址来自CIDR块,且流量符合protocol:port,那么流量将被转发到pod。
-
Kubernetes命名空间——命名空间选择器标识命名空间,其pod可以将定义的protocol:port流量发送到ingress pod。
-
Pod——Pod选择器标识网络策略所对应的命名空间中的pod,这些pod可以向ingress pod发送匹配的protocol:port流量。
-
Egress策略。该策略指定了一个CIDR允许列表,允许特定protocol:port类型的流量从网络策略所针对的pod出发。
目的身份可以是以下类型:
- CIDR块——如果目标IP地址来自CIDR块,且流量符合protocol:port,那么流量将被转发到目的地址。
- Kubernetes命名空间——命名空间选择器标识命名空间,其pod可以将定义的protocol:port流量发送到egress pod。
- Pod——Pod选择器标识网络策略所对应的命名空间中的pod,这些pod可以从egress
pod接收匹配的protocol:port流量。
将Kubernetes网络策略表示为TF防火墙安全策略
Kubernetes和Tungsten Fabric防火墙策略在各自指定网络策略的语义上是不同的。通过TF防火墙策略高效实现Kubernetes网络策略的关键在于,在这两个实体之间映射相应的配置结构。
这些结构的映射关系如表1所示。
表1:Kubernetes网络策略和TF防火墙策略映射表
注意:创建Tungsten Fabric防火墙策略结构的项目是容纳Kubernetes集群的项目。例如,如果Kubernetes集群是独立集群,则在全局范围内创建TF防火墙策略结构,如果Kubernetes集群是嵌套集群,则在项目范围内创建TF防火墙策略结构。
解决Kubernetes网络策略标签问题
在TF防火墙策略中,pod的表示方式与相应的Kubernetes网络策略中的表示方式完全相同。TF防火墙策略处理的是Tungsten Fabric术语中的label或tag。TF不会将标签扩展到IP地址。
例如,在默认的命名空间中,如果网络policy-podSelector指定:role=db,那么对应的防火墙规则指定pod为(role=db && namespace=default)。不对pod IP地址或其它做翻译。
如果同一个网络策略也有namespaceSelector为namespace=myproject,那么对应的防火墙规则将该命名空间表示为(namespace=myproject)。不做其它翻译,也不做其它规则表示"myproject"命名空间的pod。
同样,每个CIDR由一个规则来代表。实质上,Kubernetes网络策略被1:1翻译成TF防火墙策略。只有一个额外的防火墙规则为每个Kubernetes网络策略创建。该规则的目的是实现网络策略的隐性拒绝要求,没有其它规则产生。
TF防火墙策略命名公约
Tungsten Fabric防火墙安全策略和规则命名如下:
- 为Kubernetes网络策略创建的TF防火墙安全策略以如下格式命名:
< Namespace-name >-< Network Policy Name >
- 例如,命名空间"Hello"中的网络策略"world":
Hello-world
- 为Kubernetes网络策略创建的TF防火墙规则按以下格式命名: