BaselineAdminNetworkPolicy (BANP) 是一个集群范围的自定义资源定义 (CRD)。作为 Red Hat OpenShift Service on AWS 管理员,您可以使用 BANP 设置和强制执行可选的基线网络策略规则,这些规则如果需要,可以使用 NetworkPolicy 对象被用户覆盖。BANP 的规则操作为 允许 或 拒绝。
BaselineAdminNetworkPolicy 资源是一个集群单例对象,可以在传递的流量策略与集群中任何 NetworkPolicy 对象不匹配的情况下用作防护策略。BANP 也可以用作默认安全模型,提供防护措施,默认情况下阻止集群内流量,用户需要使用 NetworkPolicy 对象来允许已知流量。创建 BANP 资源时,必须使用 default 作为名称。
-
一个主体,包含一组命名空间或命名空间。
-
应用于所有传入流量到主体 的一系列入口规则。
-
应用于所有传出流量从主体 的一系列出口规则。
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.ingress 和 spec.egress 字段的 BANP 规则接受 Deny 和 Allow 值作为 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 字段值为 Pass 的 AdminNetworkPolicy 资源与 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 的默认行为。