Доступ к данным пожарного депо в GKE из другого региона - PullRequest
0 голосов
/ 26 апреля 2020

Я надеюсь, что кто-то может ответить или поделиться некоторыми источниками света,

В настоящее время я пытаюсь получить доступ к данным пожарного хранилища из GKE, однако, поскольку у пожарного хранилища есть только несколько регионов, поэтому в настоящее время он находится в другом регионе, чем наш кластер. .

  • 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 и установить его для контейнера, но все равно не повезло.

Любые советы / подсказки очень приветствуются.

Спасибо !!

1 Ответ

0 голосов
/ 26 апреля 2020

Решено ... Это было несколько ошибок и проблема с данными из нашего приложения, теперь оно работает.

Для всех, кто может подозревать проблему региона с firestore (поскольку однажды его установка не может быть изменена, и она имеет только один регион, и т. д. c), данные пожарного хранилища все еще доступны из других регионов.

Шаги, которые я предпринял для отладки:

  1. Создание нового кластера GKE с VP C native, поскольку кто-то упомянул о VP C, но не повезло.
  2. Создайте виртуальную машину в том же регионе, что и GKE, обнаружил, что скрипт может получать данные! правильно
  3. Обновите библиотеку, которую я использую [но это может не иметь значения]
  4. Проверил используемые нами данные, обнаружил, что одна точка данных случайно содержит ноль, что заставило наш скрипт вернуть ноль.
  5. Исправлены данные, и программа начала работать (ууу!)

Таким образом, извлеченный здесь урок заключается в двойной проверке данных, так как firestore может иметь нулевые значения, поэтому не ожидайте, что он всегда вернет значения.

...