×

本节提供了 `AdminNetworkPolicy` 和 `BaselineAdminNetworkPolicy` 资源的最佳实践。

AdminNetworkPolicy 的设计

在构建 `AdminNetworkPolicy` (ANP) 资源时,创建策略时可以考虑以下几点

  • 您可以创建具有相同优先级的 ANP。如果您确实创建了两个具有相同优先级的 ANP,请确保它们不会对相同的流量应用重叠规则。每个值仅应用一条规则,并且当存在多个相同优先级值时,无法保证应用哪条规则。由于无法保证在创建重叠 ANP 时哪个策略优先,因此请设置不同优先级的 ANP,以便明确优先级。

  • 管理员必须创建应用于用户命名空间而非系统命名空间的 ANP。

将ANP和BaselineAdminNetworkPolicy (BANP)应用于系统命名空间(defaultkube-system、任何名称以openshift-开头的命名空间等)不受支持,这可能导致您的集群无响应并处于非功能状态。

  • 由于支持的优先级范围是0-100,因此您可能需要将ANP设计为使用中间范围,例如30-70。这样会在前后留下一些优先级的占位符。即使在中间范围内,您也可能需要留出空隙,以便随着基础设施需求的不断发展,能够在正确的优先级级别插入新的ANP。如果您将ANP紧密打包,则可能需要重新创建所有ANP以适应未来的任何更改。

  • 当使用0.0.0.0/0::/0创建强Deny策略时,请确保您具有更高优先级的AllowPass规则来处理重要流量。

  • 当您希望确保无论如何都允许连接时,请使用Allow作为您的action字段。ANP中的Allow规则意味着连接将始终被允许,并且将忽略NetworkPolicy

  • 使用Pass作为您的action字段,将允许或拒绝连接的策略决策委托给NetworkPolicy层。

  • 确保多个规则中的选择器不会重叠,以免相同的IP出现在多个策略中,这可能会导致性能和规模限制。

  • 避免将namedPortsPortNumberPortRange一起使用,因为这会创建6个ACL并导致集群效率低下。

使用BaselineAdminNetworkPolicy的注意事项

  • 您只能在一个集群中定义一个BaselineAdminNetworkPolicy (BANP) 资源。以下是管理员在设计BANP时可能考虑的BANP支持用途

    • 您可以为用户命名空间中的集群本地入口设置默认拒绝策略。此BANP将强制开发人员添加NetworkPolicy对象以允许他们想要允许的入口流量,如果他们没有为入口添加网络策略,则将被拒绝。

    • 您可以为用户命名空间中的集群本地出口设置默认拒绝策略。此BANP将强制开发人员添加NetworkPolicy对象以允许他们想要允许的出口流量,如果他们没有添加网络策略,则将被拒绝。

    • 您可以为出口到集群内DNS服务的流量设置默认允许策略。此BANP确保命名空间用户无需为集群内DNS服务设置允许出口的NetworkPolicy

    • 您可以设置一个出口策略,允许内部出口流量到所有Pod,但拒绝访问所有外部端点(即0.0.0.0/0::/0)。此BANP允许用户工作负载默认情况下向其他集群内端点发送流量,但不向外部端点发送流量。然后,开发人员可以使用NetworkPolicy来允许其应用程序向一组明确的外部服务发送流量。

  • 确保您的BANP范围仅限于拒绝用户命名空间的流量,而不是系统命名空间的流量。这是因为系统命名空间没有NetworkPolicy对象来覆盖您的BANP。

AdminNetworkPolicy和NetworkPolicy之间需要考虑的差异

  • NetworkPolicy对象不同,您必须使用显式标签在ANP和BANP中引用您的工作负载,而不是使用空({})通配符选择器来避免意外的流量选择。

应用于基础设施命名空间的空命名空间选择器可能会使您的集群无响应并处于非功能状态。

  • 在ANP的API语义中,您必须在创建策略时显式定义允许或拒绝规则,这与具有隐式拒绝的NetworkPolicy对象不同。

  • NetworkPolicy对象不同,AdminNetworkPolicy对象的入口规则仅限于集群内Pod和命名空间,因此您不能也不需要为主机网络的入口设置规则。