如何将 podSelector 与 Kubernetes 网络策略中的端口结合起来?

如何将 podSelector 与 Kubernetes 网络策略中的端口结合起来?

我有一个名为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 都可以访问两个端口。
是否可以以某种方式结合使用portspodSelector还是我应该为每个后端 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

相关内容