最近开始在 AKS 群集上使用 Calico 网络策略。该计划是阻止新命名空间的所有流量,但发往标记为“kube-dns”的 coredeDNS pod 的流量除外。该策略不应应用于命名空间:default、kubesystem 和 calico-system。
用以下方式标记默认命名空间:name=default
我从 Calico 网站上找到了一个示例,并添加了默认命名空间,链接:https://docs.projectcalico.org/security/kubernetes-default-deny 。但不知何故,该策略也应用于默认 namespace ,但不应该是这样?我已经标记了默认命名空间。
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
最佳答案
AKS 群集当前使用 Calico v3.8.9 部署,不支持 spec.namespaceSelector
(这是在 v3.10 中添加的)。
您可以通过使用 namespaceSelector
显式允许 kube-system 命名空间内的(入口和导出)流量来模拟此类策略。 source
内的字段和destination
字段(请参阅 https://docs.projectcalico.org/archive/v3.8/reference/resources/globalnetworkpolicy#entityrule )
关于azure - Calico GlobalNetworkPolicy 排除不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65003377/