Kubernetes 提供了两个功能,用户可以使用这两个功能来执行网络安全策略。一个允许用户执行网络策略的功能是 `NetworkPolicy` API,该 API 主要设计用于应用程序开发人员和命名空间租户通过创建命名空间范围的策略来保护其命名空间。
第二个功能是 `AdminNetworkPolicy`,它包含两个 API:`AdminNetworkPolicy` (ANP) API 和 `BaselineAdminNetworkPolicy` (BANP) API。ANP 和 BANP 专为集群和网络管理员设计,他们可以通过创建集群范围的策略来保护整个集群。集群管理员可以使用 ANP 来执行不可覆盖的策略,这些策略优先于 `NetworkPolicy` 对象。管理员可以使用 BANP 来设置和执行可选的集群范围网络策略规则,这些规则在必要时可被用户使用 `NetworkPolicy` 对象覆盖。当一起使用时,ANP、BANP 和网络策略可以实现管理员可以使用来保护其集群的完全多租户隔离。
OpenShift Dedicated 中的 OVN-Kubernetes CNI 使用访问控制列表 (ACL) 层来评估和应用这些网络策略。ACL 按从 1 层到 3 层的降序进行评估。
1 层评估 `AdminNetworkPolicy` (ANP) 对象。2 层评估 `NetworkPolicy` 对象。3 层评估 `BaselineAdminNetworkPolicy` (BANP) 对象。
首先评估 ANP。当匹配项是 ANP `allow` 或 `deny` 规则时,将跳过对集群中任何现有的 `NetworkPolicy` 和 `BaselineAdminNetworkPolicy` (BANP) 对象的评估。当匹配项是 ANP `pass` 规则时,评估将从 ACL 的 1 层移动到 2 层,其中评估 `NetworkPolicy` 策略。如果没有任何 `NetworkPolicy` 匹配流量,则评估将从 2 层 ACL 移动到 3 层 ACL,其中评估 BANP。
下表说明了集群范围的 `AdminNetworkPolicy` API 和命名空间范围的 `NetworkPolicy` API 之间的关键区别。
策略元素 | AdminNetworkPolicy | NetworkPolicy |
---|---|---|
适用用户 |
集群管理员或等效用户 |
命名空间所有者 |
范围 |
集群 |
命名空间 |
丢弃流量 |
支持使用显式 `Deny` 动作设置为规则。 |
通过在策略创建时隐式 `Deny` 隔离来支持。 |
委托流量 |
支持使用 `Pass` 动作设置为规则。 |
不适用 |
允许流量 |
支持使用显式 `Allow` 动作设置为规则。 |
所有规则的默认操作是允许。 |
策略内规则的优先级 |
取决于它们在 ANP 中出现的顺序。规则的位置越高,优先级越高。 |
规则是累加的 |
策略优先级 |
在 ANP 中,`priority` 字段设置评估顺序。优先级数字越低,策略优先级越高。 |
策略之间没有策略排序。 |
功能优先级 |
通过 1 层 ACL 首先进行评估,BANP 通过 3 层 ACL 最后进行评估。 |
在 ANP 之后和 BANP 之前强制执行,它们在 ACL 的 2 层中进行评估。 |
匹配 Pod 选择 |
可以跨命名空间应用不同的规则。 |
可以在单个命名空间中的 Pod 跨应用不同的规则。 |
集群出站流量 |
通过 |
通过 |
集群入站流量 |
不支持 |
不支持 |
完全限定域名 (FQDN) 对等体支持 |
不支持 |
不支持 |
命名空间选择器 |
支持使用 |
支持使用 |