Terraform 从私有gcr引出地形GKE问题

Terraform 从私有gcr引出地形GKE问题,terraform,google-kubernetes-engine,service-accounts,terraform-provider-gcp,gcr.io,Terraform,Google Kubernetes Engine,Service Accounts,Terraform Provider Gcp,Gcr.io,由于我没有通过Terraform使用标准的GKE集群(请参阅),我现在创建了一个带有单独节点池的集群。但是,我仍然无法从eu.gcr.io私有回购中提取基本容器 我的地形yml如下 resource "google_container_cluster" "primary" { name = "gke-cluster" location = "${var.region}-a" node_locations = [ "${var.

由于我没有通过Terraform使用标准的GKE集群(请参阅),我现在创建了一个带有单独节点池的集群。但是,我仍然无法从eu.gcr.io私有回购中提取基本容器

我的地形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文件(deployment.yml)创建这些部署

它继续提供:

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".
警告失败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

另一个想法。从文档和其他stackoverflow问题(参见示例)来看,拥有正确的服务帐户和oauth范围似乎是关键。如何在拉取时检查它是否使用了正确的服务帐户?以及作用域是否被正确分配?

似乎带有OAuth作用域的官方地形示例已经过时,不应该使用。我的解决方案是通过OAuth作用域授予所有权限,并使用IAM角色来管理它:

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

您也可以查看。

官方文件现在似乎是最新的:
docker push eu.gcr.io/project-dev/api:latest   
    oauth_scopes = [
      "https://www.googleapis.com/auth/cloud-platform",
    ]