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,因此我配置了以下内容:
- 一个配置为指向 Nginx 安装的 ALB
- 指向 Ambassador 安装的单独目标组
- ALB 侦听器配置有加权路由以在安装之间循环(想法是 increase/decrease 随意传输并监督新入口控制器如何管理它)
- 指向负载均衡器的 Route53 记录集别名 (api.domain.com)
- 通过 Nginx 暴露的入口与上面的记录相同 (api.domain.com)
由于入口由 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
等通配符证书下
- 为所需域添加 Route53 别名记录,例如api.sub-domain.domain.com
- 添加指向端口的目标组和 instances/instance 新入口控制器的组
- 在 ALB 中,将目标组添加到具有流量路由所需权重的现有侦听器规则中
- (可选)您可能需要定义一个新规则,其中指定的主机 header 与别名记录
相同
- 更新侦听器规则
- 刷新 api.sub-domain.domain.com 页面并检查您最喜欢的浏览器的网络部分的服务器类型。在我的例子中,它在 Envoy(Ambassador 使用的底层代理)和 Nginx(或者您可能会看到与 Php 7.*)
相关的内容之间切换
需要注意的错误:
- 503 服务不可用 - 可能表示您没有配置侦听器规则或者它是 miss-configured。仔细检查任何 header 提到 ELB 的响应 header,如果确实如此,那显然是配置问题
- 504 网关超时 - 您的目标组配置不正确,并且您配置的端口未针对您的入口控制器
- dns_probe_finished_nxdomain - 您的 Route53 记录未正确配置或根本未定义,请确保为您的域和所需的子域配置了 CNAME 和 A 类型记录。
我有一个 API 目前由我们主 CA 下的子域提供服务,例如api.domain.com。 这个 API 目前由 Nginx 入口控制器提供服务,计划用另一个入口控制器(即 Ambassador)替换它,并尽可能避免部署停机。 由于我们使用的是 AWS EKS,因此我配置了以下内容:
- 一个配置为指向 Nginx 安装的 ALB
- 指向 Ambassador 安装的单独目标组
- ALB 侦听器配置有加权路由以在安装之间循环(想法是 increase/decrease 随意传输并监督新入口控制器如何管理它)
- 指向负载均衡器的 Route53 记录集别名 (api.domain.com)
- 通过 Nginx 暴露的入口与上面的记录相同 (api.domain.com)
由于入口由 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
等通配符证书下- 为所需域添加 Route53 别名记录,例如api.sub-domain.domain.com
- 添加指向端口的目标组和 instances/instance 新入口控制器的组
- 在 ALB 中,将目标组添加到具有流量路由所需权重的现有侦听器规则中
- (可选)您可能需要定义一个新规则,其中指定的主机 header 与别名记录 相同
- 更新侦听器规则
- 刷新 api.sub-domain.domain.com 页面并检查您最喜欢的浏览器的网络部分的服务器类型。在我的例子中,它在 Envoy(Ambassador 使用的底层代理)和 Nginx(或者您可能会看到与 Php 7.*) 相关的内容之间切换
需要注意的错误:
- 503 服务不可用 - 可能表示您没有配置侦听器规则或者它是 miss-configured。仔细检查任何 header 提到 ELB 的响应 header,如果确实如此,那显然是配置问题
- 504 网关超时 - 您的目标组配置不正确,并且您配置的端口未针对您的入口控制器
- dns_probe_finished_nxdomain - 您的 Route53 记录未正确配置或根本未定义,请确保为您的域和所需的子域配置了 CNAME 和 A 类型记录。