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

如何允许/拒绝同集群内其他Namespace的HTTP请求?附场景示例

如何管控Kubernetes跨Namespace的Pod访问

嘿,这个问题其实是Kubernetes网络策略(NetworkPolicy)的典型应用场景——默认情况下K8s的网络是全开放的,Namespace只是做资源隔离,不会限制网络流量,所以你遇到跨Namespace能访问是正常的。下面我给你一步步实现你的两个需求:

1. 让ns1的Pod接受任意Namespace的请求

其实默认状态下ns1的Pod就允许所有来源的请求,但如果你的集群之前有过全局限制策略,或者你想明确声明这个规则,可以创建一个NetworkPolicy来兜底:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-all-ingress-ns1-app
  namespace: ns1
spec:
  # 匹配ns1里你的应用Pod(替换成实际的Pod标签)
  podSelector:
    matchLabels:
      app: my-deployment-app
  policyTypes:
  - Ingress
  ingress:
  # 空的from数组表示允许所有来源,包括其他Namespace、集群外流量
  - from: []

把这个yaml保存后用kubectl apply -f <文件名>创建,这样ns1里的目标Pod就会接受任何来源的请求了。

2. 让ns2的Pod拒绝所有来自其他Namespace的请求

这个需要创建一个只允许同Namespace内流量的NetworkPolicy,自动拒绝外部Namespace的访问:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-cross-namespace-ns2-app
  namespace: ns2
spec:
  # 匹配ns2里你的应用Pod(替换成实际的Pod标签)
  podSelector:
    matchLabels:
      app: my-deployment-app
  policyTypes:
  - Ingress
  ingress:
  # 只允许来自当前Namespace内的所有Pod访问
  - from:
    - podSelector: {}

同样用kubectl apply -f <文件名>创建,之后ns2的Pod就只能接受来自ns2内部的请求,其他Namespace的Pod再尝试访问就会被拒绝。

关键注意事项

  • 你的集群必须使用支持NetworkPolicy的网络插件,比如Calico、Cilium、Weave Net等。如果用的是默认的Flannel(无额外配置)或者kube-proxy单独部署,NetworkPolicy是不会生效的。
  • 一定要确保podSelector里的标签和你Deployment定义的Pod标签完全匹配,否则策略不会作用到目标Pod上。
  • 如果之后需要微调规则(比如允许某个特定Namespace访问ns2的Pod),可以在from里添加namespaceSelector来指定允许的Namespace,比如:
    from:
    - podSelector: {}
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: allowed-namespace
    

你可以在部署完策略后,分别在ns2的Pod里curl ns1的Service,以及在其他Namespace(比如新建一个ns3)的Pod里curl ns2的Service,验证是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:59:44