在 Anthos 上配置 Cloud 运行 以转发 HTTP2

Configure Cloud Run on Anthos to forward HTTP2

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

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

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

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

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

您必须使用 gcloud cli 进行部署才能更改命名端口。 UI 不允许您配置端口名称。从服务 yaml 部署目前是测试版功能。要部署,运行: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