部署至Cloud Run后Envoy外部认证出现上游连接错误求助
问题定位与修复方案
核心问题
你的Envoy集群配置缺少TLS加密配置,Cloud Run服务仅接受HTTPS/加密的gRPC请求,而当前配置直接以明文方式连接443端口,导致连接失败。
具体修复步骤
1. 为auth集群添加TLS配置
在cluster配置中加入tls_context,启用对Cloud Run服务的加密连接:
- name: auth type: STRICT_DNS lb_policy: ROUND_ROBIN typed_extension_protocol_options: envoy.extensions.upstreams.http.v3.HttpProtocolOptions: "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions explicit_http_config: http2_protocol_options: { } # 新增TLS配置 transport_socket: name: envoy.transport_sockets.tls typed_config: "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext sni: cloud-run-address # 替换为你的Cloud Run认证服务域名 common_tls_context: validation_context: trusted_ca: filename: /etc/ssl/certs/ca-certificates.crt # 使用容器内置的根证书 load_assignment: cluster_name: auth endpoints: - lb_endpoints: - endpoint: address: socket_address: address: cloud-run-address port_value: 443
2. 验证Envoy容器的根证书
确保你的Envoy Docker镜像包含系统根证书(大多数官方Envoy镜像默认包含),如果没有,需要在Dockerfile中添加安装证书的步骤:
FROM envoyproxy/envoy:v1.24-latest RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
3. 可选:优化DNS解析策略
Cloud Run服务域名会解析到多个动态IP,可添加dns_refresh_rate确保Envoy及时更新IP列表:
dns_refresh_rate: 30s
本地正常的原因
本地环境中你的认证服务可能未启用HTTPS(或使用明文端口),Envoy明文连接可正常建立;但Cloud Run强制要求加密通信,缺少TLS配置就会触发连接失败。
内容的提问来源于stack exchange,提问作者Baki
相关产品推荐
相关产品推荐

