Kubernetes 提供两种功能供用户使用以强制执行网络安全。一种允许用户强制执行网络策略的功能是NetworkPolicy
API,该 API 主要设计用于应用程序开发人员和命名空间租户通过创建命名空间范围的策略来保护其命名空间。
第二个功能是AdminNetworkPolicy
,它包含两个 API:AdminNetworkPolicy
(ANP) API 和BaselineAdminNetworkPolicy
(BANP) API。ANP 和 BANP 专为集群和网络管理员设计,他们可以通过创建集群范围的策略来保护整个集群。集群管理员可以使用 ANP 来强制执行不可覆盖的策略,这些策略优先于NetworkPolicy
对象。管理员可以使用 BANP 来设置和强制执行可选的集群范围网络策略规则,这些规则在必要时可被用户使用NetworkPolicy
对象覆盖。当一起使用时,ANP、BANP 和网络策略可以实现管理员可用于保护其集群的完全多租户隔离。
Red Hat OpenShift Service on AWS 中的 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 |
---|---|---|
适用用户 |
集群管理员或同等人员 |
命名空间所有者 |
范围 |
集群 |
命名空间 |
丢弃流量 |
支持使用显式 |
通过在策略创建时隐式 |
委托流量 |
支持使用 |
不适用 |
允许流量 |
支持使用显式 |
所有规则的默认操作都是允许。 |
策略内规则优先级 |
取决于它们在 ANP 中出现的顺序。规则的位置越高,优先级越高。 |
规则是累加的 |
策略优先级 |
在 ANP 中, |
策略之间没有策略排序。 |
功能优先级 |
通过第 1 层 ACL 首先评估,BANP 通过第 3 层 ACL 最后评估。 |
在 ANP 之后和 BANP 之前强制执行,它们在 ACL 的第 2 层中进行评估。 |
匹配 Pod 选择 |
可以跨命名空间应用不同的规则。 |
可以在单个命名空间中的 Pod 之间应用不同的规则。 |
集群出口流量 |
通过 |
通过 |
集群入口流量 |
不支持 |
不支持 |
完全限定域名 (FQDN) 对等支持 |
不支持 |
不支持 |
命名空间选择器 |
支持使用 |
支持使用 |