2.4. AdminNetworkPolicy 的出口节点和网络对等点
本节介绍 节点 和网络 对等点。管理员可以使用本节中的示例来设计 AdminNetworkPolicy 和 BaselineAdminNetworkPolicy,以控制其集群中的北向流量。
除了支持 east-west 流量控制外,ANP 和 BANP 还允许管理员控制其北向流量,使集群或流量离开集群或流量到集群中的其他节点。最终用户可以执行以下操作:
-
使用
节点出口对等点实现对集群节点的出口流量控制 -
使用
节点或网络出口对等对 Kubernetes API 服务器实施出口流量控制 -
使用
网络对等点对集群外的外部目的地实施出口流量控制
对于 ANP 和 BANP,只能为出口规则指定节点和网络对等点。
2.4.1.1. 使用节点 peer 控制到集群节点的出口流量 复制链接链接已复制到粘贴板!
使用 节点 对等管理员可以控制从 pod 到集群中节点的出口流量。这样做的好处是,您不必在向集群添加或删除节点时更改策略。
在以下示例中,通过使用节点选择器,允许任何带有restricted, confidential, 或 internal 级别安全的命名空间发送的、端口 6443 上的到 Kubernetes API 服务器的出口流量。它还拒绝来自带有 restricted, confidential, or internal 安全级别的任何命名空间的、到您的集群中的所有 worker 节点的流量。
例 2.8. 使用 nodes 对等的 ANP Allow egress 示例
apiVersion: policy.networking.k8s.io/v1alpha1
kind: AdminNetworkPolicy
metadata:
name: egress-security-allow
spec:
egress:
- action: Deny
to:
- nodes:
matchExpressions:
- key: node-role.kubernetes.io/worker
operator: Exists
- action: Allow
name: allow-to-kubernetes-api-server-and-engr-dept-pods
ports:
- portNumber:
port: 6443
protocol: TCP
to:
- nodes:
matchExpressions:
- key: node-role.kubernetes.io/control-plane
operator: Exists
- pods:
namespaceSelector:
matchLabels:
dept: engr
podSelector: {}
priority: 55
subject:
namespaces:
matchExpressions:
- key: security
operator: In
values:
- restricted
- confidential
- internal
2.4.1.2. 使用网络对等控制到外部目的地的出口流量 复制链接链接已复制到粘贴板!
集群管理员可以使用网络对等中的 CIDR 范围,并应用一个策略来控制离开 pod 的出口流量,并进入通过 network 字段指定的 CIDR 范围内配置的 IP 地址的目标。
以下示例使用网络对等,并组合了 ANP 和 BANP 策略来限制出口流量。
请谨慎使用 namespace 字段中的空选择器({})。使用空选择器时,它还选择 OpenShift 命名空间。
如果您在 ANP 或 BANP Deny 规则中使用 0.0.0.0/0 的值,您必须在将 Deny 设置为 0.0.0.0/0 前将更高的优先级 ANP Allow 规则设置为所需的目的地。
例 2.9. 使用网络对等点的 ANP 和 BANP 示例
apiVersion: policy.networking.k8s.io/v1alpha1
kind: AdminNetworkPolicy
metadata:
name: network-as-egress-peer
spec:
priority: 70
subject:
namespaces: {} # Use the empty selector with caution because it also selects OpenShift namespaces as well.
egress:
- name: "deny-egress-to-external-dns-servers"
action: "Deny"
to:
- networks:
- 8.8.8.8/32
- 8.8.4.4/32
- 208.67.222.222/32
ports:
- portNumber:
protocol: UDP
port: 53
- name: "allow-all-egress-to-intranet"
action: "Allow"
to:
- networks:
- 89.246.180.0/22
- 60.45.72.0/22
- name: "allow-all-intra-cluster-traffic"
action: "Allow"
to:
- namespaces: {} # Use the empty selector with caution because it also selects OpenShift namespaces as well.
- name: "pass-all-egress-to-internet"
action: "Pass"
to:
- networks:
- 0.0.0.0/0
---
apiVersion: policy.networking.k8s.io/v1alpha1
kind: BaselineAdminNetworkPolicy
metadata:
name: default
spec:
subject:
namespaces: {} # Use the empty selector with caution because it also selects OpenShift namespaces as well.
egress:
- name: "deny-all-egress-to-internet"
action: "Deny"
to:
- networks:
- 0.0.0.0/0
---
使用网络对等来整合 network-as-egress-peer ANP 和 默认的 BANP 来强制以下 egress 策略:
- 所有 pod 都无法通过列出的 IP 地址与外部 DNS 服务器进行通信。
- 所有 pod 都可以与公司的其他内部网通信。
- 所有 pod 都可以与其他 pod、节点和服务通信。
-
所有 pod 都无法与互联网通信。将最后一个 ANP
Pass规则与强大的 BANPDeny规则合并会创建一个保护策略来保护集群中的流量。
2.4.1.3. 一起使用节点对等和网络对等 复制链接链接已复制到粘贴板!
集群管理员可以将节点和网络对等组合到 ANP 和 BANP 策略中。
例 2.10. 节点和网络对等示例
apiVersion: policy.networking.k8s.io/v1alpha1
kind: AdminNetworkPolicy
metadata:
name: egress-peer-1
spec:
egress:
- action: "Allow"
name: "allow-egress"
to:
- nodes:
matchExpressions:
- key: worker-group
operator: In
values:
- workloads # Egress traffic from nodes with label worker-group: workloads is allowed.
- networks:
- 104.154.164.170/32
- pods:
namespaceSelector:
matchLabels:
apps: external-apps
podSelector:
matchLabels:
app: web # This rule in the policy allows the traffic directed to pods labeled apps: web in projects with apps: external-apps to leave the cluster.
- action: "Deny"
name: "deny-egress"
to:
- nodes:
matchExpressions:
- key: worker-group
operator: In
values:
- infra # Egress traffic from nodes with label worker-group: infra is denied.
- networks:
- 104.154.164.160/32 # Egress traffic to this IP address from cluster is denied.
- pods:
namespaceSelector:
matchLabels:
apps: internal-apps
podSelector: {}
- action: "Pass"
name: "pass-egress"
to:
- nodes:
matchExpressions:
- key: node-role.kubernetes.io/worker
operator: Exists # All other egress traffic is passed to NetworkPolicy or BANP for evaluation.
priority: 30
subject:
namespaces:
matchLabels:
apps: all-apps