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

Kubernetes服务访问异常排查:DNS超时及外部服务访问问题

Kubernetes服务访问与DNS问题排查方案

一、核心DNS超时问题排查

你的Golang服务报错dial tcp: lookup mosquitto on 10.96.0.10:53: read udp 10.36.0.1:49071->10.96.0.10:53: i/o timeout,说明Pod无法访问Kubernetes默认的CoreDNS服务(10.96.0.10为CoreDNS的ClusterIP),按以下步骤排查:

  1. 检查CoreDNS运行状态

    • 查看CoreDNS Pod是否正常运行:
      kubectl get pods -n kube-system -l k8s-app=kube-dns
      
    • 查看CoreDNS日志,排查是否有异常:
      kubectl logs -n kube-system -l k8s-app=kube-dns
      
  2. 验证Pod的DNS配置

    • 进入Golang项目Pod,查看DNS配置文件:
      kubectl exec -it <golang-pod-name> -n production -- cat /etc/resolv.conf
      
      正常配置应包含:
      nameserver 10.96.0.10
      search production.svc.cluster.local svc.cluster.local cluster.local
      
  3. 测试DNS解析与连通性

    • 在Golang Pod内ping CoreDNS IP,确认网络可达:
      kubectl exec -it <golang-pod-name> -n production -- ping 10.96.0.10
      
    • 用完整域名测试服务解析(跨Namespace访问必须用完整域名):
      kubectl exec -it <golang-pod-name> -n production -- nslookup mosquitto.production.svc.cluster.local
      

二、服务与Pod间连通性排查

  1. 确认服务与Pod的关联状态

    • 检查mosquitto的后端Pod是否存活:
      kubectl get pods -n production -l app.kubernetes.io/instance=mosquitto,app.kubernetes.io/name=mosquitto
      
  2. 跳过服务直接访问Pod

    • 在Golang Pod内直接访问mosquitto Pod的IP和端口,排除服务层问题:
      kubectl exec -it <golang-pod-name> -n production -- nc -zv 10.44.0.1 1883
      
  3. 检查网络策略限制

    • 确认production命名空间是否存在网络策略,阻止了Pod间通信:
      kubectl get networkpolicy -n production
      
      若存在策略,需确保允许Golang Pod访问mosquitto的1883端口。

三、外部虚拟机服务访问问题排查

对于K8s内Pod无法访问虚拟机上的mosquitto:

  1. 验证节点与虚拟机的网络连通性

    • 在任意K8s节点上ping虚拟机外部IP:
      ping <虚拟机外部IP>
      
  2. 检查虚拟机防火墙/安全组

    • 确保虚拟机的1883端口对外开放,允许K8s集群的Pod CIDR(如10.36.0.0/16、10.44.0.0/16)访问。
  3. 检查K8s集群出站规则

    • 若为云环境,确认集群节点的安全组允许出站到虚拟机IP的1883端口。

四、Helm测试失败问题排查

helm test demo报错wget: bad address 'demo:80'同样是DNS解析问题,按以下步骤排查:

  1. 确认demo服务是否正常创建:
    kubectl get svc demo -n <demo-namespace>
    
  2. 若测试Pod未被清理,进入Pod内验证DNS解析:
    kubectl exec -it <demo-test-pod> -n <demo-namespace> -- nslookup demo
    
  3. 检查测试Pod的/etc/resolv.conf配置是否正确。

内容的提问来源于stack exchange,提问作者Felipe Flores

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:55:18