从其他区域访问GKE中的Firestore数据

问题描述 投票:0回答:1

我希望有人可以回答或分享一些灯光,

我目前正在尝试从GKE访问firestore数据,但是由于firestore仅具有多个区域,因此它与我们的集群位于不同的区域。

  • GKE:asia-east1
  • Firestore:aisa-east2

这是我正在使用的示例代码:

import (
    "cloud.google.com/go/firestore"
    "context"
    "golang.org/x/oauth2/google"
    "google.golang.org/api/option"
)

func main() {
    ctx := context.Background()
    cred, err := google.FindDefaultCredentials(ctx, "https://www.googleapis.com/auth/datastore")
    if err != nil {
        log.Error(err, "failed to get cred")
    }

    client, err = firestore.NewClient(ctx, PROJECT_ID, option.WithCredentials(cred))
    if err != nil {
        log.Error(err, "Failed to connect firestore: %s")
        return nil, err
    }
    // I can retrieve data for docs with local environment, but in GKE it's always empty
    docs := client.Collection(COLLECT_NAME).Doc(id).Get(ctx)
    ...
}    

我可以在本地环境中检索docs的数据,但是在GKE中,它始终为空。我怀疑是由于该区域,因为如果有任何权限问题,我都可以看到错误消息。有办法强制为客户设置区域吗?我仍然找不到设置区域的方法,还是有任何解决方法?

注意kubernetes权限已为Cloud Datastore以及节点池启用。我也尝试设置GOOGLE_APPLICATION_CREDENTIALS并将其安装到容器中,但还是没有运气。

非常感谢任何提示/帮助。

谢谢!

google-cloud-platform google-cloud-firestore google-cloud-datastore google-kubernetes-engine
1个回答
0
投票
已解决...这是我们应用程序中的多个错误和数据问题,现在可以正常工作。

对于任何可能怀疑firestore的区域问题的人(因为一旦设置后就无法更改,并且它只有一个区域,等等),仍然可以从其他区域访问firestore数据。

我调试的步骤:

    [由于有人提到了VPC,但使用VPC本机创建了一个新的GKE群集,但是没有运气。
  1. 在与GKE相同的区域中创建一个vm,发现脚本可以获取数据!正确
  2. 更新我使用的库[但这可能没关系]
  3. 检查了我们使用的数据后,发现一个数据点意外包含null,导致我们的脚本返回null。
  4. 已修复数据,程序开始运行(是!​​)
  • 因此,这里学习到的教训是仔细检查数据,因为firestore可以具有空值,所以不要指望它总是返回值。

  • 0
    投票
    您是否将应用程序放入Go语言的docker容器中?您是否愿意分享Dockerfile和YAML的示例代码?我很高兴知道您是如何通过GKE访问Firestore的。谢谢!
    © www.soinside.com 2019 - 2024. All rights reserved.