Kubernetes网络策略,用于过滤命名空间和pod标签

时间:2017-02-14 14:35:40

标签: kubernetes

是否有能力同时按名称空间广告标签进行过滤?

https://kubernetes.io/docs/user-guide/networkpolicies/#the-networkpolicy-resource

文档中的示例
 - from:
 - namespaceSelector:
    matchLabels:
     project: myproject
 - podSelector:
    matchLabels:
     role: frontend

表示允许来自role=frontend的{​​{1}} 的广告连播。

有没有办法改变这个"或"进入"和"?

4 个答案:

答案 0 :(得分:1)

我认为你误解了选择者。在NetworkPolicyPeer的API文档中,您可以找到以下说明:

<强> namespaceSelector

  

使用群集作用域标签选择命名空间。这将匹配此标签选择器选择的所有命名空间中的所有pod。该字段遵循标准标签选择器语义。如果省略,则此选择器不选择名称空间。如果存在但为空,则此选择器将选择所有名称空间。

<强> podSelector

  

这是一个标签选择器,用于选择此命名空间中的Pod。该字段遵循标准标签选择器语义。如果未提供,则此选择器不会选择任何窗格。如果存在但为空,则此选择器将选择此命名空间中的所有窗格。

因此,两个选择器中的组合并不真正实现布尔操作,它们针对不同的范围(当前命名空间与所有其他命名空间)。

因此,您问题的唯一解决方案是使用与namespaceSelector

中可选择的名称空间相关标签来标记每个广告连播。

答案 1 :(得分:1)

修改:这已在此处实施:https://github.com/kubernetes/kubernetes/pull/60452

目前,还没有办法从其他命名空间中选择某个pod。 https://github.com/kubernetes/kubernetes/issues/50451

有一个未解决的问题

答案 2 :(得分:1)

Kubernetes 1.11及更高版本支持通过逻辑AND将podSelector和namespaceSelector结合使用:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: database.postgres
  namespace: database
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          namespace: default
      podSelector:
        matchLabels:
          app: admin
  policyTypes:
  - Ingress

在此处查看更多详细信息:https://medium.com/@reuvenharrison/an-introduction-to-kubernetes-network-policies-for-security-people-ba92dd4c809d/#f416

答案 3 :(得分:0)

此声明不起作用:

- from:
- namespaceSelector:
   matchLabels:
    project: myproject
- podSelector:
  matchLabels:
    role: frontend

如果您选择命名空间选择器并将特定的pod连接到您的pod,则会发生什么情况。因为只是指定了命名空间,所以您打开了整个命名空间以连接到您的pod。放podSelector是没用的。另一种方法是使用ipBlock,但不建议在大型集群中再次使用,因为IP可能会发生变化。

GitHub上有一个更新来解决这个问题。