Node.js应用连接本地单节点K8s的NATS服务报EAI_AGAIN错误
问题根因
- 域名解析环境不匹配:
nats-service是Kubernetes集群内部的Service域名,仅集群内部运行的Pod可以通过CoreDNS完成解析,你当前直接在Windows宿主机运行NestJS应用,宿主机未接入K8s集群DNS体系,无法解析该域名,直接触发EAI_AGAINDNS解析失败错误。 - 基础设施状态异常:你提供的
docker version输出显示Docker Desktop的Linux引擎连接失败,说明Docker运行状态异常,你部署的NATS相关资源没有正常启动。从kubectl describe nodes的运行Pod列表也可以验证,default命名空间下没有任何NATS相关Pod在运行。
解决方案
根据你的运行需求选择对应方案:
方案1:NestJS应用保留在本地宿主机调试
- 执行端口转发命令,将集群NATS服务端口映射到本地:
kubectl port-forward service/nats-service 4222:4222
- 修改
main.ts中的NATS连接地址为:
servers: 'nats://localhost:4222'
方案2:整套服务都部署在K8s集群内运行
- 先重启Docker Desktop,执行
docker version确认无报错,Docker运行状态恢复正常 - 重新提交NATS配置:
kubectl apply -f <你的nats配置yaml文件名>
执行kubectl get pods -n default确认NATS Pod状态为Running
- 将NestJS应用打包为Docker镜像,编写对应的Deployment配置部署到default命名空间下,不需要修改NATS连接地址,集群内可直接解析
nats-service域名。
内容的提问来源于stack exchange,提问作者msrumon
相关产品推荐
相关产品推荐

