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

Cloud Run部署的Python服务发起外部请求遇SSL错误求助

Cloud Run Python服务调用外部API遇SSL EOF错误的解决办法

问题总结

部署在Cloud Run的Python Web服务调用外部API(如Google Maps API)时触发SSL错误,错误信息如下:

requests.exceptions.SSLError: HTTPSConnectionPool(host='plus.codes', port=443): Max retries exceeded with url: /api?address=78G9%2B2Q%2C%20Orem%2C%20UT%2C%20USA&key=xxxxxxxx (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1007)')))

本地Docker容器运行正常,已尝试开放所有出站Ingress/Egress规则但无效,怀疑和Cloud Run的TLS配置相关。


解决方案

1. 强制指定TLS版本

Cloud Run运行环境对TLS版本可能有要求,部分外部API仅支持TLS 1.2及以上版本,可通过自定义适配器强制requests使用指定TLS版本:

import requests
from requests.adapters import HTTPAdapter
from urllib3.poolmanager import PoolManager
import ssl

class TLSAdapter(HTTPAdapter):
    def init_poolmanager(self, connections, maxsize, block=False):
        self.poolmanager = PoolManager(
            num_pools=connections,
            maxsize=maxsize,
            block=block,
            ssl_version=ssl.PROTOCOL_TLSv1_2
        )

# 创建会话并挂载适配器
session = requests.Session()
session.mount('https://', TLSAdapter())

# 使用该会话发起请求
response = session.get("你的外部API地址")

2. 更新容器内CA根证书

容器镜像可能缺少最新的CA证书,导致无法验证外部API的SSL证书。在Dockerfile中添加更新步骤:

  • 若使用Debian/Ubuntu镜像:
RUN apt-get update && apt-get install -y --no-install-recommends ca-certificates && update-ca-certificates
  • 若使用Alpine镜像:
RUN apk add --no-cache ca-certificates && update-ca-certificates

3. 排查VPC连接器配置(若使用)

如果你的Cloud Run服务配置了VPC连接器,需确认VPC的防火墙规则允许出站443端口访问公网。未使用VPC连接器的话,Cloud Run默认允许所有出站流量,无需额外配置。

4. 澄清Cloud Run TLS文档的误解

你提到的文档是针对入站请求的:Cloud Run会自动处理外部到服务的TLS终止,你的服务只需监听HTTP端口(如8080)即可,无需在容器内配置HTTPS。这和你发起出站请求的TLS问题无关,出站调用外部API必须使用HTTPS。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:56:28