同一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
相关产品推荐
相关产品推荐

