为什么我在 GCP GKE 中的 gRPC pod 会导致 502?

问题描述 投票:0回答:1

我在 GKE 中有一个 pod,其中有一个监听两个端口的容器。一种接受 http 请求,另一种是 gRPC 端点。我在K8S服务上有这些注释:

cloud.google.com/app-protocols: '{"grpc":"HTTP2"}'
cloud.google.com/neg: '{"ingress": true, "exposed_ports": {"9520":{}}}'
cloud.google.com/backend-config: '{"ports": {"grpc":"api-grpc-backend"}}'

据我所知,注释应该将 gRPC 端口指向自定义运行状况检查,并将 GCP LB 和 gRPC 后端之间的协议设置为 HTTP2。

我有这个自定义后端运行状况检查,以强制 gRPC 端点的运行状况检查改为侦听 http 端点上的运行状况:

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: api-grpc-backend
spec:
  healthCheck:
    checkIntervalSec: 15
    port: 8000
    type: HTTP
    requestPath: /health

gRPC 后端正在通过健康检查,并且后端在 GCP 中显示健康:

但是,尝试使用 grpcurl 到达端点会返回

unexpected HTTP status code received from server: 502 (Bad Gateway); transport: received unexpected content-type "text/html; charset=UTF-8"

我做错了什么?

kubernetes google-cloud-platform google-kubernetes-engine grpc kubernetes-ingress
1个回答
0
投票

您可能想看一下这个文档,其中显示不支持 gRPC 协议在健康检查中的限制,而支持类似 HTTP 的健康检查。

文档提供了此设置的 yaml 配置,并描述了使用 InstanceGroup 后端或 NetworkEndpointGroup (NEG) 后端时配置中的细微差别。

© www.soinside.com 2019 - 2024. All rights reserved.