ECS Service Connect DNS解析异常求助:admin无法访问metrics服务
环境与配置
- admin服务需调用metrics服务获取数据
- 两服务部署于同一ECS集群
- 所有任务/容器均采用
awsvpc网络模式 - 已为两服务配置Service Connect,共用命名空间
service-discovery-cluster(该命名空间已在CloudMap中存在对应条目)
已确认信息
- 两服务均可通过ALB正常对外访问
- 尝试调用域名:
http://metrics.service-discovery-cluster(含端口http://metrics.service-discovery-cluster:8084)均失败 - 使用Java Unirest库发起请求,错误信息:
java.net.UnknownHostException: metrics.service-discovery-cluster: Name or service not known
相关配置截图
- Metrics服务的Service Connect配置:

- Admin服务的Service Connect配置:

- 服务的CloudMap条目:

1. 验证Service Connect代理是否正常注入
使用awsvpc网络模式时,ECS会自动注入Service Connect Envoy代理容器到任务中。进入admin服务的业务容器,执行命令检查代理状态:
docker ps
确认是否存在名称包含ecs-service-connect-proxy的运行中容器。若不存在,检查服务的Service Connect配置是否开启启用Service Connect代理选项,同时确认任务定义的IAM角色是否具备ecs-service-connect相关权限。
2. 检查容器DNS配置
Service Connect依赖Envoy代理处理内部域名解析,需确认业务容器的DNS指向代理:
在admin服务容器内执行:
cat /etc/resolv.conf
查看是否存在nameserver 127.0.0.1(Envoy代理监听本地53端口做DNS转发)。若没有,检查任务定义是否允许ECS修改DNS配置,或是否有自定义DNS设置覆盖默认规则。
3. 确认CloudMap服务注册状态
登录CloudMap控制台,查看service-discovery-cluster命名空间下的metrics服务条目:
- 确认服务端口映射与metrics容器实际监听端口(如8084)一致
- 确认服务健康检查正常,有可用实例注册
- 确认命名空间为DNS私有命名空间,且与服务所在VPC匹配
4. 测试容器内部DNS解析
在admin服务的业务容器内执行DNS查询:
nslookup metrics.service-discovery-cluster
或
dig metrics.service-discovery-cluster
若解析失败,先排查Envoy代理是否正常运行,再确认Service Connect的服务注册是否成功;若解析成功但请求失败,检查端口配置是否正确,以及metrics服务安全组是否允许admin服务所在VPC的流量访问目标端口。
5. 检查任务执行角色权限
确保ECS任务执行角色包含以下权限:
servicediscovery:RegisterInstanceservicediscovery:DeregisterInstanceecs:DiscoverPollEndpoint
这些是Service Connect将服务注册到CloudMap的必要权限,可通过IAM控制台查看角色的权限策略是否覆盖上述动作。
6. 验证Service Connect端口与引用配置
- 检查Metrics服务的Service Connect配置:确认服务端口为容器实际监听的8084端口,客户端别名配置正确(未配置别名则直接使用服务名
metrics) - 检查Admin服务的Service Connect配置:确认已添加对Metrics服务的服务引用,且引用的服务名称、命名空间与实际一致
内容的提问来源于stack exchange,提问作者GuruK

