BaselineAdminNetworkPolicy
(BANP) 是一个集群范围的自定义资源定义 (CRD)。作为 OpenShift Container Platform 管理员,您可以使用 BANP 设置和强制执行可选的基线网络策略规则,如有需要,用户可以使用 NetworkPolicy
对象覆盖这些规则。BANP 的规则操作为 allow
或 deny
。
BaselineAdminNetworkPolicy
资源是一个集群单例对象,可以用作防护策略,以防传递的流量策略与集群中的任何 NetworkPolicy
对象都不匹配。BANP 也可以用作默认安全模型,提供防护措施,默认情况下阻止集群内流量,用户需要使用 NetworkPolicy
对象来允许已知的流量。创建 BANP 资源时,必须使用 default
作为名称。
-
一个 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.ingress 和 spec.egress 字段接受 Deny 和 Allow 值作为 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
字段值为 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 的默认行为。