Kubernetes 网络策略多个匹配标签

mbx*_*zxz 7 kubernetes

我们对所有 pod 有一个默认的拒绝所有出口策略,并且我们有一个如下所示的出口互联网策略

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-external-egress-internet
spec:
  podSelector:
    matchLabels:
      egress: internet
  policyTypes:
  - Egress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试在spec/podselector/matchlabels所有内容下添加多个标签。egress: internet有没有办法让这个网络策略在带有标签OR的 Pod 上实现foo:bar

具有与标签相同的 Podfoo:bar应该是允许的,但它不是这样工作的。

use*_*350 7

您可以向 podSelector.matchLabels 添加多个键值。
请参阅https://github.com/ahmetb/kubernetes-network-policy-recipes/blob/master/10-allowing-traffic-with-multiple-selectors.md

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: redis-allow-services
spec:
  podSelector:
    matchLabels:
      app: bookstore
      role: db
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: bookstore
          role: search
    - podSelector:
        matchLabels:
          app: bookstore
          role: api
    - podSelector:
        matchLabels:
          app: inventory
          role: web
Run Code Online (Sandbox Code Playgroud)


Sai*_*nti 6

这很棘手,因为matchLabels不需要多个键值对并且matchExpressions将进行 AND 运算。有两种可能的方法(解决方法):

  1. 创建另一个网络策略(以及现有的网络策略),其中matchLabels包含foo:bar.

    [或者]

  2. 向两个工作负载添加一个新标签(通用)并在中使用它podSelector