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

Minikube中Kubernetes Service名称无法解析问题求助

解决Minikube中Kubernetes Service域名解析失败问题

问题背景与配置信息

问题现象

部署Ruby on Rails后端服务后,创建了ClusterIP Service flicron-backend-service暴露3000端口。通过Service IP访问正常,但在Minikube内部使用Service名称(含完整域名flicron-backend-service.default.svc.cluster.local)执行curl时,出现curl: (6) Could not resolve host错误。

后端Service详情

kubectl describe svc flicron-backend-service                      
Name:              flicron-backend-service
Namespace:         default
Labels:            io.kompose.service=flicron-backend-service
Annotations:       kompose.cmd: kompose convert -f docker-compose.yml
                   kompose.version: 1.28.0 (c4137012e)
Selector:          io.kompose.service=flicron-backend
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.107.112.244
IPs:               10.107.112.244
Port:              3000  3000/TCP
TargetPort:        3000/TCP
Endpoints:         10.244.0.144:3000
Session Affinity:  None
Events:            <none>

测试命令及结果

curl flicron-backend-service:3000
curl: (6) Could not resolve host: flicron-backend-service

curl flicron-backend-service.default.svc.cluster.local:3000
curl: (6) Could not resolve host: flicron-backend-service.default.svc.cluster.local

curl 10.107.112.244:3000
# 返回正常HTML内容

CoreDNS配置

kubectl describe cm coredns -n kube-system
Name:         coredns
Namespace:    kube-system
Labels:       <none>
Annotations:  <none>

Data
====
Corefile:
----
.:53 {
    log
    errors
    health {
       lameduck 5s
    }
    ready
    kubernetes cluster.local in-addr.arpa ip6.arpa {
       pods insecure
       fallthrough in-addr.arpa ip6.arpa
       ttl 30
    }
    prometheus :9153
    hosts {
       192.168.49.1 host.minikube.internal
       fallthrough
    }
    forward . /etc/resolv.conf {
       max_concurrent 1000
    }
    cache 30
    loop
    reload
    loadbalance
}


BinaryData
====

Events:            <none>

前端Service定义

apiVersion: v1
kind: Service
metadata:
  labels:
    io.kompose.service: flicron-frontend-service
  name: flicron-frontend-service
spec:
  selector:
    app: flicron-frontend
  type: NodePort
  ports:
    - name: http
      port: 4000
      targetPort: 4000
      nodePort: 32123

后端Service定义

apiVersion: v1
kind: Service
metadata:
  annotations:
    kompose.cmd: kompose convert -f docker-compose.yml
    kompose.version: 1.28.0 (c4137012e)
  creationTimestamp: null
  labels:
    io.kompose.service: flicron-backend-service
  name: flicron-backend-service
spec:
  # clusterIP: None
  ports:
    - name: "3000"
      port: 3000
      targetPort: 3000
  selector:
    io.kompose.service: flicron-backend # this maps this service to that deployment

解决步骤

1. 确认测试环境的正确性

Kubernetes Service域名仅在集群内部(Pod或Minikube节点内)可解析,若在本地主机执行curl,默认无法直接解析。需切换到正确环境测试:

  • 进入Minikube节点:minikube ssh,在节点内执行curl命令
  • 或进入集群内的前端Pod:kubectl exec -it <前端Pod名称> -- curl flicron-backend-service:3000

2. 检查CoreDNS运行状态

CoreDNS是Kubernetes默认DNS服务,需确保其Pod正常运行:

kubectl get pods -n kube-system -l k8s-app=kube-dns

若Pod状态异常(如CrashLoopBackOff),重启CoreDNS部署:

kubectl rollout restart deployment coredns -n kube-system

3. 验证Pod的DNS配置

进入集群内的Pod,查看DNS配置文件/etc/resolv.conf,确认包含Kubernetes DNS地址和正确搜索域:

kubectl exec -it <前端Pod名称> -- cat /etc/resolv.conf

正常配置应包含:

nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

若配置缺失,检查Pod所在节点的DNS设置,或确认Pod是否使用了自定义DNS配置。

4. 测试CoreDNS解析能力

在Pod内部用nslookup测试Service域名解析:

kubectl exec -it <前端Pod名称> -- nslookup flicron-backend-service.default.svc.cluster.local

若解析失败,查看CoreDNS日志排查错误:

kubectl logs -n kube-system -l k8s-app=kube-dns

5. 确认Service与Pod的关联

再次验证后端Pod是否匹配Service的标签选择器:

kubectl get pods -l io.kompose.service=flicron-backend

确保返回的Pod状态为Running,且IP与Service的Endpoints一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:47:06