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

两个Kubernetes Network Policy差异:是否均允许全源流量?

问题:两个Kubernetes网络策略是否等价?

以下两个Kubernetes Network Policy仅在spec.ingress.from.podSelector配置上存在差异,现对其行为存疑:

第一个网络策略(netpol1.yaml)

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: ingress-to-nptest-1
  namespace: default
spec:
  podSelector:
    matchLabels:
      run: np-test-1
  policyTypes:
    - Ingress
  ingress:
    - ports:
        - protocol: TCP
          port: 80

第二个网络策略(netpol2.yaml)

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: ingress-to-nptest-2
  namespace: default
spec:
  podSelector:
    matchLabels:
      run: np-test-1
  policyTypes:
    - Ingress
  ingress:
    - from:
      - podSelector: {}
      ports:
        - protocol: TCP
          port: 80

执行kubectl describe netpol后显示的行为描述不同:

第一个策略的描述输出

controlplane ~ ➜  k describe netpol ingress-to-nptest-1
Name:         ingress-to-nptest-1
Namespace:    default
Created on:   2023-03-16 07:53:04 -0400 EDT
Labels:       <none>
Annotations:  <none>
Spec:
  PodSelector:     run=np-test-1
  Allowing ingress traffic:
    To Port: 80/TCP
    From: <any> (traffic not restricted by source)
  Not affecting egress traffic
  Policy Types: Ingress

第二个策略的描述输出

controlplane ~ ➜  k describe netpol ingress-to-nptest-2
Name:         ingress-to-nptest-2
Namespace:    default
Created on:   2023-03-16 07:54:09 -0400 EDT
Labels:       <none>
Annotations:  <none>
Spec:
  PodSelector:     run=np-test-1
  Allowing ingress traffic:
    To Port: 80/TCP
    From:
      PodSelector: <none>
  Not affecting egress traffic
  Policy Types: Ingress

根据Kubernetes API文档,存在但为空的podSelector会选择所有Pod,但kubectl describe的输出描述不同,请问这两个策略是否均允许所有来源的流量,二者是否等价?


解答

两个策略并不等价,核心差异体现在对流量来源的范围限制上:

  • netpol1(无ingress.from配置):完全不限制流量来源,允许任何来源的流量访问目标Pod的80端口——包括集群内所有命名空间的Pod、集群外部客户端、Node节点发起的流量。kubectl describe显示的From: <any> (traffic not restricted by source)准确反映了这一点。
  • netpol2(配置空podSelector):空的podSelector: {}仅匹配当前命名空间(default)内的所有Pod,集群外部的流量、其他命名空间的Pod流量都会被拒绝。kubectl describe里的PodSelector: <none>是对空选择器的展示,对应匹配同命名空间下的全部Pod。

简单总结:netpol1是完全开放80端口,netpol2仅开放给default命名空间内的所有Pod,外部流量无法访问。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:17:35