# 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 数据,进行二级域名的增、删、改、查 。 ![](images/_1531404886_28206.png) # 2. 问题症状 - 所有的服务中,外网 DNS 都没有了... - 查看 『基础设施』--> 『powerdns-external-dns』-->『powerdns』--> 查看日志,一般会出现以下报错: ```sh 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'" ``` ![](images/_1533016208_5587.png) # 3. 问题处理 目前基本碰到的问题,都是由于`网络延时`造成 api 提交数据失败。解决方案有以下几种: - 重启下 powerdns-external-dns 服务,查看日志如果没有出现错误即问题解决(`80% 可以解决`) - 将 powerdns-external-dns 中的健康检测的 "超时时间" 适当增加(一般设置为 2-10 左右的值,网络越差值越大 ) - 优化下网络吧,目前线上暂时未发现有此问题 :-o