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

配置Network Policy阻止跨命名空间流量未生效,请求排查

Network Policy配置错误排查:无法阻止跨命名空间流量

问题场景

尝试通过Network Policy阻止prod命名空间接收来自其他命名空间的流量,但qa命名空间的curl-pod仍能成功访问prod内的web pod。

当前环境信息:

k get namespaces
prod              Active   39m
qa                Active   39m

k get networkpolicies.networking.k8s.io -n prod
NAME                         POD-SELECTOR   AGE
block-other-namespace        <none>         25m

k get -o wide pods --all-namespaces
prod          curl-pod    1/1     Running   0          47m   10.244.2.2     minikube-m03
prod          web         1/1     Running   0          47m   10.244.1.3     minikube-m02
qa            curl-pod    1/1     Running   0          47m   10.244.1.2     minikube-m02

当前使用的Network Policy配置:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  namespace: prod                          
  name: block-other-namespace
spec:
  podSelector: {}                           
  ingress:
    - from:
        - podSelector: {}

测试结果(qa命名空间仍可访问prod):

kubectl -n qa exec curl-pod -- curl -I http://10.244.1.3
HTTP/1.1 200 OK
Server: nginx/1.23.2
Date: Sun, 13 Nov 2022 08:34:35 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Wed, 19 Oct 2022 07:56:21 GMT
Connection: keep-alive
ETag: "634fada5-267"
Accept-Ranges: bytes

配置错误分析

当前Network Policy的问题在于:

  • ingress.from.podSelector: {} 仅表示允许当前命名空间内所有pod的入站流量,但并未对其他命名空间的流量做限制。
  • Kubernetes Network Policy采用白名单机制,默认策略是允许所有流量。仅添加内部pod的允许规则,不会自动拒绝外部命名空间的流量——必须明确限定来源范围,才能实现"阻止其他命名空间"的效果。

正确配置方案

方案1:仅允许当前命名空间的pod访问

通过namespaceSelector明确限定流量来源为prod命名空间:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  namespace: prod                          
  name: block-other-namespace
spec:
  podSelector: {}                           
  ingress:
    - from:
        - podSelector: {}
          namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: prod

方案2:直接拒绝所有外部命名空间流量

若无需区分内部pod,可直接限定仅接收来自prod命名空间的流量:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  namespace: prod
  name: block-other-namespace
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: prod

注意:需确保集群已部署支持Network Policy的网络插件(如Calico、Cilium),默认kube-proxy不提供Network Policy enforcement能力。

验证配置

应用修正后的配置:

kubectl apply -f corrected-networkpolicy.yaml -n prod

再次从qa命名空间测试访问,应返回连接超时或拒绝错误,说明规则生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:25:25