Kubernetes集群中Pod可通过IP访问但无法通过名称访问的原因排查
K8s跨命名空间服务名访问超时、Pod IP访问正常的原因分析
集群状态判断
你的K8s集群是正常的。Pod之间能通过IP直接通信,说明CNI网络插件工作正常,节点间Pod网络连通性没问题;kube-proxy的基础转发逻辑也没有故障。
问题原因
K8s的DNS服务对Service的解析规则是:
- 同命名空间内,可直接通过服务名访问(比如demo命名空间内的Pod用
nginx就能解析到对应Service) - 跨命名空间访问时,必须使用完整域名:
服务名.命名空间名.svc.cluster.local
你在default命名空间的busybox里直接执行wget nginx,DNS会在default命名空间下查找名为nginx的Service,找不到就会解析失败,最终导致请求超时。而用Pod IP访问时,跳过了DNS解析和Service的域名映射,直接发起Pod间的网络请求,所以能成功连通。
验证方法
在busybox终端里执行完整域名的访问命令,应该就能成功:
wget -q --timeout=5 nginx.demo.svc.cluster.local -O -
内容的提问来源于stack exchange,提问作者nam
相关产品推荐
相关产品推荐

