两个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
相关产品推荐
相关产品推荐

