2.6. AdminNetworkPolicy 的最佳实践
本节为 AdminNetworkPolicy
和 BaselineAdminNetworkPolicy
资源提供最佳实践。
2.6.1. 设计 AdminNetworkPolicy 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在构建 AdminNetworkPolicy
(ANP) 资源时,您可能会在创建策略时考虑以下内容:
- 您可以创建具有相同优先级的 ANP。如果您使用同一优先级创建两个 ANP,请确保它们不会将重叠规则应用到同一流量。每个值仅有一个规则会被应用,当相同的优先级值有多个规则时,不会保证会应用哪个规则。因为当创建了重叠的 ANP 时,无法保证哪些策略会被优先使用,所以请使用不同的优先级来设置 ANPs。
- 管理员必须创建应用于用户命名空间的 ANP,而不是系统命名空间。
重要
不支持将 ANP 和 BaselineAdminNetworkPolicy
(BANP) 应用到系统命名空间(default
, kube-system
, 任何以 openshift-
开头的命名空间),这样做会使集群无响应并处于无法正常工作的状态。
-
因为支持的优先级范围是
0-100
,所以您可以将您的 ANP 设置为使用一个中间范围,如30-70
。这样就可以为这个范围外保留一些更高和更低的优先级占位符。即使在这个中间范围内,您可能也会希望保留一些空缺,以便随着基础架构的变化,您可以根据需要以正确的优先级插入新的 ANP。如果您打包了 ANP,则可能需要重新创建它们,以适应将来的任何更改。 -
当使用
0.0.0.0/0
或::/0
创建一个强的Deny
策略时,请确保基本流量具有较高优先级Allow
或Pass
规则。 -
当您需要确保一个连接无论在什么情况下都被允许时,使用
Allow
作为您的action
字段。ANP 中的Allow
规则代表连接始终被允许,NetworkPolicy
将被忽略。 -
使用
Pass
作为您的action
字段,将允许或拒绝连接策略委托给NetworkPolicy
层。 - 确保多个规则中的选择器不会重叠,因此同一 IP 不会出现在多个策略中,这可能导致性能和扩展限制。
-
避免将
namedPorts
与PortNumber
和PortRange
结合使用,因为这样会创建 6 个 ACL,并导致集群中的效率降低。
2.6.1.1. 使用 BaselineAdminNetworkPolicy 的注意事项 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
您只能在集群中定义单个
BaselineAdminNetworkPolicy
(BANP) 资源。以下支持用于 BANP,管理员可能在设计其 BANP 中考虑:-
您可以在用户命名空间中为 cluster-local ingress 设置默认的拒绝策略。此 BANP 将强制开发人员添加
NetworkPolicy
对象来允许他们允许的入口流量,如果他们没有为 ingress 添加网络策略,则会被拒绝。 -
您可以在用户命名空间中为 cluster-local egress 设置默认拒绝策略。此 BANP 将强制开发人员添加
NetworkPolicy
对象来允许他们允许的入口流量,如果他们没有为 ingress 添加网络策略,则会被拒绝。 -
您可以为出口设置到集群内 DNS 服务的默认允许策略。此类 BANP 可确保命名空间的用户不必将允许出口
NetworkPolicy
设置为集群内 DNS 服务。 -
您可以设置一个出口策略,允许内部出口流量到所有容器集,但拒绝访问所有外部端点(例如
0.0.0.0/0
和::/0
)。此 BANP 允许用户工作负载向其他集群端点发送流量,但默认不发送到外部端点。然后,开发人员可以使用NetworkPolicy
来允许其应用程序将流量发送到一组明确的外部服务。
-
您可以在用户命名空间中为 cluster-local ingress 设置默认的拒绝策略。此 BANP 将强制开发人员添加
-
确保对 BANP 设置了范围,以便它只拒绝到用户命名空间的流量,而不是系统命名空间。这是因为系统命名空间没有
NetworkPolicy
对象来覆盖 BANP。
2.6.1.2. AdminNetworkPolicy 和 NetworkPolicy 之间的不同 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
-
与
NetworkPolicy
对象不同,您必须使用显式标签在 ANP 和 BANP 中引用工作负载,而不是使用空 ({}
) 捕获所有选择器以避免意外选择流量。
重要
应用到基础架构命名空间的空命名空间选择器可能会导致集群无响应且处于无法正常工作状态。
-
在 ANP 的 API 语义中,您必须在创建策略时显式定义允许或拒绝规则,这与具有隐式 deny 的
NetworkPolicy
对象不同。 -
与
NetworkPolicy
对象不同,AdminNetworkPolicy
对象入口规则仅限于集群内 Pod 和命名空间,因此您无法不需要,从主机网络为 ingress 设置规则。