创建一个NetworkPolicy,允许从2个特定的pod访问一个pod



假设我有一个pod,它在命名空间中有一个标签app=foo

我只想通过NetworkPolicy从同一命名空间中的另外两个pod访问这个pod(没有其他pod能够访问它(

这些吊舱有以下标签

pod1

labels:
app: foo1
type: frontend
labels:
app: foo2
type: backend

我的问题是,我是否能够在NetworkPolicyingress部分中定义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-来自集群内或集群外的入口流量将被阻止,但标签为foo1frontendfoo2backend的pod都可以从集群内的任何地方进行通信或接收通信。

注意:

如果您在默认名称空间中声明值或对象,那么您并没有将其放入定义中,比如namespace: default。默认情况下,它们将被分配给它。

请参阅:匹配表达式networkpolicy。

阅读更多:声明网络策略,网络策略。

看看:指导网络策略。

最新更新