GKE 上的 Clean Ambassador Edge Stack 安装因 DNS 解析失败

Clean Ambassador Edge Stack install on GKE fails with DNS resolving

我们正在测试 Ambassador Edge Stack,并开始使用自动驾驶模式下的全新 GKE 私有集群。

我们按照快速入门教程从头开始安装以了解它并最终出现以下错误

Error from server: error when creating "mapping-test.yaml": conversion webhook for getambassador.io/v3alpha1, Kind=Mapping failed: Post "https://emissary-apiext.emissary-system.svc:443/webhooks/crd-convert?timeout=30s": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

我们进行了几轮 DNS 测试,并在不同的命名空间中部署了一些不同的测试 pods 以验证 kube-dns 是否正常工作,最终一切看起来都很好。 resolv.conf 看起来也不错。

Ambassador 使用的主机名 emissary-apiext.emissary-system.svc:443(没有 cluster.local)应该可以很好地解析。使用 FQN(使用 cluster.local)进行查找工作正常。

有什么线索吗?

多谢保重

这听起来像是与 GKE 中的 webhook 限制相关的问题 Autopilot

您使用的是哪个版本的 GKE?

我们允许 webhook 拦截的资源和命名空间也有限制

Additionally, webhooks which specify one or more of following resources (and any of their sub-resources) in the rules, will be rejected:

  • group: "" resource: nodes
  • group: "" resource: persistentvolumes
  • group: certificates.k8s.io resource: certificatesigningrequests
  • group: authentication.k8s.io resource: tokenreviews

您可能需要查看 Ambassador Edge Stack 的清单才能弄清楚。

我想我找到了解决方案,如果以后有人遇到这个问题,请在此处发布。

所以我跟着 this 在 Autopilot 私有集群中部署了 Ambassador Edge Stack。我在尝试部署映射对象(步骤 2.2)时遇到了同样的错误。

问题是控制平面(API 服务器)正在尝试调用 emissary-apiext.emissary-system.svc:443 但它后面的 pods 正在监听在端口 8443 上(通过描述服务来计算)。

所以我添加了一条防火墙规则以允许 GKE 控制平面与端口 443 上的节点通信。

有问题的防火墙规则称为 gke-gke-ap-xxxxx-master。 xxxx 称为集群哈希,每个集群都不同。为确保您正在编辑正确的规则,请仔细检查源 IP 范围是否与集群详细信息页面中的“控制平面地址范围”相匹配。这就是名称以 master 结尾的规则。

只需编辑该规则并将 8443 添加到 tcp 端口。它应该工作