最近开始使用 AKS 群集上的 Calico 网络策略。该计划是阻止新命名空间的所有流量,但目的地为标有“kube-dns”的 coredeDNS pod 的流量除外。该策略不应应用于命名空间:default、kubesystem 和 calico-system。
将默认命名空间标记为:name=default
我从 Calico 网站上选择了一个示例并添加了默认命名空间,链接:https ://docs.projectcalico.org/security/kubernetes-default-deny 。但不知何故,该策略也适用于不应该是这种情况的默认命名空间?我已经标记了默认命名空间。
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: deny-app-policy
spec:
namespaceSelector: has(projectcalico.org/name) && projectcalico.org/name not in {"kube-system", "calico-system","default"}
types:
- Ingress
- Egress
egress:
# allow all namespaces to communicate to DNS pods
- action: Allow
protocol: UDP
destination:
selector: 'k8s-app == "kube-dns"'
ports:
- 53
还检查了文档:https ://docs.projectcalico.org/reference/resources/globalnetworkpolicy
has(projectcalico.org/name) -->匹配带有标签 projectcalico.org/name 的资源,与值无关
&& projectcalico.org/name not in {"kube-system", "calico-system", "default"} -->匹配没有标签 projectcalico.org/name 或标签 projectcalico.org/name 且值不在给定集合 {"kube-system", "calico-system"}
含义 (?):它将适用于任何命名空间,但带有标签且值设置为 kube-system 或 calico-system 的命名空间除外。但如果是这样的话,为什么它不起作用呢?我在默认命名空间中添加了一个标签:name=default