You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Kubernetes Network Policies实现命名空间间一对一Pod流量管控?

实现跨命名空间流量限制的Kubernetes Network Policy方案

前置准备:给Pod打标签

先给两个命名空间的Pod打上对应标签,区分允许跨命名空间访问的目标Pod和其他受限Pod:

  • 在namespace1中:
    • 给允许被namespace2访问的目标Pod打标签:kubectl label pods <目标Pod名称> pod-type=allowed-cross-ns-target -n namespace1
    • 给namespace1中其余所有Pod打标签:kubectl label pods -l '!pod-type=allowed-cross-ns-target' pod-type=restricted-cross-ns -n namespace1
  • 在namespace2中:
    • 给允许被namespace1访问的目标Pod打标签:kubectl label pods <目标Pod名称> pod-type=allowed-cross-ns-target -n namespace2
    • 给namespace2中其余所有Pod打标签:kubectl label pods -l '!pod-type=allowed-cross-ns-target' pod-type=restricted-cross-ns -n namespace2

步骤1:限制namespace1到namespace2的流量仅能访问目标Pod

在namespace2中创建Network Policy,拒绝来自namespace1的所有流量访问受限Pod(非目标Pod):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-ns1-traffic-to-ns2-restricted-pods
  namespace: namespace2
spec:
  podSelector:
    matchLabels:
      pod-type: restricted-cross-ns
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: namespace1
    action: Deny

步骤2:限制namespace2到namespace1的流量仅能访问目标Pod

在namespace1中创建Network Policy,拒绝来自namespace2的所有流量访问受限Pod(非目标Pod):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: restrict-ns2-traffic-to-ns1-restricted-pods
  namespace: namespace1
spec:
  podSelector:
    matchLabels:
      pod-type: restricted-cross-ns
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: namespace2
    action: Deny

低版本Kubernetes兼容方案(低于1.29)

如果你的Kubernetes版本不支持action: Deny语法,需要改用默认拒绝+允许目标Pod的组合策略:

在namespace2中配置

  1. 默认拒绝所有Pod接收来自namespace1的流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ns1-traffic
  namespace: namespace2
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: namespace1
    action: Deny
  1. 允许目标Pod接收来自namespace1的流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-ns1-traffic-to-target-pod
  namespace: namespace2
spec:
  podSelector:
    matchLabels:
      pod-type: allowed-cross-ns-target
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: namespace1

在namespace1中配置

  1. 默认拒绝所有Pod接收来自namespace2的流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ns2-traffic
  namespace: namespace1
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: namespace2
    action: Deny
  1. 允许目标Pod接收来自namespace2的流量:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-ns2-traffic-to-target-pod
  namespace: namespace1
spec:
  podSelector:
    matchLabels:
      pod-type: allowed-cross-ns-target
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: namespace2

方案说明

  • 上述策略仅针对来自对方命名空间的流量做限制,其他命名空间的进出流量不受影响(无匹配规则时,保持Kubernetes默认的全允许状态)。
  • 目标Pod未被受限标签匹配,因此可以正常接收来自对方命名空间的流量。

内容的提问来源于stack exchange,提问作者Win32Sector

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 07:55:34