You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes同集群API通过HTTPS域名调用gRPC报name or service not known

Kubernetes集群内跨服务调用域名解析故障修复方案

问题场景:Kubernetes集群中同时部署API服务与gRPC服务,gRPC配置了公网子域名,本地通过HTTPS、公网IP均可正常访问gRPC,但同集群内的API服务调用gRPC时抛出name or service not known错误。

该故障属于典型的集群内部DNS解析异常,公网能访问是因为请求走了Ingress暴露的公网链路,集群内请求默认走CoreDNS做内部解析,不会默认同步公网域名解析规则。

故障排查与修复步骤

    1. 优先改用集群内部服务域名调用
      同集群内服务调用不需要走公网,直接使用K8s默认的内部服务域名即可,格式为{gRPC服务名}.{服务所在命名空间}.svc.cluster.local:{服务端口},例如gRPC服务在default命名空间,Service名为grpc-svc,监听端口为9000,调用地址填grpc-svc.default.svc.cluster.local:9000即可。
    1. 确需使用公网子域名调用的修复方案
      如果业务逻辑必须使用配置的公网子域名调用,可通过两种方式修复:
    • 给gRPC服务的Ingress资源添加注解external-dns.alpha.kubernetes.io/internal-hostname: {你的gRPC公网子域名},让内部DNS同步该域名的解析记录
    • 修改CoreDNS配置,添加公网子域名的重写规则,指向内部Service的ClusterIP
    1. 排查Pod DNS配置异常
      如果修改调用地址后仍报错,进入API服务的Pod执行nslookup {目标调用地址}命令验证解析是否正常:
    • 若解析失败,检查API服务Pod的dnsPolicy配置,默认值应为ClusterFirst,不要误配置为Default或None
    • 执行kubectl get pods -n kube-system -l k8s-app=kube-dns检查CoreDNS服务运行状态,确保所有CoreDNS Pod处于Running状态
    1. 排查gRPC Service配置错误
      执行kubectl get svc -n {gRPC服务所在命名空间}确认gRPC对应的Service资源存在,且spec.ports配置的端口与gRPC进程监听端口一致,spec.selector标签能正确匹配到gRPC的Pod实例。

最优实践

同集群内微服务调用优先走内部Service域名,不需要经过公网Ingress转发,网络延迟更低、安全性更高,也不会出现公网域名在集群内解析失败的问题。

内容的提问来源于stack exchange,提问作者MM-Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:54:06