如何在同一入口规则中同时应用pod选择器和名称空间选择器?

时间:2018-09-05 14:39:02

标签: kubernetes kubernetes-ingress

Kubernetes文档example here显示了如何将网络策略应用于由pod选择器或名称空间选择器指定的源。我可以指定同时满足两个约束条件的来源。

例如源可以是带有标签“ tier = web”的容器,该容器部署在名称空间“ ingress”中。

PS 。目前,我通过将名称空间名称添加为吊舱标签来使其正常工作。

1 个答案:

答案 0 :(得分:2)

是的,这是可能的,但并非立即直观。如果查看链接的section below块,它会给出很好的解释(在您提出问题后似乎已添加了该解释)。通常,NetworkPolicy API文档here也很有帮助。

基本上,如果像示例一样将每个选择器放在列表中的两个单独项目中,则它使用逻辑或。如果将它们作为两个项目放在列表中的同一数组元素中(第二个项目前面没有破折号)(如下面的示例所示)与AND podSelector和namespaceSelector结合使用,它将起作用。在yaml到json转换器中查看这些内容可能会有所帮助。

这是他们政策中的一个入口块,已修改为AND条件

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

如果在portsto语句旁边使用from规则,则这种逻辑也适用。您会在示例中注意到,根据入口规则,它们在ports前面没有破折号。如果他们在前面加了一个破折号,那就等于入口和端口的条件。

以下是他们讨论如何实现组合选择器时的一些GitHub链接:

  1. 此评论可能会提供更多背景信息。该API已经支持OR,因此对实现该功能的人员来说,否则将破坏某些功能:https://github.com/kubernetes/kubernetes/issues/50451#issuecomment-336305625
  2. https://github.com/kubernetes/kubernetes/pull/60452