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

时间:2019-06-04 09:01:39

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

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

它已部署在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

1 个答案:

答案 0 :(得分:0)

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

  • Domain ownership validation,您已经发现:
    • 您可以尝试使用DNS进行操作,并且有一个guide for configuring DNS for a cloud.goog domain
    • 您可以尝试使用non-DNS alternatives之一来做到这一点,其中包括诸如托管域中的某些类型的HTML或Javascript代码段之类的方法。但是,这可能很棘手,因为我不知道如何使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本质上是为解决从容器提供推送端点的用例而设计的。例如,它将为您进行自动缩放和监视。