以下两种网络策略有什么区别?它们之间只有spec.ingress.from.podSelector
的区别。
第一个网络策略:
controlplane ~ ➜ cat 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
第二个网络策略:
controlplane ~ ➜ cat 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
在第二种情况下,它允许来自与“PodSelector:none”匹配的pod的流量:
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参考表明这相当于第一个网络策略:
播客选择器:这是选择Pod的标签选择器。此字段遵循标准标签选择器语义;如果存在但为空,则选择所有pod。
在这两种情况下,来自每个源的流量都被允许,这对吗?两种网络策略是否等效?
2条答案
按热度按时间cnjp1d6j1#
如果我是对的,我能看到的唯一区别是这一部分:
并不排除任何东西。所以理论上它们是一样的。
pexxcrt22#
经过更多的研究,我想我自己找到了答案。Kubernetes API参考资料指出:
spec.ingress.from:如果此字段为空或缺失,则此规则将匹配所有源(通信不受源限制)。
它还在另一页上指出:
spec.ingress.from.podSelector:如果存在但为空,则选择所有pod。
spec.ingress.from.namespaceSelector:如果存在但为空,则它选择所有名称空间。
由于我们也可以指定
spec.ingress.from.namespaceSelector
,因此可以将spec.ingress.from.podSelector
设置为{}
,而将spec.ingress.from.namespaceSelector
设置为某个名称空间,这将选择某个名称空间中的所有pod。另一方面,如果我们将spec.ingress.from
留空,则将选择所有名称空间中的所有pod。由此可见,两个网络策略是相同的,但前提是
spec.ingress.from.namespaceSelector
也为空。