![如何将 podSelector 与 Kubernetes 网络策略中的端口结合起来?](https://linux22.com/image/730911/%E5%A6%82%E4%BD%95%E5%B0%86%20podSelector%20%E4%B8%8E%20Kubernetes%20%E7%BD%91%E7%BB%9C%E7%AD%96%E7%95%A5%E4%B8%AD%E7%9A%84%E7%AB%AF%E5%8F%A3%E7%BB%93%E5%90%88%E8%B5%B7%E6%9D%A5%EF%BC%9F.png)
我有一个名为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