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

Google Cloud Run部署Spring Boot应用无法发送出站请求求助

故障原因与解决方案

核心故障原因优先级从高到低:

  • 公网出口配置错误
    如果你为当前Cloud Run服务配置了VPC连接器,且路由规则设置为「所有流量均路由到VPC」,但你对应的VPC没有配置Cloud NAT、没有绑定可用的公网出口IP,所有发往公网的请求会直接被丢弃,不会到达防火墙层面,自然也不会生成防火墙日志,这和你描述的现象完全匹配。

  • 目标站点封禁GCP公网IP段
    你访问的homedepot加拿大站属于主流零售站点,有成熟的反爬策略,会主动封禁所有公有云厂商的服务器IP段,本地运行正常是因为你用的是住宅/办公网络IP,不在封禁名单里,Cloud Run默认的公网出口都是GCP的机房IP,直接访问会被对方丢弃请求,导致超时。

  • 网络参数适配问题
    Cloud Run容器环境的网络MTU为1460,默认Java的TLS握手参数没有适配云环境的网络限制,握手阶段的大包被静默丢弃,会出现SSL握手超时的报错。

  • 基础镜像缺失CA根证书
    你使用的openjdk:11-jre-slim是精简版镜像,默认未预装完整的CA根证书链,会导致部分站点的SSL证书无法被校验,握手失败。

对应解决方案

  1. 修正VPC路由配置
    进入Cloud Run服务的编辑页面,找到「连接」标签下的VPC连接器配置:
  • 如果不需要所有流量走VPC,直接将路由规则改为「仅将RFC1918私有地址范围的流量路由到VPC」,公网请求会走Cloud Run默认的公网出口
  • 如果必须走VPC出口,需要在对应VPC下创建Cloud NAT,绑定公网IP,确保VPC内的资源可以正常访问公网
  1. 验证IP封禁问题
    在同一GCP项目下创建一台同区域的临时GCE虚拟机,执行curl -v 你的目标接口地址,如果也出现超时/403报错,即可确认是对方站点封禁了GCP IP,这种情况需要对接住宅代理池转发请求,绕过IP封禁。

  2. 适配云环境JVM与HTTP客户端参数

  • 启动命令添加JVM参数,修改你的Dockerfile的CMD行为:
CMD ["java", "-Djava.net.preferIPv4Stack=true", "-Djdk.tls.maxHandshakeMessageSize=32768", "-jar", "/app.jar"]
  • 如果你继续使用WebClient,显式配置完整的超时规则:
WebClient webClient = WebClient.builder()
    .clientConnector(new ReactorClientHttpConnector(
        HttpClient.create()
            .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 30000)
            .doOnConnected(conn -> conn
                .addHandlerLast(new ReadTimeoutHandler(30))
                .addHandlerLast(new WriteTimeoutHandler(30))
            )
            .secure(spec -> spec
                .handshakeTimeout(Duration.ofSeconds(30))
                .closeNotifyFlushTimeout(Duration.ofSeconds(10))
            )
    ))
    .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
    // 其他自定义header
    .build();
  1. 补充镜像根证书
    修改你的Dockerfile,在运行时镜像层添加CA证书安装逻辑:
FROM openjdk:11-jre-slim
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates \
    && rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/target/*.jar /app.jar

ENV PORT 8080
ENV HOST 0.0.0.0

CMD ["java", "-jar", "/app.jar"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:57:02