跨 AZ 的 AWS DNS 解析
AWS DNS resolution across AZs
设置如下:
http 请求从连接到客户端 VPN (NAT) 的客户端传输,
到 Route53 中的私有托管区域,其中 A 记录解析为网络 LB DNS 名称
通过其 AWS DNS 名称将流量转发到 EKS 节点。
EKS 部署在可能的 3 个可用区中的 2 个可用区中 - 根据分配给它们的子网 CIDR 范围,我们称它们为 1,2 和 3。
出现的问题是这个(根据wireshark)
客户端 VPN 私有 IP 从托管区域请求 A 记录,该记录返回 3 个 AZ 的 LB 私有地址 - 成功
客户端继续向子网 1 的地址发出 TCP 请求。超时。
然后客户端向子网 2 发送 TCP 请求,请求成功,站点解析。
如果 TCP 请求首先发送到 1 和 3,站点将不会解析。
同时,如果通过 Public 托管区域和面向 LB 的 Internet 请求站点,无论 AZ 是什么,站点都可以毫无问题地解析。
对于我的生活,我无法弄清楚为什么会发生这种循环式行为,但更重要的是,为什么该站点不能从另一个可用区解析?
我试过的
仅使用 2 个 AZ 重新创建 LB - 这只会将站点加载时间减少一半,并不能解决问题。
检查安全组 - 一旦进入 VPN,一切都可以在私有子网上访问。
已检查路由 - 存在从 VPN 端点到所有 3 个 AZ 子网的路由。
根据https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-troubleshooting.html,内部负载均衡器不支持环回或发夹,AWS 建议使用面向 Internet 的 LB,它不会放弃私有 IP 和 A 记录不会通过 public IP 解析。
其次,他们建议通过 IP 而不是实例 ID 注册目标,这对我不起作用,因为 EKS 节点的私有 IP 将来会随着 EKS 升级而改变。
根据评论。
此问题是由 cross-zone 负载平衡禁用引起的。 默认关闭。
启用跨区域平衡是解决问题的方法。
设置如下: http 请求从连接到客户端 VPN (NAT) 的客户端传输, 到 Route53 中的私有托管区域,其中 A 记录解析为网络 LB DNS 名称 通过其 AWS DNS 名称将流量转发到 EKS 节点。
EKS 部署在可能的 3 个可用区中的 2 个可用区中 - 根据分配给它们的子网 CIDR 范围,我们称它们为 1,2 和 3。
出现的问题是这个(根据wireshark)
客户端 VPN 私有 IP 从托管区域请求 A 记录,该记录返回 3 个 AZ 的 LB 私有地址 - 成功
客户端继续向子网 1 的地址发出 TCP 请求。超时。
然后客户端向子网 2 发送 TCP 请求,请求成功,站点解析。
如果 TCP 请求首先发送到 1 和 3,站点将不会解析。
同时,如果通过 Public 托管区域和面向 LB 的 Internet 请求站点,无论 AZ 是什么,站点都可以毫无问题地解析。
对于我的生活,我无法弄清楚为什么会发生这种循环式行为,但更重要的是,为什么该站点不能从另一个可用区解析?
我试过的 仅使用 2 个 AZ 重新创建 LB - 这只会将站点加载时间减少一半,并不能解决问题。
检查安全组 - 一旦进入 VPN,一切都可以在私有子网上访问。
已检查路由 - 存在从 VPN 端点到所有 3 个 AZ 子网的路由。
根据https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-troubleshooting.html,内部负载均衡器不支持环回或发夹,AWS 建议使用面向 Internet 的 LB,它不会放弃私有 IP 和 A 记录不会通过 public IP 解析。 其次,他们建议通过 IP 而不是实例 ID 注册目标,这对我不起作用,因为 EKS 节点的私有 IP 将来会随着 EKS 升级而改变。
根据评论。
此问题是由 cross-zone 负载平衡禁用引起的。 默认关闭。
启用跨区域平衡是解决问题的方法。