microk8s集群通过服务名访问报错Could not resolve host如何解决
问题原因
Kubernetes 内置的服务名DNS解析能力仅对集群内部Pod网络生效,你直接在宿主机节点执行curl访问服务名时,宿主机默认未配置K8s集群的CoreDNS作为解析服务器,因此无法解析httpenv这个服务域名。你的Deployment、Service创建逻辑均无问题,ClusterIP可正常访问也验证了服务本身运行正常。
排查&验证步骤
第一步:确认microk8s DNS插件已开启
执行以下命令检查DNS插件状态:microk8s status | grep dns若输出为
dns: enabled则正常,若未开启执行以下命令启用:microk8s enable dns第二步:集群内部验证服务名解析
启动一个临时测试Pod进入集群网络环境测试:microk8s kubectl run -it --rm --image busybox:1.28 test-dns -- sh在Pod终端内执行以下两个验证命令:
- 验证域名解析:
nslookup httpenv.default.svc.cluster.local正常输出会返回你之前查到的
httpenv服务的ClusterIP10.152.183.91
2. 验证服务访问:wget -qO- httpenv:8888正常会返回HTTP 200响应内容。
补充说明
Kubernetes服务名的完整域名格式为<服务名>.<命名空间>.svc.cluster.local,同一命名空间下的Pod可以省略后缀直接用服务名访问,跨命名空间访问需要加上对应命名空间后缀。
如果需要在宿主机临时使用服务名访问,可以将集群CoreDNS的IP添加到宿主机/etc/resolv.conf的nameserver列表最前面,CoreDNS的IP可通过microk8s kubectl get svc kube-dns -n kube-system查询。
内容的提问来源于stack exchange,提问作者pomer
相关产品推荐
相关产品推荐

