Terraform GKE проблема вытягивания из частного gcr - PullRequest
0 голосов
/ 02 мая 2020

Поскольку я не получил ни одного стандартного кластера GKE через Terraform (см. Проблема с разрешениями GKE для gcr.io с учетной записью службы, основанной на terraform ), теперь я создал один с отдельным пулом узлов. Однако я все еще не могу получить контейнер basi c, извлеченный из частного репозитория eu.gcr.io.

Мой terraform yml выглядит следующим образом.

    resource "google_container_cluster" "primary" {
      name     = "gke-cluster"
      location = "${var.region}-a"

      node_locations = [
        "${var.region}-b",
        "${var.region}-c",
      ]

      network     = var.vpc_name
      subnetwork  = var.subnet_name

      remove_default_node_pool = true
      initial_node_count       = 1
      # minimum kubernetes version for master
      min_master_version = var.min_master_version

      master_auth {
        username = var.gke_master_user
        password = var.gke_master_pass
      }

    }

resource "google_container_node_pool" "primary_preemptible_nodes" {
  name     = "gke-node-pool"
  location = "${var.region}-a"

  cluster     = google_container_cluster.primary.name
  version     = var.node_version
  node_count  = 3

  node_config {
    preemptible  = true

    metadata = {
      disable-legacy-endpoints = "true"
    }

    # based on project number
    service_account = "328126791642-compute@developer.gserviceaccount.com"

    oauth_scopes = [
      "https://www.googleapis.com/auth/compute",
      "https://www.googleapis.com/auth/devstorage.read_only"
      "https://www.googleapis.com/auth/logging.write",
      "https://www.googleapis.com/auth/monitoring",
    ]
  }
}

все создается очень хорошо. Затем я хочу развернуть в кластере с

. Я создаю эти развертывания со следующим файлом yml (deploy.yml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: api
  template:
    metadata:
      labels:
        component: api
    spec:
      containers:
      - name: api
        image: eu.gcr.io/project-dev/api:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 5060

, и он продолжает давать:

Failed to pull image "eu.gcr.io/project-dev/api:latest": rpc error: code = 
Unknown desc = Error response from daemon: pull access denied for eu.gcr.io/project-dev/api, 
repository does not exist or may require 'docker login': denied: Permission denied for 
"latest" from request "/v2/project-dev/lcm_api/manifests/latest".

Предупреждение Failed 94s (x2 более 111s) kubelet, gke-cluster-dev-node-pool-90efd247-7vl4 Ошибка: ErrImagePull

У меня есть открытая облачная оболочка в кластере kubernetes и

docker pull eu.gcr.io/project-dev/api:latest 

работает просто отлично.

У меня серьезно заканчиваются идеи здесь (и я думаю вернуться к AWS). Может ли это иметь какое-то отношение к разрешениям, которые контейнер выдвигает в eu.gcr.io?

Я использую:

docker login -u _json_key --password-stdin https://eu.gcr.io < /home/jeroen/.config/gcloud/tf_admin.json

локально, где tf_admin. json - учетная запись службы мой административный проект, который создал инфраструктурный проект. Я тогда пу sh

docker push eu.gcr.io/project-dev/api:latest   

Еще одна идея. Из документации и других вопросов, связанных со стековым потоком (см., Например, GKE - ErrImagePull, извлекаемый из реестра контейнеров Google ), представляется, что ключ имеет правильную учетную запись службы и oauth-области. Как я могу проверить, что он использует правильный сервис-аккаунт при вытягивании? И правильно ли назначены области?

1 Ответ

0 голосов
/ 02 мая 2020

Кажется, официальный пример terraform с областями OAuth устарел и не должен использоваться. Мое решение состоит в том, чтобы предоставить все разрешения через области OAuth и использовать вместо этого роли IAM:

    oauth_scopes = [
      "https://www.googleapis.com/auth/cloud-platform",
    ]

Вы также можете проверить аналогичную проблему .

...