【问题标题】:How to verify ownership of Google Cloud Endpoints service URL?如何验证 Google Cloud Endpoints 服务 URL 的所有权?
【发布时间】:2019-10-19 19:02:13
【问题描述】:

我已经设置了 Google Cloud Endpoints 项目并且可以调用 http/https 请求。 Endpoints 给了我可以使用的 MY_API.endpoints.MY_PROJECT.cloud.goog 域名。我正在使用带有 HTTP/JSON 到 gRPC 转码功能的 gRPC 云端点。

部署在Google Kubernetes Engine上(最后附上部署yaml脚本)。

当我尝试使用该 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 Search Console 中验证所有权。

问题是如何设置 MY_API.endpoints.MY_PROJECT.cloud.goog 域的 DNS TXT 记录来验证所有权?或者如何以其他方式将 Pubsub 推送订阅与 Cloud Endpoints gRPC 一起使用?

如果我能够更改转换为 HTTP 的 gRPC 响应的元或标头,我可以验证域的所有权。但我怀疑是否有办法。


我用于部署的 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

【问题讨论】:

  • 您是否验证了您的域所有权? cloud.google.com/pubsub/docs/push#domain_ownership_validation
  • 问题是.cloud.goog域怎么办?
  • 您可能不需要 TXT 记录,您是否尝试过上面链接文档中的 B 部分?
  • 是的,我试过了。当我在那里输入我的域名时,它显示:“验证所有权。在您注册 MY_API.endpoints.MY_PROJECT.cloud.goog 之前,您必须先验证所有权。您可以在 Google Search Console 中执行此操作。”
  • 您的 Endpoints 代码部署在哪里?应用引擎标准?云跑?...

标签: google-cloud-platform google-kubernetes-engine google-cloud-endpoints google-cloud-pubsub google-search-console


【解决方案1】:

最终,您的目标是让 Cloud Pub/Sub 推送到 GKE 上的容器。有几种方法可以做到这一点

  • Domain ownership validation,正如您所发现的:
    • 你可以尝试用 DNS 来做,有一个guide for configuring DNS for a cloud.goog domain
    • 您可以尝试使用non-DNS alternatives 之一来执行此操作,其中包括托管某些类型的HTML 或来自域的Javascript sn-ps 等方法。不过,这可能很棘手,因为我不知道如何让 Cloud Endpoints 提供静态 HTML 或 Javascript 内容。它在 OpenAPI format 中提供响应,本质上是 JSON。
    • 您是否尝试过将 Cloud Pub/Sub 订阅和 cloud.goog 域放在同一个项目中?在这种情况下,它可能已经被视为经过验证的域。
  • 由于您已经在使用 Google Kubernetes Engine,请使用 Cloud Run 或 Cloud Run on top of Google Kubernetes Engine。 Cloud Run 和 GKE 上的 Cloud Run 之间存在差异,但两者都将运行您的 Kubernetes 容器。 Cloud Run 上的推送端点不需要域所有权验证(我不确定这是否也涵盖 GKE 上的 Cloud Run)。您可能还会获得其他有趣的好处,因为 Cloud Run 本质上旨在解决从容器提供推送端点的用例。例如,它会为您进行自动缩放和监控。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 2019-01-28
    • 2017-07-06
    相关资源
    最近更新 更多