我在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后端之间的协议设置为HTTP 2。
我有这个自定义的后端健康检查,强制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"
。
我做错了什么?
1条答案
按热度按时间dxxyhpgq1#
你可能想看看这个documentation,它显示了gRPC协议在健康检查中的限制不受支持,而支持类似HTTP的健康检查。这种情况有两个选项。
在单独的端口上运行代理,将HTTP运行状况检查请求转换为gRPC,然后将转换后的请求转发到提供gRPC运行状况检查的应用程序端口。在使用HTTP的单独端口上运行专用的运行状况检查器。此运行状况检查器直接响应运行状况检查请求,而不是对它们进行拦截。
对于代理运行状况检查的http:
字符串
对于非代理运行状况检查
型
该文档提供了此设置的yaml配置,并描述了使用InstanceGroup后端或NetworkEndpointGroup(NEG)后端时配置中的细微差别。