3

如何让 Cloud Run for Anthos 将传入的 HTTP2 请求作为 HTTP2 而不是 HTTP/1.1 转发到 Cloud Run 服务?

我正在使用 GCP 和 Cloud Run for Anthos 来部署运行 GRPC 服务器的 Java 应用程序。Cloud Run 应用程序是公开的。我还使用 SSL 证书配置了 Cloud Run for Anthos。当我尝试使用 GRPC 客户端调用我的服务时,客户端通过负载均衡器接受的 HTTP2 发送请求,但是当请求被转发到我的 Cloud Run 服务(运行 GRPC 服务器的 Java 应用程序)时,它以 HTTP/ 的形式出现1.1 并被 GRPC 服务器拒绝。我假设在 k8 负载均衡器和我的 k8 pod 之间的某个地方,请求被转发为 HTTP/1.1,但我不知道如何解决这个问题。

4

2 回答 2

1

结合@whlee 的回答和他非常重要的后续评论,这正是我必须做的才能让它发挥作用。

您必须使用 gcloud cli 进行部署才能更改命名端口。UI 不允许您配置端口名称。从服务 yaml 部署当前是一个 beta 功能。要部署,请运行:gcloud beta run services replace /path/to/service.yaml

就我而言,我的服务最初是使用 GCP 云控制台 UI 部署的,所以这里是我运行以导出和替换的步骤。

  1. 将我现有的服务(名为 hermes-grpc)导出到 yaml 文件:
gcloud beta run services describe hermes-grpc --format yaml > hermes-grpc.yaml
  1. 编辑我的导出 yaml 并进行以下编辑:

替换:

        ports:
        - containerPort: 6565

和:

        ports:
          - name: h2c
            containerPort: 6565

删除了以下几行:

          tcpSocket:
            port: 0

从部分中删除了name:

spec:
  template:
    metadata:
...
      name:
  1. 最后,从编辑的 yaml 重新部署服务:
gcloud beta run services replace hermes-grpc.yaml

最后我编辑的服务 yaml 看起来像这样:

apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
  annotations:
    client.knative.dev/user-image: interledger4j/hermes-server:latest
    run.googleapis.com/client-name: cloud-console
  creationTimestamp: '2020-01-09T00:02:29Z'
  generation: 3
  name: hermes-grpc
  namespace: default
  selfLink: /apis/serving.knative.dev/v1alpha1/namespaces/default/services/hermes-grpc
spec:
  template:
    metadata:
      annotations:
        autoscaling.knative.dev/maxScale: '2'
        autoscaling.knative.dev/minScale: '1'
        run.googleapis.com/client-name: cloud-console
    spec:
      containerConcurrency: 80
      containers:
        image: interledger4j/hermes-server:latest
        name: user-container
        ports:
          - name: h2c
            containerPort: 6565
        readinessProbe:
          successThreshold: 1
        resources:
          limits:
            cpu: 500m
            memory: 384Mi
      timeoutSeconds: 300
  traffic:
  - latestRevision: true
    percent: 100
于 2020-01-15T01:10:30.283 回答
0

https://github.com/knative/docs/blob/master/docs/serving/samples/grpc-ping-go/README.md

描述如何配置命名端口以使 HTTP/2 工作

于 2020-01-09T15:24:26.733 回答