问题: 我们在 cotoso.com 下有 7000 多个 DNS 子域名,我们想将它们映射到 2 个 IP 地址,例如子域名 1-4000 映射到 IP1,4001-7000 映射到 IP2。最好的方法是什么?
背景: 我们公司提供 SAAS 软件。我们有一个根域名(假设为 cotoso.com),然后为每个客户公司分配一个子域名(例如 company1.cotoso.com、company1.cotoso.com)。每个公司都通过给定的子域名登录并使用我们的 SAAS。
以前,我们的业务很小,只有 1 个服务部署。因此,DNS 设置非常简单,只需设置 A 记录将 *.cotoso.com 映射到我们的负载均衡器即可。
随着业务的增长,我们计划在不同的数据中心进行多次部署。然而,DNS 成了一个大问题。目前,我们有大约 7,000 个客户,我们想将其中一半迁移到新的数据中心,我们如何设置 DNS 记录?
我的想法是使用 3 级域名:
*.southeast.cotoso.com A 1.2.3.4
*.south.cotoso.com A 1.2.3.5
但是,3级通配符和2级通配符DNS记录之间存在冲突,因此我们无法将现有用户迁移到新的3级域。
任何帮助都将受到赞赏。
谢谢,
答案1
假设您知道客户正在使用的子域,则只需为每个子域设置 DNS 条目,指向他们各自应该使用的 DC。如今,许多 DNS 提供商都提供基于 HTTP 的“API”或不同质量的 API,您可以使用它们在配置数据库更新时自动更新 DNS 记录(创建客户记录 -> 创建 DNS 记录;取消客户 -> 删除 DNS 记录)。如果您自己托管 DNS,则可以轻松编写脚本以从客户记录生成 DNS 区域数据。
DNS 通配符非常邪恶、令人困惑,而且不会像您想象的那样发挥作用。我强烈建议您停止使用它们,并且永远不要再让它们影响您的生活。
答案2
保持 DNS 配置为单个通配符 ( *.company.com
),并引入反向代理(例如 varnish、haproxy 或 nginx)以将流量路由到适当的后端服务。像 section.io 这样的托管边缘代理可以使管理代理比自己运行代理更容易。
这使您可以灵活地更改处理路由的方式,使用可轻松进行版本控制和更改的代码,而不是锁定特定的 DNS 服务和数千条单独的记录。