×

BaselineAdminNetworkPolicy

BaselineAdminNetworkPolicy (BANP) 是一个集群范围的自定义资源定义 (CRD)。作为 OpenShift Container Platform 管理员,您可以使用 BANP 设置和强制执行可选的基线网络策略规则,如有需要,用户可以使用 NetworkPolicy 对象覆盖这些规则。BANP 的规则操作为 allowdeny

BaselineAdminNetworkPolicy 资源是一个集群单例对象,可以用作防护策略,以防传递的流量策略与集群中的任何 NetworkPolicy 对象都不匹配。BANP 也可以用作默认安全模型,提供防护措施,默认情况下阻止集群内流量,用户需要使用 NetworkPolicy 对象来允许已知的流量。创建 BANP 资源时,必须使用 default 作为名称。

BANP 允许管理员指定:

  • 一个 subject,它由一组命名空间或命名空间组成。

  • 应用于所有进入 subject 的入站流量的入站规则列表。

  • 应用于所有从 subject 发出的出站流量的出站规则列表。

BaselineAdminNetworkPolicy 示例

BANP 的 YAML 文件示例
apiVersion: policy.networking.k8s.io/v1alpha1
kind: BaselineAdminNetworkPolicy
metadata:
  name: default (1)
spec:
  subject:
    namespaces:
      matchLabels:
          kubernetes.io/metadata.name: example.name (2)
  ingress: (3)
  - name: "deny-all-ingress-from-tenant-1" (4)
    action: "Deny"
    from:
    - pods:
        namespaceSelector:
          matchLabels:
            custom-banp: tenant-1 (5)
        podSelector:
          matchLabels:
            custom-banp: tenant-1 (6)
  egress:
  - name: "allow-all-egress-to-tenant-1"
    action: "Allow"
    to:
    - pods:
        namespaceSelector:
          matchLabels:
            custom-banp: tenant-1
        podSelector:
          matchLabels:
            custom-banp: tenant-1
1 策略名称必须为 default,因为 BANP 是单例对象。
2 指定要应用 ANP 的命名空间。
3 BANP 同时具有入站和出站规则。BANP 规则对于 spec.ingressspec.egress 字段接受 DenyAllow 值作为 action 字段的值。
4 ingress.name 指定名称。
5 指定要从中选择 Pod 以应用 BANP 资源的命名空间。
6 指定要应用 BANP 资源的 Pod 的 podSelector.matchLabels 名称。

BaselineAdminNetworkPolicy 拒绝示例

以下 BANP 单例确保管理员已为进入安全级别为 internal 的租户的所有入站监控流量设置了默认拒绝策略。与“AdminNetworkPolicy 通过示例”结合使用时,此拒绝策略充当所有由 ANP pass-monitoring 策略传递的入站流量的防护策略。

防护 Deny 规则的 YAML 文件示例
apiVersion: policy.networking.k8s.io/v1alpha1
kind: BaselineAdminNetworkPolicy
metadata:
  name: default
spec:
  subject:
    namespaces:
      matchLabels:
        security: internal
  ingress:
  - name: "deny-ingress-from-monitoring"
    action: "Deny"
    from:
    - namespaces:
        matchLabels:
          kubernetes.io/metadata.name: monitoring
# ...

您可以将 action 字段值为 PassAdminNetworkPolicy 资源与 BaselineAdminNetworkPolicy 资源结合使用来创建多租户策略。此多租户策略允许一个租户在其应用程序上收集监控数据,同时又不从第二个租户收集数据。

作为管理员,如果您同时应用“AdminNetworkPolicy Pass 操作示例”和“BaselineAdminNetwork Policy Deny 示例”,则租户可以选择创建将在 BANP 之前评估的 NetworkPolicy 资源。

例如,租户 1 可以设置以下 NetworkPolicy 资源来监控入站流量:

NetworkPolicy 示例
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-monitoring
  namespace: tenant 1
spec:
  podSelector:
  policyTypes:
    - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: monitoring
# ...

在这种情况下,租户 1 的策略将在“AdminNetworkPolicy Pass 操作示例”之后和“BaselineAdminNetwork Policy Deny 示例”(拒绝所有进入安全级别为 internal 的租户的所有入站监控流量)之前进行评估。有了租户 1 的 NetworkPolicy 对象,他们将能够收集其应用程序的数据。但是,租户 2 没有任何 NetworkPolicy 对象,将无法收集数据。作为管理员,您默认情况下没有监控内部租户,而是创建了一个 BANP,允许租户使用 NetworkPolicy 对象来覆盖 BANP 的默认行为。