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

GKE部署下React调用Spring Boot API出现ERR_NAME_NOT_RESOLVED错误求助

问题根源

浏览器运行在用户本地环境,不属于GKE集群内部,无法解析Kubernetes集群的内部服务域名(比如imageupload-service、imageupload-service.default.svc.cluster.local)。而前端Pod属于集群内部网络,所以curl能正常访问后端服务。

解决方案

以下是几种可行的处理方式:

1. 为后端服务配置Ingress暴露外部访问地址

  • 给后端Spring Boot服务创建Ingress资源,通过GKE的Ingress Controller暴露可被外部访问的域名或IP,前端直接调用这个外部地址。
  • 示例Ingress配置(YAML):
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: backend-ingress
  annotations:
    kubernetes.io/ingress.class: "gce" # GKE默认Ingress类
spec:
  rules:
  - http:
      paths:
      - path: /api/v1/*
        pathType: Prefix
        backend:
          service:
            name: imageupload-service
            port:
              number: 9595
  • 部署后执行kubectl get ingress获取外部IP,前端API地址改为http://<外部IP>/api/v1/user-profile。

2. 前端集成Nginx做反向代理(生产环境)

  • 修改前端Dockerfile,集成Nginx,通过Nginx配置将前端的API请求转发到集群内部的后端服务:
    • 示例Nginx配置(nginx.conf):
server {
  listen 80;
  root /usr/share/nginx/html;
  index index.html;

  location /api/ {
    proxy_pass http://imageupload-service:9595/api/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }

  location / {
    try_files $uri $uri/ /index.html;
  }
}
  • 前端代码中只需调用相对路径/api/v1/user-profile,Nginx会自动将请求转发到后端集群内部服务。

3. 使用NodePort类型暴露后端服务

  • 将后端服务改为NodePort类型,通过GKE节点IP+NodePort访问:
    • 修改后端Service配置:
apiVersion: v1
kind: Service
metadata:
  name: imageupload-service
spec:
  type: NodePort
  ports:
  - port: 9595
    targetPort: 9595
    nodePort: 30000 # 可选,端口范围需在30000-32767之间
  selector:
    app: imageupload
  • 前端API地址改为http://<GKE节点IP>:30000/api/v1/user-profile,需确保节点IP可被外部访问,且防火墙开放对应NodePort。
验证建议

部署完成后,先在本地浏览器直接访问后端的外部地址,确认API能正常返回预期的JSON响应,再测试前端页面的调用逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:46:20