通过谷歌云上的Ingress公开GRPC服务器

问题描述:

我想从我的GKE群集中公开一个认为Ingress到外部世界的GRPC Java服务。通过谷歌云上的Ingress公开GRPC服务器

问题是,GKE的默认实现会创建一个运行状况检查,期望卷曲“/”上有200个响应代码。预计和记录here

不幸的是,这似乎不适用于grpc-java实施,因为它没有处理“/​​”GET请求。

GRPC本身定义了一个health checking protocol。但它也不支持。

我不知道是否有类似“kubernetes.io/ingress.global-static-ip-name”的秘密注释,但至少禁用健康检查(理想上覆盖它们)。

似乎目前GCP HTTP负载平衡器doesn't support HTTP/2。所以我最终只是通过LoadBalancer而不是NodePort + Ingress公开我的服务。

注意:您在loadBalancerIP中提供的静态IP应该是REGIONAL。对于多区域静态IP,我的服务的外部IP始终处于挂起状态。

可以通过定义自定义liveness/readiness probes来更改运行状况检查。通过这种方式,您可以定义自定义终结点以进行运行状况检查。下面是从文档样本:

livenessProbe: 
    httpGet: 
    path: /healthz 
    port: 8080 
    httpHeaders: 
    - name: X-Custom-Header 
     value: Awesome 
    initialDelaySeconds: 3 
    periodSeconds: 3 

如果你需要的东西不是一个简单的HTTP检查功能更强大,可以构建具有“EXEC”探测器,而不是“HTTPGET”。使用exec,您可以在容器中使用Linux命令或自定义CLI脚本来查询您的API或以其他方式验证系统状态。如果命令/脚本返回0,则认为吊舱健康。如果文件存在于/ tmp/healthy中,此示例将查看该活动目录为活动目录:

livenessProbe: 
    exec: 
    command: 
    - cat 
    - /tmp/healthy 
    initialDelaySeconds: 5 
    periodSeconds: 5