【问题标题】:Implicit Deny in calico global network policy?calico 全球网络策略中的隐式拒绝?
【发布时间】:2021-01-14 08:15:09
【问题描述】:

我对全球网络策略的这种行为感到困惑。采取以下措施。

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: allow-dns-for-all-policy
spec:
  namespaceSelector: has(projectcalico.org/name) && projectcalico.org/name not in {"kube-system", "calico-system"}
  order: 0
  egress:
  # allow all namespaces to communicate to DNS pods
  - action: Allow
    protocol: UDP
    destination:
      ports:
      - 53
  ingress:
  - action: Allow

当我在“测试”命名空间中从一个 pod 到另一个 pod 执行 wget 时,它显然可以解析 dns 但不返回包:

Resolving nginx-test (nginx-test)... 10.233.8.253
Connecting to nginx-test (nginx-test)|10.233.8.253|:80... failed: Connection timed out.

集群上没有其他策略,尤其是没有默认拒绝策略。我也没有使用 namespaceSelector 进行测试。只有当我添加第二个匹配 * 的 Allow 规则时,或者当我删除整个策略时,我才能成功返回。

这是为什么呢?我原以为此策略对通信没有影响,因为不存在 DENY 规则。

【问题讨论】:

    标签: nginx kubernetes calico


    【解决方案1】:

    如果资源印花布上至少有一个入口/出口规则匹配,那么结果会自动将默认拒绝规则添加到入口/出口。

    如果没有网络策略适用于 pod,则允许进出该 pod 的所有流量。 如果一个或多个网络策略适用于包含入口规则的 pod,则仅允许这些策略特别允许的入口流量。 如果一个或多个网络策略适用于包含出口规则的 pod,则仅允许这些政策明确允许的出口流量。

    https://docs.projectcalico.org/security/calico-network-policy

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 2021-03-09
      • 2021-07-26
      相关资源
      最近更新 更多