GCP内部负载均衡器是否支持搭配Serverless NEG使用gRPC?
问题解决:Cloud Run + 内部ILB RPC错误排查
核心问题
你碰到的rpc error: code = Unknown desc =是因为协议不匹配——Serverless NEG对接Cloud Run时,ILB必须用HTTP/2和Cloud Run通信,但你当前的ILB转发规则大概率用的是HTTP/1.1,导致握手失败。
分步修复
1. 修改ILB转发规则为HTTP/2
Serverless NEG本身不需要指定协议,但ILB的转发规则必须和Cloud Run的默认监听协议(HTTP/2)对齐。直接更新转发规则:
gcloud compute forwarding-rules update [你的转发规则名] \ --region [你的区域] \ --protocol HTTP2
2. 确认Cloud Run的访问权限配置
确保Cloud Run已经开了internal/cloud-load-balancing访问,并且允许未认证入口(如果内部客户端不需要OAuth认证):
gcloud run services describe [你的Cloud Run服务名] \ --region [你的区域] \ --format="value(status.accessSettings.ingress,status.accessSettings.internalIngress)"
输出要包含all(对应允许未认证)和internal/cloud-load-balancing,不对的话用gcloud run services update调整。
3. 验证内部DNS指向
你用的内部DNS必须指向ILB的内部IP,而不是Cloud Run的默认域名。去VPC的私有DNS区域里检查A记录,确保自定义域名正确映射到ILB的IP。
4. 日志排查兜底
如果还是不行,去Cloud Run的日志里过滤loadbalancer关键词,能看到更详细的错误细节,比如协议不匹配的具体提示。
额外提醒
Cloud Run虽然兼容HTTP/1.1的客户端请求,但ILB作为中间层和Cloud Run通信时必须用HTTP/2,这是Serverless NEG的硬性要求,之前没指定协议的地方其实是被默认规则覆盖了,只是没显示出来。
内容的提问来源于stack exchange,提问作者August
相关产品推荐
相关产品推荐

