是否有能力同时按名称空间和广告标签进行过滤?
https://kubernetes.io/docs/user-guide/networkpolicies/#the-networkpolicy-resource
文档中的示例 - from:
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
表示允许来自role=frontend
的{{1}} 或的广告连播。
有没有办法改变这个"或"进入"和"?
答案 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
答案 3 :(得分:0)
此声明不起作用:
- from:
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
如果您选择命名空间选择器并将特定的pod连接到您的pod,则会发生什么情况。因为只是指定了命名空间,所以您打开了整个命名空间以连接到您的pod。放podSelector
是没用的。另一种方法是使用ipBlock
,但不建议在大型集群中再次使用,因为IP可能会发生变化。
GitHub上有一个更新来解决这个问题。