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

运行Azure版K8s教程时GKE无法curl访问Pod端点原因咨询

问题根因定位

你遇到的问题和CoreDNS/KubeDNS、ServiceAccount权限完全无关,由两个操作错误导致:

  1. 你执行kubectl get endpoints查询的服务名是hello-world-clusterip,但你实际部署的Service名称是hello-world-customdns,名称不匹配自然无法查询到对应端点,导致PODIP变量为空,curl命令执行失败。
  2. Kubernetes集群内的PodIP属于集群内部私有地址段,你如果是在集群外(比如本地终端)直接访问,三层网络本身就是不通的,和服务配置无关。

补充GKE DNS说明

当前GKE 1.14及以上版本默认已使用CoreDNS作为集群DNS组件,仅非常老旧的GKE版本才默认使用KubeDNS,无论使用哪一种DNS组件,都不会影响kubectl get endpoints的查询结果,也不会影响PodIP的直接连通性,DNS组件仅负责集群内的域名解析。

提示:你当前Deployment里配置的dnsPolicy: None和自定义nameserver只会影响该Deployment下Pod自身的DNS解析行为,不影响本次的问题排查,如果你后续需要测试集群内部服务域名解析,需要修改该配置为默认的ClusterFirst。

修复操作步骤

  1. 修正端点查询命令,替换为你实际创建的服务名:
export PODIP=$(kubectl get endpoints hello-world-customdns -o jsonpath='{ .subsets[].addresses[].ip}')

如果部署了多个副本,该命令会返回所有Pod的IP,你可以调整jsonpath取第一个IP即可。

  1. 要测试Pod端口连通性,需要在集群内部环境执行curl,推荐使用临时测试Pod的方式:
kubectl run -it --rm --restart=Never busybox --image=busybox:1.28 -- curl http://$PODIP:8080
  1. 如果需要从本地直接访问服务,可以使用port-forward端口转发:
kubectl port-forward service/hello-world-customdns 8080:80

执行后本地访问http://127.0.0.1:8080即可获取服务响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:06:03