我们正在将部署从常规 EC2 迁移到 VPC,我们在公共云中有两个负载均衡器,我们有许多指向的域“A”记录,但我没有意识到公共弹性 IP 不能附加到 VPC 实例,您必须使用基于 VPC 的弹性 IP。
所以您知道,我们的 LB 是基于 HAProxy 的实例,而不是 Elastic Load Balancer。因此,如果这有助于回答我的问题或提供替代方案,那么我们可以使用 Apache。
由于并非所有指向公共 LB 的相关域都在我的控制之下,因此很难与每个人一起安排 DNS 更改,甚至可以说是不可能的。
所以我的问题是,我是否可以将对我们公共 LB 的调用重定向到 VPC 中的替代者?当我们通过客户端并让他们更新 DNS 时,这必须是透明的。
任何建议将不胜感激!
编辑:稍微扩展一下,如果我可以仅使用 EC2 功能来做到这一点,那么我就不必让两个公共 LB 实例保持运行,这将是一个好处。如果做不到这一点,我需要具体了解如何完成“重定向”,是在 DNS 中完成,还是在其他地方完成?
编辑 2:没有人能够提供任何有关不需要 LB 实例保持运行的 Amazon 特定解决方案的见解,因此我在下面选定的答案中概述了我们对 HAProxy 所做的事情。
答案1
您可以将对常规 EC2 负载均衡器的请求重定向到 VPC 负载均衡器。对于尚未更新 DNS 的所有用户来说,这是一个额外的步骤,但这只是暂时的,并且会激励您的客户尽快更新。
答案2
由于没有人能够提供具体细节,因此我们采取了以下措施:
首先,我们是 RightScale 的客户,因此如果您也是,则需要reconverge
使用他们提供的操作脚本关闭每 15 分钟左右运行一次的脚本。这将防止脚本在找不到任何活动的应用服务器并删除任何引用时覆盖您的更改。
接下来,/etc/haproxy
我们更新了haproxy.cfg
后端部分,看起来是默认内容的最后一行是:
# Special server line that allow HAProxy to start with cookies enabled and no valid servers.
server disabled-server 127.0.0.1:1 disabled
因此,在定义应用服务器的位置下方,我们包括:
server THE-INSTANCE-REF_ID 123.123.123.123:80 check inter 3000 rise 2 fall 3 maxconn 500
我们有两个 LB,因此我们只需将一个旧 LB 分别指向一个新的 LB。一切运行良好。我们将让这两个旧 LB 运行几周,同时我们的客户更新其 DNS,然后将其关闭,这样可以省去很多麻烦,而不必尝试按计划组织每个人的 IT!
答案3
如果您想隐藏本地 DNS 信息,我建议您最好采取以下做法:
a) 建立一个内部 DNS 服务器,并适当设置防火墙,只为系统内的 DNS 请求提供服务。
b) 自动管理单个 /etc/hosts 文件(Chef、Puppet、CFEngine、Ansible 等等)
如果您不担心通过公共查询泄露 DNS 信息,为什么不简单地使用外部 DNS 提供商(或 AWS 的 Route53)中的 CNAME 信息,即:
example.yourdomain.com => ec2-10-10-10-10.compute-1.amazonaws.com