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

Kubernetes NetworkPolicy未生效求助:跨Namespace访问未被阻止

问题分析与解决

你的default-deny-ingress网络策略未生效,核心原因大概率是策略的命名空间匹配错误,或者Calico组件未正常运行,以下是具体排查和解决步骤:

1. 确认网络策略的部署命名空间

你创建的默认拒绝Ingress策略需要作用在default命名空间(因为要限制该命名空间下的web Pod),执行以下命令检查策略是否存在于default命名空间:

kubectl get networkpolicy default-deny-ingress -n default

如果返回NotFound,说明策略被部署到了错误的命名空间(比如当前上下文是qa),重新在default命名空间部署策略:

kubectl apply -f your-networkpolicy-file.yaml -n default

2. 验证Calico组件运行状态

Calico作为CNI插件,必须确保所有相关Pod正常运行才能生效网络策略:

# 检查calico-node节点组件
kubectl get pods -n kube-system -l k8s-app=calico-node
# 检查calico控制器组件
kubectl get pods -n kube-system -l k8s-app=calico-kube-controllers

所有Pod的状态应为Running,如果有异常,查看日志排查问题:

kubectl logs -n kube-system -l k8s-app=calico-node

3. 确认流量匹配逻辑

你的策略定义podSelector: {}会匹配当前命名空间下所有Pod,且未配置任何Ingress允许规则,因此default命名空间的web Pod应该拒绝所有外部(包括qa命名空间)的Ingress流量。测试时确保你是直接访问web Pod的IP,而非Service的ClusterIP(如果有创建Service的话,Service的流量规则可能需要额外配置)。

4. 补充:如果需要允许特定流量

如果之后需要允许qa命名空间的Pod访问web Pod,可以添加如下允许策略(部署在default命名空间):

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-qa-to-web
spec:
  podSelector:
    matchLabels:
      # 给web Pod添加标签后匹配,比如app: web
      app: web
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          # 给qa命名空间添加标签后匹配,比如name: qa
          name: qa

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:11:23