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

时间:2020-04-26 06:23:09

标签: google-cloud-platform google-cloud-firestore google-cloud-datastore google-kubernetes-engine

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

我目前正在尝试从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中,它始终为空。我怀疑是由于该区域,因为如果有任何权限问题,我都可以看到错误消息。 有办法强制为客户设置区域吗?我仍然找不到设置区域的方法,还是有任何解决方法?

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

任何提示/帮助都将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:0)

已解决...这是我们应用程序中的多个错误和数据问题,现在可以正常工作。

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

我调试的步骤:

  1. 使用VPC本机创建一个新的GKE集群,因为有人提到了VPC,但是没有运气。
  2. 在与GKE相同的区域中创建一个vm,发现脚本可以获取数据!正确
  3. 更新我使用的库[但这可能没关系]
  4. 检查了我们使用的数据,发现一个数据点意外包含null,导致我们的脚本返回null。
  5. 修复数据,程序开始运行(是!​​)

因此,这里学习到的教训是仔细检查数据,因为firestore可以具有空值,所以不要指望它总是返回值。