ECS DNS 解析失败
问题现象
在ECS上运行python main.py本地测试时,AgentArts公网域名无法解析,报错NameResolutionError: Failed to resolve。涉及的域名包括(具体域名因region和实例不同而异,请在 AgentArts 控制台查看):
- memory.<region>.huaweicloud-agentarts.com(记忆库服务)
- gateway-<网关名称>-<网关实例ID>.<region>.huaweicloud-agentarts.com(网关)
- defaultgw-<网关实例ID>.<region>.huaweicloud-agentarts.com(沙箱代码解释器)
问题原因
AgentArts域名是公网域名,但ECS默认只配置了华为云内网DNS(100.125.x.x)。内网DNS对这些公网域名返回NXDOMAIN(域名不存在)。此外,ECS使用systemd-resolved管理 DNS,eth0网卡的 +DefaultRoute标志会用 DHCP 分配的内网DNS覆盖全局DNS配置,导致即使修改了/etc/systemd/resolved.conf也无法生效。
解决方案
绕过systemd-resolved,直接写静态/etc/resolv.conf:
# 删除 systemd-resolved 的符号链接 sudo rm /etc/resolv.conf # 写入静态 DNS 配置(单行命令,不用 heredoc)echo echo -e "nameserver 114.114.114.114\nnameserver 8.8.8.8\nnameserver 100.125.1.250\nsearch openstacklocal" | sudo tee /etc/resolv.conf
DNS 服务器选择说明:
- 114.114.114.114(中国公共 DNS)作为首选——国内访问延迟低,解析速度快
- 8.8.8.8(Google 公共 DNS)作为备选——但国内访问有间歇性超时,不能作为首选
- 100.125.1.250(华为云内网 DNS)——用于解析华为云内部域名
验证方式:
修改后用 nslookup(不带 DNS 服务器参数)逐个测试AgentArts 域名,全部返回 IP 地址即为成功。