1

最近开始使用 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

4

1 回答 1

0

AKS 群集当前使用不支持的 Calico v3.8.9 部署spec.namespaceSelector(这是在 v3.10 中添加的)。

您可以通过使用和字段中的namespaceSelector字段显式允许(在入口和出口)kube-system 命名空间内的流量来模拟这样的策略(请参阅https://docs.projectcalico.org/archive/v3.8/reference /resources/globalnetworkpolicy#entityrule )sourcedestination

于 2021-03-18T02:19:32.230 回答