Terraform GKE问题从私人gcr中提取



由于我没有通过Terraform使用标准GKE集群(请参阅gcr.io上的GKE权限问题,服务帐户基于Terraform(,我现在创建了一个带有单独节点池的集群。然而,我仍然无法从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文件(deployml.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".

警告失败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是创建基础设施项目的管理项目的服务帐户。然后我推

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

另一个想法。从文档和其他stackoverflow问题(例如,参见GKE-ErrImagePull从Google Container Registry中提取(来看,拥有正确的服务帐户和oauth范围似乎是关键。在提取时,我如何检查它是否使用了正确的服务帐户?作用域的分配是否正确?

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

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

您也可以查看类似的问题。

相关内容

  • 没有找到相关文章

最新更新