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

How can I apply pod selector and namespace selector, both, in the same ingress rule?

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

例如源可以是部署在命名空间 "ingress".

中的带有标签 "tier=web" 的 pod

P.S. 现在,我通过将命名空间名称添加为 pod-labels 使其工作。

是的,这是可能的,但不是很直观。如果您查看 section below the chunk you linked, it gives a pretty good explanation (this appears to have been added after you asked your question). The NetworkPolicy API documentation here 通常也有帮助。

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

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

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

如果您将 ports 规则与 tofrom 语句一起使用,则同样的逻辑适用于使用 ports 规则。您会在示例中注意到,根据入口规则,它们在 ports 前面没有破折号。如果他们在前面放了一个破折号,它就是 OR 入口和端口的条件。

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

  1. 此评论可能会提供更多背景知识。 API 已经支持 OR,否则这样做会破坏已实现的人的某些功能:https://github.com/kubernetes/kubernetes/issues/50451#issuecomment-336305625
  2. https://github.com/kubernetes/kubernetes/pull/60452