1. DNS 原理
- DNS 服务器:在外网搭建PowerDNS服务,提供名称解析服务(当然使用其它 DNS 服务器也可以,比如 Bind 等)。最好有自带对外的增、删、改、查 接口服务,通过 http API 暴露接口,否则只能自己开发了。
- 在域名控制台中,手动设置 svi.pub 域名解析,指向为我们自建的PowerDNS服务。后续的二级域名,都会在我们自建的 DNS 服务器上生成或解析啦。 :)
- 云平台 "基础设施" 中,部署一个 "powerdns-external-dns" 基础服务(我们暂称之为
DNS 客户端
吧)。
- DNS 客户端每隔一段时间(可配置),从云平台的 MetaData 元数据( http://rancher-metadata/ )信息中,获取 服务名、应用名(栈名)、服务所在主机等信息。
- DNS 客户端通过提前配置好的域名规则 (默认是 <服务名>.<栈名>.<环境名>.)将数据进行组合为 http Post 信息。
- DNS 客户端通过Insert_Or_Update接口,向 DNS 服务器 的 http API Post 数据,进行二级域名的增、删、改、查 。

2. 问题症状
- 所有的服务中,外网 DNS 都没有了...
- 查看 『基础设施』--> 『powerdns-external-dns』-->『powerdns』--> 查看日志,一般会出现以下报错(如图 2-1):
2018/7/28 上午1:37:42time="2018-07-27T17:37:42Z" level=error msg="Healtcheck failed: \
Error from provider: healthcheck failed for 'powerdns'with error'Get \
http://console.svicloud.com:8100/api/v1/servers/localhost/zones: dial tcp 151.106.8.135:8100: i/o timeout'"


3. 问题处理
目前基本碰到的问题,都是由于网络延时
造成 api 提交数据失败。解决方案有以下几种:
- 重启下 powerdns-external-dns 服务,查看日志如果没有出现错误即问题解决(
80% 可以解决
)
- 将 powerdns-external-dns 中的健康检测的 "超时时间" 适当增加(一般设置为 2-10 左右的值,网络越差值越大 )
- 优化下网络吧,目前线上暂时未发现有此问题 :-o