这里的 Kubernetes 文档示例显示了如何将网络策略应用于由 pod 选择器或命名空间选择器指定的源。我可以指定一个同时满足这两个约束的源吗?
例如,源可以是标签为"tier=web"的 pod,该容器部署在命名空间"入口"中。
附言现在,我通过将命名空间名称添加为 pod 标签来使其工作。
是的,这是可能的,但不是立即直观。如果您查看您链接的块下方的部分,它会给出一个很好的解释(这似乎是在您提出问题后添加的(。此处的网络策略 API 文档通常也很有帮助。
基本上,如果您像示例一样将每个选择器作为两个单独的项目放在列表中,则它使用的是逻辑 OR。如果您将它们作为两个项目放在列表中的同一数组元素中(第二个项目前面没有破折号(,就像下面的示例到 AND podSelector 和 namespaceSelector,它将起作用。在 yaml 到 json 转换器中看到这些可能会有所帮助。
这是他们策略中的一个入口块,修改为 AND 条件
ingress:
- from:
- namespaceSelector:
matchLabels:
project: myproject
podSelector:
matchLabels:
role: frontend
如果将ports
规则与to
或from
语句一起使用,则相同的逻辑也适用于使用该规则。您会在示例中注意到,在入口规则下,它们在ports
前面没有破折号。如果他们在前面放了一个破折号,它将或入口和端口的条件。
以下是他们讨论如何实现组合选择器时的一些 GitHub 链接:
- 此评论可能会提供更多的背景信息。API 已经支持 OR,因此这样做会破坏已实现该 OR 的人的一些功能:https://github.com/kubernetes/kubernetes/issues/50451#issuecomment-336305625
- https://github.com/kubernetes/kubernetes/pull/60452