Настройте Cloud Run на Anthos для пересылки HTTP2 - PullRequest
1 голос
/ 09 января 2020

Как заставить Cloud Run for Anthos пересылать входящие HTTP2-запросы в службу Cloud Run как HTTP2 вместо HTTP / 1.1?

Я использую GCP с Cloud Run для Anthos для развертывания Java приложение, которое запускает сервер GRP C. Приложение Cloud Run открыто для общественности. Я также настроил Cloud Run для Anthos с сертификатом SSL. Когда я пытаюсь использовать клиент GRP C для вызова моей службы, клиент отправляет запрос через HTTP2, который принимает балансировщик нагрузки, но затем, когда запрос перенаправляется в мою службу Cloud Run (приложение Java, работающее на сервере GRP C ), он входит как HTTP / 1.1 и отклоняется сервером GRP C. Я предполагаю, что где-то между балансировщиком нагрузки k8 и моим модулем k8 запрос перенаправляется как HTTP / 1.1, но я не вижу, как это исправить.

Ответы [ 2 ]

1 голос
/ 15 января 2020

Собрав вместе ответ @ whlee и его очень важный последующий комментарий, вот что я должен был сделать, чтобы заставить его работать.

Вы должны выполнить развертывание, используя gcloud cli, чтобы изменить названный порт. Пользовательский интерфейс не позволяет настроить имя порта. Развертывание с сервиса yaml в настоящее время является бета-функцией. Чтобы развернуть, запустите: gcloud beta run services replace /path/to/service.yaml

В моем случае моя служба была первоначально развернута с использованием пользовательского интерфейса облачной консоли GCP, поэтому вот шаги, которые я выполнил для экспорта и замены.

  1. Экспорт моей существующей службы (названной hermes-grp c) в файл 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
0 голосов
/ 09 января 2020

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

Описывает, как настроить именованный порт для обеспечения работы HTTP / 2

...