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

7
我已经设置了Google Cloud Endpoints项目并可以调用http / https请求。Endpoints为我提供了MY_API.endpoints.MY_PROJECT.cloud.goog域名,我可以使用它。我正在使用gRPC Cloud Endpoints与HTTP / JSON转换功能。
它部署在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

您已验证您的域名所有权吗?https://cloud.google.com/pubsub/docs/push#domain_ownership_validation - Christopher
问题是如何为 .cloud.goog 域名做到这一点? - Sat
您可能不需要TXT记录,您尝试过上面链接文档中的B部分吗? - Grayside
是的,我尝试过了。当我输入我的域名时,它会显示:“验证所有权。 在注册MY_API.endpoints.MY_PROJECT.cloud.goog之前,您必须先验证所有权。您可以在Google搜索控制台中完成此操作。” - Sat
你的终端节点代码部署在哪里?是在App Engine标准版还是Cloud Run?... - LundinCast
好的,它部署在Google Kubernetes Engine上。我会在描述中添加它,谢谢。 - Sat
1个回答

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和Cloud Run on GKE之间存在差异,但两者都将运行您的Kubernetes容器。在Cloud Run上推送端点不需要域名所有权验证(我不确定这是否也适用于Cloud Run on GKE)。您还可能获得其他有趣的好处,因为Cloud Run实质上是设计用于处理从容器提供推送端点的用例。例如,它将为您执行自动缩放和监视。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接