0

我有一个 API,目前由我们的主要 CA 下的子域提供服务,例如api.domain.com。此 API 目前由 Nginx 入口控制器提供服务,计划用另一个入口控制器(即大使)替换它,并尽可能避免停机部署。由于我们使用的是 AWS EKS,因此我配置了以下内容:

  • 一个配置为指向 Nginx 安装的 ALB
  • 指向大使装置的单独目标群体
  • 使用加权路由配置的 ALB 侦听器在安装之间进行循环(想法是随意增加/减少流量并监督新的入口控制器如何管理它)
  • 指向负载均衡器 (api.domain.com) 的 Route53 记录集别名
  • 通过 Nginx 暴露的入口与上面的记录相同(api.domain.com)

由于入口由 Kubernetes 内部 DNS 处理,我希望 LoadBalancer 将流量无缝引导到两个目标组(Nginx 和大使),但我得到的是它只将流量引导到大使目标组,而定义的目标组也作为 Nginx Ingress 规则,目前它只给出 503 Service Unavailable - 请注意,Nginx 安装可通过其他 dns 映射访问,因此一切正常。

知道我做错了什么吗?整个想法是在 LB 级别而不是 DNS 级别进行加权路由,以避免 DNS 传播问题。

4

1 回答 1

1

正如对我自己的问题的评论中所写,为了使其工作并在同一 AWS ALB 下公开多个 Ingress 控制器,您必须验证以下清单:

假设您已经在使用 Nginx 或另一个默认控制器,该控制器在通配符证书下列出了api.sub-domain.domain.com的入口,例如*.sub-domain.domain.com

  1. 为所需域添加 Route53 别名记录,例如api.sub-domain.domain.com
  2. 添加指向新入口控制器的端口和实例/实例组的目标组
  3. 在 ALB 中,将目标组添加到具有所需权重的现有侦听器规则以进行流量路由
  4. (可选)您可能需要定义一个新规则,其中指定的 Host 标头与别名记录相同
  5. 更新监听器规则
  6. 刷新api.sub-domain.domain.com页面并检查您喜欢的浏览器的网络部分的服务器类型。在我的例子中,它在 Envoy(Ambassador 使用的底层代理)和 Nginx(或者你可能会看到与 Php 7.* 相关的东西)之间切换

需要注意的错误:

  • 503 Service Unavailable - 可能表示您没有配置侦听器规则或未配置。仔细检查响应标头中是否有任何提及 ELB 的标头,如果是这种情况,它显然是配置问题
  • 504 Gateway Timeout - 您的目标组配置不正确,并且您配置的端口未针对您的 Ingress Controller
  • dns_probe_finished_nxdomain - 您的 Route53 记录未正确配置或根本未定义,请确保您为您的域和所需的子域配置了 CNAME 和 A 类型记录。
于 2020-05-18T08:24:32.283 回答