如何验证Google Cloud Endpoints服务URL的所有权?

Sat*_*Sat 6 google-cloud-endpoints google-cloud-platform google-cloud-pubsub google-kubernetes-engine google-search-console

我已经设置了Google Cloud Endpoints项目,并且可以调用http / https请求。端点给了我可以使用的MY_API.endpoints.MY_PROJECT.cloud.goog域名。我正在将gRPC Cloud Endpoints与HTTP / JSON一起用于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"
Run Code Online (Sandbox Code Playgroud)

我试图使用该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
Run Code Online (Sandbox Code Playgroud)

Jas*_*sky 2

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

  • 正如您所发现的, 域所有权验证:
    • 您可以尝试使用 DNS 来完成此操作,并且有一个为 cloud.goog 域配置 DNS 的指南
    • 您可以尝试使用非 DNS 替代方案之一来实现此目的,其中包括托管来自域的某些类型的 HTML 或 Javascript 片段等方法。不过,这可能很棘手,因为我不知道如何使 Cloud Endpoints 提供静态 HTML 或 Javascript 内容。它以OpenAPI 格式(本质上是 JSON)提供响应。
    • 您是否尝试过将 Cloud Pub/Sub 订阅和 cloud.goog 域放在同一个项目中?在这种情况下,它可能已被视为经过验证的域。
  • 由于您已经在使用 Google Kubernetes Engine,因此请使用 Cloud Run 或基于 Google Kubernetes Engine 的 Cloud Run。Cloud Run 和 GKE 上的 Cloud Run 之间存在差异,但两者都将运行 Kubernetes 容器。Cloud Run 上的推送端点不需要域所有权验证(我不确定这是否也涵盖 GKE 上的 Cloud Run)。您还可能获得其他有趣的好处,因为 Cloud Run 本质上是为了解决从容器提供推送端点的用例而设计的。例如,它会为您进行自动缩放和监控。