我有一个名为mysql-1端口 3306 和 3307 开放。
我想创建一个网络策略,允许来自后端-1至 3306 和后端-2至 3307。
目前我能想到的只有这项政策:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: mysql-ingress-policy-1
namespace: v2ci
spec:
podSelector:
matchLabels:
app: mysql-1
release: v2
types:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: backend-1
release: v2
- podSelector:
matchLabels:
app: backend-1
release: v2
ports:
- protocol: TCP
port: 3306
- protocol: TCP
port: 3307
问题是,使用此策略,每个后端 Pod 都可以访问两个端口。
是否可以以某种方式结合使用ports
,podSelector
还是我应该为每个后端 Pod 创建一个网络策略?
答案1
您的 yaml 文件中没有backend-2
提及,但仅仅更改这一点不会产生预期的结果。
您必须提供两个不同的- from
部分,每个后端一个:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: mysql-ingress-policy-1
namespace: v2ci
spec:
podSelector:
matchLabels:
app: mysql-1
release: v2
types:
- Ingress
ingress:
# route backend-1 to port 3306
- from:
- podSelector:
matchLabels:
app: backend-1
release: v2
ports:
- protocol: TCP
port: 3306
# route backend-2 to port 3307
- from:
- podSelector:
matchLabels:
app: backend-2 # really apply a different pod than in the other "from"
release: v2
ports:
- protocol: TCP
port: 3307