Модули Kubernetes не могут извлекать изображения из реестра контейнеров (gcp)

Я хочу обновить свое развертывание в kubernetes новым образом, который существует в eu.gcr.io (тот же проект), я делал это раньше. Но теперь стручки не могут получить изображение, потому что они не имеют права делать это. Это ошибка, которую мы получаем в журналах pod.

Failed to pull image "eu.gcr.io/my-gcp-project/my-image:v1.009": 
rpc error: code = Unknown desc = Error response from daemon: 
unauthorized: You don't have the needed permissions to perform this operation,
and you may have invalid credentials.

Учетная запись службы в кластере имеет роли администратора и администратора хранилища kubernetes, которых должно быть достаточно. Но даже когда я создаю редактор проекта учетной записи службы (для отладки), он все равно не работает (та же ошибка).

Я также попытался создать новый новый кластер (настройки по умолчанию) и применить мое развертывание там, но затем у меня возникла та же проблема.

Я не уверен, что я могу попробовать больше.

Любая помощь или предложения с благодарностью.

РЕДАКТИРОВАТЬ:

Я только что узнал, что я все еще могу тянуть и развертывать старые образы. Но каждое новое изображение, которое я создаю, не может быть получено стручками kubernetes.

Ответы

Ответ 1

По вашему описанию

Я только что узнал, что я все еще могу тянуть и развертывать старые образы. Но каждое новое изображение, которое я создаю, не может быть получено стручками kubernetes.

Я предполагаю, что вы можете получить изображение докера по команде, но не kubectl.

docker pull eu.gcr.io/my-gcp-project/my-image:v1.009 

Так что ссылка в этой статье Использование реестра контейнеров Google с Kubernetes означает, что аутентификация различается между образом загрузки docker по запросу docker pull и kubectl.

Вы дали токен доступа в GKE?

kubectl create secret docker-registry gcr-access-token \
--docker-server=eu.gcr.io \
--docker-username=oauth2accesstoken \
--docker-password="$(gcloud auth print-access-token)" \
[email protected]

Ответ 2

Вам нужно будет создать секрет реестра Docker и использовать imagePullSecrets в своем определении модуля:

kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: <your-private-image>
  imagePullSecrets:
  - name: regcred

см. это руководство для получения дополнительной информации