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

Kubernetes部署中Laravel调用Google Maps API遇SSL证书验证失败问题

解决Kubernetes上Laravel调用Google地理编码API的SSL证书验证失败问题
  • 确认容器内的CA证书路径与配置
    不要仅在宿主机添加Google根CA证书,需确保证书被添加到容器内部的信任存储中。不同PHP镜像的默认信任路径有差异:

    • Debian/Ubuntu系镜像:通常指向/etc/ssl/certs/ca-certificates.crt,可将证书复制到/usr/local/share/ca-certificates/后执行update-ca-certificates更新信任链
    • RHEL/CentOS系镜像:通常指向/etc/pki/tls/certs/ca-bundle.crt,可将证书内容追加到该文件中
      验证容器内证书是否生效:执行openssl s_client -connect maps.google.com:443 -CAfile /path/to/your-ca-file,若返回Verify return code: 0 (ok)则配置正确
  • 检查PHP/Laravel的证书配置
    PHP的curl或Guzzle客户端可能单独指定证书路径,需同步配置:

    1. 编辑php.ini,设置curl.cainfo = "/path/to/ca-certificates.crt"和openssl.cafile = "/path/to/ca-certificates.crt"
    2. 若使用Laravel HTTP客户端,可在请求时指定证书路径,或在config/services.php中全局配置:
      'guzzle' => [
          'verify' => '/etc/ssl/certs/ca-certificates.crt',
      ],
      
  • 排查Kubernetes网络层拦截
    如果集群使用代理、Istio等Sidecar组件,可能会拦截SSL请求并替换证书:

    • 若存在代理,需将代理的CA证书也加入容器信任存储
    • 若使用Istio,需配置DestinationRule允许maps.google.com的SSL直通,避免Sidecar重加密
  • 验证证书链完整性
    部分场景下仅添加根CA不够,需确保完整的证书链(根CA+中间CA):
    在容器内执行openssl s_client -connect maps.google.com:443,查看输出的Certificate chain部分,确认所有中间证书都已包含在信任存储中。若缺失,需下载对应中间CA证书并添加

  • 确保镜像一致性
    本地Docker运行正常但K8s异常,可能是K8s使用的镜像未包含证书配置:
    修改Dockerfile,将证书打包进镜像:

    # 假设证书文件为google_ca.crt
    COPY google_ca.crt /usr/local/share/ca-certificates/
    RUN update-ca-certificates
    

    重新构建镜像并推送到仓库,更新K8s部署的镜像版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:24:28