配置 Cloud Run on Anthos 以转发 HTTP2
Posted
技术标签:
【中文标题】配置 Cloud Run on Anthos 以转发 HTTP2【英文标题】:Configure Cloud Run on Anthos to forward HTTP2 【发布时间】:2020-04-26 17:39:18 【问题描述】:如何让 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,但我不知道如何解决这个问题。
【问题讨论】:
【参考方案1】:结合@whlee 的回答和他非常重要的后续评论,这正是我必须做的才能让它发挥作用。
您必须使用 gcloud cli 进行部署才能更改命名端口。 UI 不允许您配置端口名称。从服务 yaml 部署当前是一个 beta 功能。要部署,请运行:gcloud beta run services replace /path/to/service.yaml
在我的例子中,我的服务最初是使用 GCP 云控制台 UI 部署的,所以这里是我运行以导出和替换的步骤。
-
将我现有的服务(名为 hermes-grpc)导出到 yaml 文件:
gcloud beta run services describe hermes-grpc --format yaml > hermes-grpc.yaml
-
编辑我的导出 yaml 并进行以下编辑:
替换:
ports:
- containerPort: 6565
与:
ports:
- name: h2c
containerPort: 6565
删除了以下几行:
tcpSocket:
port: 0
从该部分中删除了name:
行
spec:
template:
metadata:
...
name:
-
最后,从编辑的 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
【讨论】:
【参考方案2】:https://github.com/knative/docs/blob/master/docs/serving/samples/grpc-ping-go/README.md
描述如何配置命名端口以使 HTTP/2 工作
【讨论】:
这并没有描述如何在 Cloud Run 上或者甚至在 GCP 上使用负载均衡器来做到这一点。 Cloud Run on Anthos 会生成所有 K8 部署内容,您无法手动对其进行编辑。 @wlhee 链接的示例有一个示例 YAML 文件,您可以在其中使用name: h2c
编辑 ports
部分。另一个例子在这里:knative.tips/networking/http2
你们不明白。 Cloud Run 会生成 k8 文件。没有编辑 k8 yaml 文件。甚至不可能。这个问题专门针对 CLOUD RUN。
您的意思是无法使用 yank 文件部署到 Cloud Run 吗? Cloud Run Anthos 和完全托管都接受 yaml 规范
gcloud beta 运行服务替换 以上是关于配置 Cloud Run on Anthos 以转发 HTTP2的主要内容,如果未能解决你的问题,请参考以下文章
Docker 映像在本地部署,但在 Google Cloud Run 上失败
SAP Analytics Cloud和Cloud for Customer之间的Single Sign on配置