最近在AKS集群上开始使用Calico网络策略。其计划是阻塞新名称空间的所有通信量,但指定给标记为“kube”的coredeDNS吊舱的通信量除外。此策略不应应用于名称空间:默认、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
有( projectcalico.org/name )->将资源与标签projectcalico.org/name匹配,这与值无关。
&& projectcalico.org/name在{“kube”、"calico-system“、"default"} ->中不匹配资源,没有标签的是projectcalico.org/name,或者在给定的集合{”kube“、"calico-system"}中不匹配
意义(?):它将应用于任何名称空间,但带有标签的名称空间和设置为kube-system或calico-system的值除外。但如果是这样的话,为什么不起作用呢?我向默认名称空间添加了一个标签: name=default
发布于 2021-03-18 02:19:32
AKS集群目前部署在CalicoV3.8.9中,它不支持spec.namespaceSelector (这是在V3.10中添加的)。
您可以通过显式地允许(在入口和出口中)通信在kube-system命名空间中使用source和destination字段中的destination字段来模拟这样的策略(参见https://docs.projectcalico.org/archive/v3.8/reference/resources/globalnetworkpolicy#entityrule)。
https://stackoverflow.com/questions/65003377
复制相似问题