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

Kind集群本地部署Next.js遇NGINX 502 Bad Gateway错误

解决Next.js应用在Kind集群中Ingress返回502 Bad Gateway的问题

根据你提供的信息,核心问题是Ingress-nginx无法连接到Next.js Pod的3000端口(日志显示connect() failed (111: Connection refused)),但kubectl port-forward能正常访问,说明Pod内的服务仅对容器内部可见,外部无法连接。以下是具体排查和修复步骤:

1. 关键原因:Next.js服务绑定地址限制

Next.js的standalone模式默认会将服务绑定到127.0.0.1(仅容器内部可访问),而Ingress-nginx Pod属于集群内的其他节点/容器,无法访问这个地址。需要强制服务绑定到0.0.0.0,允许外部连接。

2. 修复方案

方案一:修改Dockerfile添加HOST环境变量

在runner阶段添加ENV HOST 0.0.0.0,确保服务监听所有网络接口:

# Runner
FROM base AS runner
WORKDIR /app

ENV NODE_ENV production
ENV NEXT_TELEMETRY_DISABLED 1
# 指定服务绑定所有网络接口
ENV HOST 0.0.0.0

RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs

USER nextjs

COPY --from=builder /app/public ./public

COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static

EXPOSE 3000

ENV PORT 3000

CMD ["node", "server.js"]

方案二:在Deployment中添加环境变量

如果不想重新构建镜像,可以直接在Deployment的容器配置中添加HOST环境变量:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nextjs-app
  labels:
    app: nextjs-app
spec:
  selector:
    matchLabels:
      app: nextjs-app
  replicas: 2
  template:
    metadata:
      labels:
        app: nextjs-app
    spec:
      containers:
        - name: nextjs-app
          image: myImage
          imagePullPolicy: Always
          ports:
            - containerPort: 3000
          # 添加环境变量指定服务绑定地址
          env:
            - name: HOST
              value: "0.0.0.0"
          resources:
            limits:
              memory: "100Mi"
              cpu: "100m"

3. 验证步骤

  1. 重新部署应用:
    kubectl apply -f deployment.yaml
    # 若修改了Dockerfile,需重新构建推送镜像后再执行部署
    
  2. 查看Pod日志,确认服务启动时绑定的地址为0.0.0.0:3000:
    kubectl logs nextjs-app-<pod-id>
    
    正常日志应包含类似ready started server on 0.0.0.0:3000, url: http://localhost:3000的内容。
  3. 再次通过Ingress访问应用,验证502错误是否消失。

其他排查点(若上述方案无效)

  • 检查Pod资源使用情况:kubectl top pod nextjs-app-<pod-id>,确认内存/CPU限制是否足够支撑服务启动(100Mi内存可能偏紧,可临时调高测试)。
  • 确认Ingress Controller版本与Kubernetes版本兼容:Kind集群的Kubernetes版本需与Ingress-nginx版本匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:43:24