Calico Cloud - 出口域网络策略问题

Calico Cloud - Egress domain network policy issue

我正在尝试通过 Calico Cloud.

使用域配置出口流量

我知道 DNS 功能可以通过付费 Calico EnterpriseCalico Cloud 实现,如前所述 here。我正在使用 calico cloud 试用版。我可以使用 destination.nets 访问出口流量,但是当我使用 destination.domains 时,它会阻止整个出口流量。

我的环境:

GKE cluster: 1.20.15-gke.3400
Calico version: Calico Cloud (Already connected cluster, Network Policy created via Calico Cloud UI)
Firewalls: Disabled

对于测试,我使用默认的 nginx pod 并安装了 ping。我试过 pingcurl。为了方便起见,我允许任何协议。

使用网络的工作配置:

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: default.allow-google
spec:
  tier: default
  order: 0
  selector: app == "nginx"
  namespaceSelector: ''
  serviceAccountSelector: ''
  egress:
    - action: Allow
      source: {}
      destination:
        nets:
          - 142.250.185.132/32 ## ip of www.google.com
          - 87.248.100.216/32  ## ip of www.yahoo.com
  doNotTrack: false
  applyOnForward: false
  preDNAT: false
  types:
    - Egress

使用域发布的策略:

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: default.allow-google
spec:
  tier: default
  order: 0
  selector: app == "nginx"
  namespaceSelector: ''
  serviceAccountSelector: ''
  egress:
    - action: Allow
      source: {}
      destination:
        domains:
          - '*.google.com'
          - '*.yahoo.com'
          - google.com
          - yahoo.com
  doNotTrack: false
  applyOnForward: false
  preDNAT: false
  types:
    - Egress

问题:

  1. 我是否缺少一些基本配置?它与层有关(我使用的是默认层和安全层,但结果是一样的)?
  2. 是否有其他选项允许基于 DNS 的出口策略(打开 source/workarounds)?

提前致谢

我缺少 kube-dns 服务政策。

当您将 GKE 集群连接到 Calico Cloud 时,您没有任何政策。您创建 nets 规则后,它将起作用,因为它仅适用于 IPs。但是,当您想要使用 FQDN/DNS 时,您需要创建策略以允许连接到 kube-dns 服务。 YAML 如下所示:

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: allow-kube-dns
spec:
  selector: all()
  egress:
    - action: Allow
      destination:
        services:
          name: kube-dns
          namespace: kube-system

可以找到更多详细信息 here

对于故障排除,您可以使用来自 dnsutils ($ apt install dnsutils).

host ($ host www.google.com) 命令检查是否看到任何输出

应用以上 YAML 后,destination.domains 策略按预期工作。