假设我有一个pod,它在命名空间中有一个标签app=foo
。
我只想通过NetworkPolicy
从同一命名空间中的另外两个pod访问这个pod(没有其他pod能够访问它(
这些吊舱有以下标签
pod1
labels:
app: foo1
type: frontend
labels:
app: foo2
type: backend
我的问题是,我是否能够在NetworkPolicy
的ingress
部分中定义2个podSelector
字段,如下所示
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: my-network-policy
namespace: default
spec:
podSelector:
matchLabels:
app: foo
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: foo1
type: frontend
- podSelector:
matchLabels:
app: foo2
type: backend
ports:
- protocol: TCP
port: 6379
上面的NetworkPolicy
定义能满足我的要求吗?
是的,我想是的,你写的清单只应用于标签为foo的pod(仅限于foo(,来自集群内部或外部的入口流量将被阻止。。。然而,标签为foo1和foo2的pod都可以从集群内的任何地方进行通信或接收通信。你实施了吗?你安装了什么网络插件?
假设这三个pod都在同一个命名空间中,是的,您已经定义了正确的NetworkPolicy
。您的yaml文件仅应用于标签为foo
的pod-来自集群内或集群外的入口流量将被阻止,但标签为foo1
frontend
和foo2
backend
的pod都可以从集群内的任何地方进行通信或接收通信。
注意:
如果您在默认名称空间中声明值或对象,那么您并没有将其放入定义中,比如namespace: default
。默认情况下,它们将被分配给它。
请参阅:匹配表达式networkpolicy。
阅读更多:声明网络策略,网络策略。
看看:指导网络策略。