Kubernetes应用访问域名修改后无法解析,请求技术协助
问题排查与解决方案
你遇到的curl: (6) Could not resolve host错误本质是域名解析失败,和Kubernetes内部的Ingress重写规则、Service/Deployment配置无关,核心是applicationname.namespacename.myhost这个域名没有被正确映射到你的Ingress控制器的外部IP。以下是具体排查和解决步骤:
1. 先搞定域名解析(核心问题)
不管是生产环境还是本地测试,必须确保域名能被解析到Ingress控制器的IP:
- 生产/云环境:登录你的域名服务商后台,添加一条A记录,将
applicationname.namespacename.myhost指向Ingress控制器对应的负载均衡器IP或者集群节点的公网IP。 - 本地测试环境:直接修改本地hosts文件:
- Linux/macOS:编辑
/etc/hosts,添加一行:[你的Ingress控制器IP] applicationname.namespacename.myhost - Windows:编辑
C:\Windows\System32\drivers\etc\hosts(需要管理员权限),同样添加上述映射。
- Linux/macOS:编辑
2. 验证Ingress配置的正确性
修改后的Ingress清单可以参考下面的内容(如果你的API本身就监听根路径/,rewrite-target注解其实可以省略,不会影响访问):
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: applicationname namespace: namespacename annotations: nginx.ingress.kubernetes.io/rewrite-target: / # 仅当需要路径重写时保留 spec: rules: - host: applicationname.namespacename.myhost http: paths: - path: / pathType: Prefix backend: service: name: applicationname-service port: number: 80
应用配置后,执行命令检查Ingress状态:
kubectl get ingress applicationname -n namespacename
确保输出的ADDRESS字段显示正确的Ingress控制器IP,状态为Ready。
3. 绕过DNS验证Ingress是否正常工作
如果暂时不想配置DNS,可以直接通过Host头模拟域名访问,验证Ingress和后端服务是否正常:
curl http://[Ingress控制器IP] -H "Host: applicationname.namespacename.myhost"
如果能正常返回你的Python API响应,说明K8s内部的Ingress、Service、Deployment配置都没问题,只需要搞定DNS解析即可。
4. 额外排查点
- 如果你用的是云厂商的K8s集群,确认负载均衡器的安全组/防火墙规则允许80端口的流量进入。
- 刷新本地DNS缓存,避免旧的解析记录干扰:
- Linux:
systemd-resolve --flush-caches - macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder - Windows:
ipconfig /flushdns
- Linux:
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

