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

同一K8s命名空间内NextJS Pod调用其他Pod API失败求助

同Kubernetes命名空间内NextJS应用调用后端API失败问题

我将NextJS应用部署到Kubernetes开发集群的指定命名空间中,执行kubectl get all --namespace [my-namespace]可看到Pod状态正常:

NAME                                       READY   STATUS     RESTARTS  AGE
pod/[my-namespace]-[my-nextjs-app]-[podId]  1/1     Running    0         3d

同时该命令返回同命名空间内后端应用的Service信息:

NAME                TYPE      CLUSTER-IP        EXTERNAL-IP  PORT(S)   AGE
service/second-app  ClusterIP 172...{restOfIP}   <none>      8083/TCP  304d

执行kubectl port-forward my-nextjs-app-<podID> 3000:3000 -n [my-namespace]后,本地3000端口可正常访问NextJS应用UI,但调用后端API时返回“Network Error”“Axios Error”,无数据返回。

配置详情

NextJS应用中调用API的URL为"http://second-app:8083/{restOfApiUrl...}",环境变量配置方式如下:

1. ConfigMap配置(#{myNextJsRepo}/k8s/environments/development/configmap.yaml)

apiVersion: v1
kind: ConfigMap
metadata:
    name: my-nextjs-app
data:
    second-app-host: second-app
    second-app-port: '8083' 

2. Deployment配置(#{myNextJsRepo}/k8s/application/deployment.yaml)

containers:
                - image: my-nextjs-app:latest
                  imagePullPolicy: IfNotPresent
                  name: my-nextjs-app
                  env:
                      - name: NEXT_PUBLIC_SECOND_APP_HOST
                        valueFrom:
                            configMapKeyRef:
                                name: my-nextjs-app
                                key: second-app-host
                      - name: NEXT_PUBLIC_SECOND_APP_PORT
                        valueFrom:
                            configMapKeyRef:
                                name: my-nextjs-app
                                key: second-app-port
                  ports:
                      - containerPort: 3000

3. Next.js配置文件(#{myNextJsRepo}/next.config.js)

/** @type {import('next').NextConfig} */

module.exports = {
    env: {
        NEXT_PUBLIC_SECOND_APP_HOST: 'second-app',
        NEXT_PUBLIC_SECOND_APP_PORT: '8083',
    },
};

已尝试的解决方案

  • 将环境变量替换为后端Service的实际ClusterIP,调用http://172{...restOfSecondAppIP}:8083/{restOfApiUrl...}仍失败;
  • 仅保留Kubernetes环境变量,移除next.config.js中的配置,结果API调用URL变为http://undefined:undefined/{restOfApiUrl...};
  • 同时端口转发后端应用,问题未解决;
  • 仅当端口转发后端应用(kubectl port-forward second-app-<podID> 8083:8083 -n my-namespace)并将环境变量改为localhost,调用http://localhost:8083/{restOfApiUrl...}时可获取数据,但这是通过本地而非集群网络访问,不符合要求。

期望目标

实现同Kubernetes开发集群同命名空间内,NextJS Pod直接调用后端Pod的API并获取数据。

补充:NextJS应用Service配置(service.yaml)

apiVersion: v1
kind: Service
metadata:
  name: my-nextjs-app
  labels:
    app: my-nextjs-app
spec:
  type: NodePort
  ports:
  - port: 3000
    name: http
  selector:
    app: my-nextjs-app

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:47:08