У меня проблемы с получением контейнеров от gcr.io
$ kubectl get po
NAME READY STATUS RESTARTS AGE
api-deployment-74d8cf8768-x8bsk 0/2 ImagePullBackOff 4 2m43s
Я создаю эти развертывания со следующим файлом 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/api:latest
imagePullPolicy: Always
ports:
- containerPort: 5060
из GKE - ErrImagePull извлекает данные из реестра контейнеров Google Я предполагаю, что это в основном проблема с разрешениями.
Если я сделаю
kubectl describe pod api-deployment-74d8cf8768-x8bsk
, я получу
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>/api/manifests/latest"
Однако неясно, как установить соответствующую учетную запись службы с помощью terraform.
Моя настройка заключается в следующем. Я создал проект администрирования terraform в GCP (terraform-admin) с учетной записью службы
tf-admin@terraform-admin.iam.gserviceaccount.com
, которая содержит состояние удаленного terraform et c. Учетная запись службы имеет множество ролей, таких как:
Compute Network Admin
Kubernetes Engine Cluster Admin
...
Затем я создаю свой фактический проект-проект project-dev (используя учетные данные этой учетной записи службы). В project-dev tf-admin@terraform-admin.iam.gserviceaccount.com это также учетная запись iam как
Owner
Compute Network Admin
Kubernetes Engine Cluster Admin
Однако это не служебная учетная запись. Единственная учетная запись службы, которую я вижу, это
<project-dev-ID>-compute@developer.gserviceaccount.com
, которая является «учетной записью службы по умолчанию Compute Engine», которая, вероятно, не имеет соответствующих разрешений. В проекте-dev у меня также есть реестр контейнеров, в котором содержатся мои частные контейнеры.
Как уже говорилось, я создаю свой кластер GKE, используя Terraform. Ниже приведен мой (сокращенно) файл yml.
resource "google_container_cluster" "primary" {
name = "gke-cluster"
location = "${var.region}-b"
node_locations = [
"${var.region}-c",
"${var.region}-d",
]
node_version = var.node_version
initial_node_count = 3
network = var.vpc_name
subnetwork = var.subnet_name
addons_config {
horizontal_pod_autoscaling {
disabled = false
}
}
master_auth {
username = 'user'
password = 'password'
}
node_config {
# I HAVE TRIED ADDING THIS, BUT IT RESULT IN AN ERROR
# Error: googleapi: Error 400: The user does not have access to service account
# service_account = "tf-admin@terraform-admin.iam.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",
]
labels = {
env = var.gke_label["${terraform.workspace}"]
}
disk_size_gb = 10
machine_type = var.gke_node_machine_type
tags = ["gke-node"]
}
}
Теперь я должен попытаться (и если да, то как) добавить свою учетную запись службы tf-admin в качестве служебной учетной записи в project-dev или добавить конкретная c учетная запись службы (опять же, как?) для проекта-dev для kubernetes?