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

Minikube环境下Kubernetes DNS解析失败:前后端Service通信异常

问题:Minikube集群中前端无法通过Service访问后端,出现net::ERR_NAME_NOT_RESOLVED错误

我尝试用Minikube搭建一个仅包含前端和后端的小型Kubernetes集群,但运行异常。核心问题是前端无法通过定义好的Service访问后端:用minikube service simplefrontend-service创建隧道后,前端请求http://simplebackend-service:8080/时出现net::ERR_NAME_NOT_RESOLVED错误。

前端代码(React)

useEffect(() => {
async function fetchData() {
  try {
    const result = await axios.get("http://simplebackend-service:8080/");
    setData(result.data);
  } catch (error) {
    console.log(error);
  }
}

fetchData();
  }, []);

后端代码(Node.js/Express)

const express = require("express");
const app = express();
const port = 8080;
var cors = require("cors");

app.use(cors());

app.get("/", (req, res) => {
  res.send({
    hey: "hello my friend",
  });
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});

前端部署配置(simple-frontend.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: simplefrontend-deployment
  labels:
    app: simplefrontend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: simplefrontend
  template:
    metadata:
      labels:
        app: simplefrontend
    spec:
      containers:
        - name: simplefrontend
          image: image
          ports:
            - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: simplefrontend-service
spec:
  type: NodePort
  selector:
    app: simplefrontend
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 3000
      nodePort: 30100

后端部署配置(simple-backend.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: simplebackend-deployment
  labels:
    app: simplebackend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: simplebackend
  template:
    metadata:
      labels:
        app: simplebackend
    spec:
      containers:
        - name: simplebackend
          image: image
          ports:
            - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: simplebackend-service
spec:
  selector:
    app: simplebackend
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080

所有资源已通过kubectl apply -f ...部署完成,请问问题出在哪里?


解决方案

核心原因

simplebackend-service是Kubernetes集群内部的Service域名,只有集群内的Pod能通过集群DNS解析这个地址。而你通过minikube service打开的前端页面是在本地浏览器中运行的,浏览器无法识别集群内部的域名,因此出现ERR_NAME_NOT_RESOLVED错误。

解决方法一:暴露后端Service为NodePort,用Minikube IP访问

  1. 修改后端Service配置为NodePort类型:
apiVersion: v1
kind: Service
metadata:
  name: simplebackend-service
spec:
  type: NodePort
  selector:
    app: simplebackend
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
      nodePort: 30200 # 可选,不指定会自动分配端口
  1. 执行kubectl apply -f simple-backend.yaml更新配置
  2. 获取Minikube的IP地址:minikube ip,假设返回192.168.49.2
  3. 修改前端请求地址为http://192.168.49.2:30200/,重新构建前端镜像并部署

解决方法二:用Ingress统一管理外部访问(更优雅的方案)

  1. 启用Minikube的Ingress插件:minikube addons enable ingress
  2. 创建Ingress配置文件ingress.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: simple-app-ingress
spec:
  rules:
    - host: simple-app.local
      http:
        paths:
          - path: /api
            pathType: Prefix
            backend:
              service:
                name: simplebackend-service
                port:
                  number: 8080
          - path: /
            pathType: Prefix
            backend:
              service:
                name: simplefrontend-service
                port:
                  number: 3000
  1. 部署Ingress:kubectl apply -f ingress.yaml
  2. 在本地hosts文件中添加映射(Windows在C:\Windows\System32\drivers\etc\hosts,Linux/macOS在/etc/hosts):
192.168.49.2 simple-app.local # 替换为你的Minikube IP
  1. 修改前端请求地址为/api/,这样请求会通过Ingress自动转发到后端Service,重新构建部署前端

验证集群内部通信是否正常

如果想确认后端Service在集群内是可用的,可以进入前端Pod测试:

# 获取前端Pod名称
kubectl get pods
# 进入Pod执行curl命令
kubectl exec -it <simplefrontend-pod-name> -- curl http://simplebackend-service:8080/

如果能返回{"hey":"hello my friend"},说明集群内部通信没问题,问题确实是外部浏览器无法解析内部域名。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:15:33