爱奇艺混合云内网DNS实践
爱奇艺早期业务多数以私有云方式部署,随时间推移,私有云模式在成本、弹性及区域覆盖等方面开始显现不足,而公有云在近年的发展中成熟度不断提高,逐步满足爱奇艺业务需求,爱奇艺开始有计划的使用公有云资源,逐渐形成私有云与多家公有云结合的业务部署模式,即混合云模式。混合云模式下,私有云和公有云分属不同的 DNS 体系,如何实现域名统一管理,高效、安全地完成云间通信,成为一个巨大的挑战,本文即介绍爱奇艺内网 DNS 架构的演进以及混合云场景下的内网 DNS 实践。
01
爱奇艺内网 DNS 演进
主机 DNS:主机 DNS 主要部署在主机上,为物理机、虚拟机和容器等提供高效 DNS 服务,具备 90% 以上的 DNS 缓存能力;当域名信息未命中主机 DNS 缓存时,主机 DNS 会转发该 DNS 查询请求至后端的缓存 DNS。
缓存 DNS:接收并响应来自主机 DNS 转发的域名解析请求,若未命中本地缓存,则将带有主机 DNS 子网信息的 DNS 请求转发至后端的权威 DNS,接收到权威 DNS 返回结果后将其回传给请求者,同时在本地进行缓存;因主机 DNS 部署在业务主机上,数量庞大,为增强内网配置可管理性,爱奇艺采用 Anycast 方案使每组缓存 DNS 都绑定相同 Anycast IP,所有的主机 DNS 配置统一,大幅提升维护效率。
权威 DNS:权威 DNS 存放所有内网权威域名的地址信息,当缓存 DNS 转发的请求域名为内网权威域名时,会根据主机 DNS 子网信息优先返回其所属区域的地址信息,如果请求域名为非内网权威域名,则会将该 DNS 请求进一步转发至递归 DNS 处理。
递归 DNS:递归 DNS 主要用来对非内网权威域名进行递归解析,将解析结果返回给权威 DNS、缓存 DNS 直至主机 DNS。
多级分层 DNS 缓存架构,使访问压力层层递减,大幅提升内网 DNS 域名解析能力,并降低响应延迟;
主机 DNS 直接部署在主机上,本地缓存命中率超过 90%,极大降低对后端 DNS 的访问压力,降低主机 DNS 访问的延迟,减小网络故障对主机 DNS 影响;
基于网络 Anycast 架构的缓存 DNS,使全网主机 DNS 地址配置保持一致,降低主机侧维护成本,可弹性扩容,节点故障及上下线对主机解析无影响,提供高效、安全、就近的 DNS 服务;
权威 DNS 统一管理 DNS 数据及业务策略,提供最佳的业务调度能力。
1.2 爱奇艺内网 DNS 架构演化
上述爱奇艺内网 DNS 架构并非一蹴而就,是在实践中逐步演化而来,下图展示了该演进过程:
一代 DNS 架构:早期内网 DNS 架构相对简单,只有权威 DNS,采用 master/slave 模式;随业务发展,内网 DNS 访问压力与日俱增,单层 DNS 架构已无法满足业务访问要求,所以衍生二代 DNS 架构;
二代 DNS 架构:主机上增加主机 DNS 承载大部分访问压力,中间层增加缓存 DNS,进一步降低权威 DNS 负载;随主机规模不断增大,中间层缓存 DNS 的节点数量不断扩增,而每次 DNS 节点扩增或调整,都需要修改主机 DNS 上的配置项,维护复杂,DNS 服务高可靠性缺乏保障,因此爱奇艺内网 DNS 架构再次升级,演进为第三代 DNS 架构;
三代 DNS 架构:借助于 Anycast 的网络架构,使 DNS 架构具备了弹性伸缩的能力,同时统一并简化了主机 DNS 配置,降低了故障率与维护成本。
1.3 融合 Anycast 的内网 DNS 架构
平台管理所有 DNS 主机,通过平台快速进行主机 DNS 服务部署、路由模块部署等;
平台提供一键上下线的功能,可通过平台直接操作或者接口调用;
故障自主检测,一旦检测到故障即触发故障主机摘除,其他 DNS 主机自动接管服务。
02
混合云时代的爱奇艺内网 DNS 架构
标准化配置:所有业务主机使用统一的 Anycast IP 作为唯一服务地址; 统一化管理:所有 DNS 服务器均平台化管理、自动化配置,做到 DNS 服务一键部署、一键上下线; 全局化服务:私有云和公有云使用统一的 DNS 服务地址,既能解析私有云域名,又可解析公有云域名,同时可实现跨公有云解析。
2.1 混合云场景下的 DNS 问题
公有云 VPC 内地址统一规划,如何将 Anycast IP 部署到云上实现 DNS 地址统一;
公有云底层网络对爱奇艺不可见,Anycast 和网络深度绑定,如何实现 DNS Anycast 在公有云上的部署;
不同公有云 DNS 地址可能独立规划,如何实现爱奇艺权威 DNS 和公有云 DNS 互通;
公有云厂商有独立的地址规划,如何实现 DNS 的正确解析以及云上云下服务互通;
特殊场景下如何实现公有云 DNS 对爱奇艺内网域名的解析。
2.2 混合云场景下的内网 DNS 架构
针对 Anycast IP 部署,目前主流公有云均支持 VPC 内的辅助地址,可通过辅助地址将 Anycast IP 部署到云上; 针对云上 DNS Anycast,通过公有云 LB 实现,在 LB 后端挂载 DNS 服务器实现负载均衡; 针对不同云厂商 DNS 地址互通问题,目前多家公有云均支持 VPC 内地址作为 DNS 地址,不支持的厂商将介绍其他替代方案; 针对公有云业务地址和云下互通以及 DNS 解析问题,目前多数厂商均支持 VPC 内网段作为业务地址,不支持的厂商将介绍其他替代方案; 特殊场景下公有云 DNS 可通过 DNS 转发器将爱奇艺内网域名解析请求转发到爱奇艺 DNS 进行解析,目前主流公有云均支持,并配合爱奇艺技术团队持续完善中。
2.3 混合云场景下的 DNS 实践及分析
2.3.1 Anycast 地址下沉部署
2.3.2 DNS 服务下沉到公有云
业务主机 DNS 请求 LB 上的 Anycast IP,经三层转发到 LB; LB 接受请求后做 DNAT,保持原地址不变,更改目的地址为 LB 后端挂载的 DNS 缓存服务器的真实地址,根据 hash 算法转发到相应的 DNS 缓存服务器; DNS 缓存服务器接受请求后,根据业务主机地址判断所属区域,如命中缓存直接返回解析结果,如未命中则请求权威进行解析后返回结果; DNS 缓存服务器回包到 VSW 根据转发表项到LB,LB更改源地址为Anycast地址后三层转发到业务服务器。
场景一:DNS缓存服务器和业务服务器在同一网段。
场景二:下沉 DNS 缓存服务配置 Anycast IP。
2.3.3 私有云服务器解析公有云域名
方案一:直接将云上 DNS 地址段路由发布到云下,此方案可能存在地址冲突问题; 方案二:通过云上配置 NAT 网关,经 NAT 转换实现云下 DNS 权威服务器和云上 DNS 服务器互通,此方案需额外增加 NAT 服务器,增加维护成本; 方案三:公有云上部署代理打通云上云下 DNS 服务,此方案同样增加了资源和维护成本。
2.3.4 私有云服务和公有云服务互通问题
方案一:直接将公有云地址段路由发布到云下,云上 DNS 正常进行地址解析,云下服务器也能访问云上资源,此方案可能存在地址冲突问题; 方案二:在公有云服务前部署 LB,LB 后挂载公有云服务,并且调整 DNS 解析到 LB,此方案增加了 LB 资源和维护成本; 方案三:在公有云服务前部署代理,通过代理连通公有云和私有云,并且调整 DNS 解析到代理服务器,此方案增加了代理服务器资源和维护成本。
2.3.5 公有云服务解析私有云域名
小结
03