如何解决MSE Nacos实例域名无法解析的问题?

本文介绍如何解决MSE Nacos实例域名无法解析的问题。

问题现象

当程序连接MSE Nacos出现实例域名无法解析时,可能会有如下几种报错。
  • UnknownHostException
  • No route to host
  • Unable to resolve host

问题原因

  • 应用节点所配置的DNS服务器或NameServer不正确,导致无法解析MSE域名。
  • 容器未使用宿主机的DNS服务器或NameServer,或网络模式错误,导致无法解析MSE域名。
  • 应用节点所配置的DNS服务器或NameServer故障,特别是Kubernetes集群所依赖的CoreDNS故障,导致无法解析MSE域名。

解决方案

方案一:使用dig命令

执行如下命令安装dig工具。

yum install -y bind-utils

如下代码所示,使用dig命令,尝试解析域名,并查看statusSERVER字段是否能够正常地解析域名。

status值为NOERROR,以及SERVER字段使用的DNS服务器或NameServer正确,表明域名正常解析。

dig ${mse.nacos.host}

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.1.alios7.2 <<>> ${mse.nacos.host}
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN ## 确认这个字段, id: 46791
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;${mse.nacos.host}. IN A

;; AUTHORITY SECTION:
com.                    900     IN      SOA     a.gtld-servers.net. nstld.verisign-grs.com. 1670413473 1800 900 604800 86400

;; Query time: 0 msec
## 确认这个字段
;; SERVER: yyy.yyy.yyy.yyy#zz(...)
;; WHEN: Wed Dec 07 19:39:32 CST 2022
;; MSG SIZE  rcvd: 73
  • 如果dig命令无法正常解析域名,采用以下方式修复:
    • 如果您的环境是通过ECS部署,请记录SERVER字段中的DNS服务器和NameServer地址信息,并提工单联系ECS或网络技术支持协助排查域名解析失败的原因。
    • 如果您的环境是通过Docker或Kubernetes部署,请退出到宿主机或Node上再次执行dig命令尝试解析。
      • 如果解析成功,说明是网络模式错误或容器内外的DNS服务器和NameServer设置不同,尝试修改部署的网络模式,或将Node上的/etc/resolv.conf配置移植到容器中重试。
      • 如果无法解析,请提工单联系ECS或网络技术支持协助排查域名解析失败的原因。
  • 如果执行dig命令可以正常解析,且应用已经恢复不再出现异常,说明是DNS服务器或NameServer出现故障。请提工单联系网络技术支持协助排查DNS服务器或NameServer故障原因。

    如果使用的是ACK,请提工单联系ACK技术支持协助排查CoreDNS故障原因。

方案二:使用ping命令

  1. 使用ping ${mse.nacos.host}指令尝试解析。
    • 如果提示unknown host,则无法解析域名。
    • 如果提示PING ${mse.nacos.host} (xxx.xx.xx.xx) 56(84) bytes of data.,则解析成功。
  2. 如果执行ping命令无法正常解析,可查看文件/etc/resolv.conf的内容,获取DNS服务器和NameServer地址信息,尝试采用以下方式修复:
    • 如果您的环境是通过ECS部署,请记录/etc/resolv.conf中的内容,并提工单联系ECS或网络技术支持协助排查域名解析失败的原因。
    • 如果您的环境是通过Docker或Kubernetes部署,请退出到宿主机或Node上再次执行ping命令尝试解析。
      • 如果解析成功,说明是网络模式错误或容器内外的DNS服务器和NameServer设置不同,尝试修改部署的网络模式,或将Node上的/etc/resolv.conf配置移植到容器中重试。
      • 如果无法解析,请提工单联系ECS或网络技术支持协助排查域名解析失败的原因。
  3. 如果执行ping命令可以正常解析,且应用已经恢复不再出现异常,说明是DNS服务器或NameServer出现故障。请提工单联系网络技术支持协助排查DNS服务器或NameServer故障原因。

    如果使用的是ACK集群,请提工单联系ACK技术支持协助排查CoreDNS故障原因。