Как подтвердить право собственности на URL службы Google Cloud Endpoints? - PullRequest
6 голосов
/ 04 июня 2019

Я уже настроил проект Google Cloud Endpoints и могу вызывать запросы http / https.Конечные точки дают мне доменное имя MY_API.endpoints.MY_PROJECT.cloud.goog, которое я могу использовать.Я использую облачные конечные точки gRPC с функцией транскодирования HTTP / JSON в gRPC.

Развертывается в Google Kubernetes Engine (сценарий развертывания yaml присоединен в конце).

Когда я пытаюсьчтобы создать push-подписку с этим URL, я получаю следующую ошибку:

"Указанный HTTP-URL не зарегистрирован в родительском проекте подписки (url =" https://MY_API.endpoints.MY_PROJECT.cloud.goog/v1/path", project_id = "PROJECT_ID").

Мой вызов в gcloud:

gcloud pubsub subscriptions create SUB_NAME --topic=projects/MY_PROJECT/topics/MY_TOPIC --push-endpoint="https://MY_API.endpoints.MY_PROJECT.cloud.goog/v1/path"

Я попытался создать публичную DNS-зону Cloud с этим DNS-именем и установить соответствующие записи.Но я все еще не могу подтвердить право собственности в консоли поиска Google.

Вопрос в том, как установить запись DNS TXT для домена MY_API.endpoints.MY_PROJECT.cloud.goog, чтобы подтвердить владение?Или как использовать push-подписку Pubsub с Cloud Endpoints gRPC другим способом?

Я мог бы подтвердить владение доменом, если у меня есть возможность изменить мета-заголовки или заголовки ответов gRPC, преобразованных в HTTP.Но я сомневаюсь, что есть способ.


Сценарий Kubernetes, который я использовал для развертывания (если это будет полезно).

apiVersion: v1
kind: Service
metadata:
  name: GKE_SERVICE_NAME
spec:
  ports:
  # Port that accepts gRPC and JSON/HTTP2 requests over HTTP.
  - port: 80
    targetPort: 9000
    protocol: TCP
    name: http2
  selector:
    app: GKE_SERVICE_NAME
  type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: GKE_SERVICE_NAME
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: GKE_SERVICE_NAME
    spec:
      containers:
      - name: esp
        image: gcr.io/endpoints-release/endpoints-runtime:1
        args: [
          "--http2_port=9000",
          "--service=MY_API.endpoints.MY_PROJECT.cloud.goog",
          "--rollout_strategy=managed",
          "--backend=grpc://127.0.0.1:50051"
        ]
        ports:
          - containerPort: 9000
      - name: MY_CONTAINER_NAME
        image: gcr.io/MY_PROJECT/IMAGE_NAME:v1
        ports:
          - containerPort: 50051

1 Ответ

0 голосов
/ 10 июля 2019

В конечном итоге ваша цель состоит в том, чтобы Cloud Pub / Sub отправлялся в ваш контейнер на GKE.Есть несколько способов сделать это

  • Проверка владения доменом , как вы обнаружили:
    • Вы можете попробовать сделать это с DNS, и есть руководство по настройке DNS для домена cloud.goog .
    • Вы можете попробовать сделать это с помощью одной из не-DNS альтернатив , которая включает такие методы, какразмещение определенных видов HTML или Javascript фрагментов из домена.Однако это может быть сложно, так как я не знаю, как заставить оконечные точки облака обслуживать статический контент HTML или Javascript.Он обслуживает ответы в формате OpenAPI , который по сути является JSON.
    • Вы пытались разместить подписку Cloud Pub / Sub и домен cloud.goog в одном проекте?В этом случае он может уже считаться проверенным доменом.
  • Поскольку вы уже используете Google Kubernetes Engine, используйте либо Cloud Run, либо Cloud Run поверх Google Kubernetes Engine..Существует разница между Cloud Run и Cloud Run в GKE, но оба будут запускать ваши контейнеры Kubernetes.Push-конечные точки в Cloud Run не требуют проверки владения доменом (я не уверен, распространяется ли это и на Cloud Run в GKE).Вы также можете получить другие интересные преимущества, так как Cloud Run по сути предназначен для решения самого случая использования доставки конечной точки из контейнера.Например, он будет выполнять автоматическое масштабирование и мониторинг для вас.
...