【问题标题】:Expose GRPC server through Ingress on Google Cloud通过 Google Cloud 上的 Ingress 公开 GRPC 服务器
【发布时间】:2018-01-12 23:08:47
【问题描述】:

我正在尝试从我的 GKE 集群向外界公开一个 GRPC Java 服务,该服务被认为是一个 Ingress。

问题在于 GKE 的默认实现会创建一个运行状况检查,该检查预期在卷曲“/”时会出现 200 个响应代码。预计并记录在here

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

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

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

【问题讨论】:

    标签: java kubernetes google-cloud-platform google-kubernetes-engine grpc


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      可以通过定义自定义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,则该 pod 被视为健康的。如果 /tmp/healthy 中存在文件,此示例会将 pod 视为活动的:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-13
        • 2021-07-21
        • 1970-01-01
        • 1970-01-01
        • 2018-09-16
        • 2021-05-05
        • 2020-03-19
        • 1970-01-01
        相关资源
        最近更新 更多