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

在OpenShift部署Spring Maven应用时遭遇502 Bad Gateway问题求助

问题排查:OpenShift部署Spring Boot应用后返回502 Bad Gateway

我有一个基于Java 17的通用Hello World Spring Maven应用,本地构建Docker镜像并运行正常。部署到OpenShift后,Pod日志显示应用已成功启动,但访问对应URL时返回“502 Bad Gateway”错误,需要排查配置中的问题。

应用相关信息

  • 基于Java 17的Spring Boot Maven Hello World应用
  • Dockerfile内容:
from amazoncorretto:17-alpine-jdk as application-builder
#copy project
RUN mkdir /project
COPY . /project
RUN apk add maven
#get project and package it up
WORKDIR /project
RUN mvn clean package

from amazoncorretto:17-alpine-jdk as application-runner
COPY --from=application-builder /project/target/colosseo-api-toolbelt-0.0.1-SNAPSHOT.jar /project/target/colosseo-api-toolbelt-0.0.1-SNAPSHOT.jar
EXPOSE 8080
CMD ["java","-jar","/project/target/colosseo-api-toolbelt-0.0.1-SNAPSHOT.jar"]
  • 部署脚本:
docker build -t spring-hello-world-maven .

oc project $OC_PROJECT
OC_PATCH_STATUS=$(oc patch deploymentconfig spring-hello-world-maven -p "{\"spec\":{\"template\":{\"spec\":{\"containers\":[{\"name\":\"spring-hello-world-maven\",\"image\": \"spring-hello-world-maven\"}]}}}}")
echo $OC_PATCH_STATUS
if [[ "$OC_PATCH_STATUS" == *"not patched" ]]; then
 oc rollout latest dc/$SELECTOR
 oc rollout status dc/$SELECTOR
fi
oc logout

排查步骤

1. 检查服务与路由的端口映射配置

  • 验证服务(Service)是否正确关联Pod:
    oc get svc spring-hello-world-maven -o yaml
    
    确认spec.selector匹配Pod的标签,ports配置里的targetPort为8080(和容器暴露端口一致)。
  • 检查路由(Route)是否正确指向服务:
    oc get route spring-hello-world-maven -o yaml
    
    确认spec.to.name是对应的服务名,port.targetPort与服务端口一致。

2. 验证容器内应用的监听状态

  • 进入运行中的Pod,检查端口监听情况:
    oc rsh <你的Pod名称>
    netstat -tulpn | grep 8080
    
    或者用ss命令替代:
    ss -tulpn | grep 8080
    
    必须确保应用监听的是0.0.0.0:8080,如果仅监听127.0.0.1,外部无法访问。

3. 排查网络策略限制

  • 检查是否有网络策略阻止外部访问:
    oc get networkpolicy
    
    如果存在限制策略,需确保允许OpenShift路由控制器(openshift-ingress命名空间下的Pod)访问你的应用Pod。

4. 修复部署脚本的变量与镜像问题

  • 部署脚本中$SELECTOR变量未定义,会导致oc rollout命令执行失败,需替换为实际的DeploymentConfig名称spring-hello-world-maven。
  • OpenShift无法直接访问本地Docker镜像,需将镜像推送到OpenShift可访问的仓库:
    # 获取OpenShift内部镜像仓库地址
    oc registry info
    # 给镜像打标签
    docker tag spring-hello-world-maven <仓库地址>/<项目名>/spring-hello-world-maven
    # 推送镜像
    docker push <仓库地址>/<项目名>/spring-hello-world-maven
    
    之后在DeploymentConfig中使用推送后的完整镜像地址。

5. 确认Spring Boot应用的监听配置

  • 检查应用日志中是否有类似Tomcat started on port(s): 8080 (http) with context path ''的记录,确认监听地址为0.0.0.0(默认配置,但如果有自定义配置需核实)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:09:24