AWS ALB 加权路由,同时入口规则出现在同一域记录别名上

AWS ALB weighted routing while Ingress rule present on same domain record alias

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

由于入口由 Kubernetes 内部 DNS 处理,我希望 LoadBalancer 能够将流量无缝地引导到两个目标组(Nginx 和 Ambassador),但我得到的是它只将流量引导到 Ambassador 目标组,而目前它也定义为 Nginx 入口规则的那个只是给出 503 服务不可用 - 请注意,Nginx 安装可以通过其他 dns 映射访问,所以一切正常。

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

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

假设您已经在使用 Nginx 或其他已公开入口的默认控制器 api.sub-domain.domain.com 已列出在 *.sub-domain.domain.com

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

需要注意的错误:

  • 503 服务不可用 - 可能表示您没有配置侦听器规则或者它是 miss-configured。仔细检查任何 header 提到 ELB 的响应 header,如果确实如此,那显然是配置问题
  • 504 网关超时 - 您的目标组配置不正确,并且您配置的端口未针对您的入口控制器
  • dns_probe_finished_nxdomain - 您的 Route53 记录未正确配置或根本未定义,请确保为您的域和所需的子域配置了 CNAME 和 A 类型记录。