×

BaselineAdminNetworkPolicy

BaselineAdminNetworkPolicy (BANP) 是一个集群范围的自定义资源定义 (CRD)。作为 Red Hat OpenShift Service on AWS 管理员,您可以使用 BANP 设置和强制执行可选的基线网络策略规则,这些规则如果需要,可以使用 NetworkPolicy 对象被用户覆盖。BANP 的规则操作为 允许拒绝

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

BANP 允许管理员指定

  • 一个主体,包含一组命名空间或命名空间。

  • 应用于所有传入流量到主体 的一系列入口规则。

  • 应用于所有传出流量从主体 的一系列出口规则。

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 同时具有入口和出口规则。spec.ingressspec.egress 字段的 BANP 规则接受 DenyAllow 值作为 action 字段的值。
4 ingress.name 指定名称。
5 指定要从中选择 Pod 以应用 BANP 资源的命名空间。
6 指定要应用 BANP 资源的 Pod 的 podSelector.matchLabels 名称。

BaselineAdminNetworkPolicy 拒绝示例

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

防护拒绝规则的示例 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 的默认行为。