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

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

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.


comment
Вы можете подтолкнуть изображение, но не потянуть вправо?   -  person howie    schedule 04.03.2019
comment
Образ создается из моей локальной системы и добавляется в реестр контейнеров Google (без каких-либо видимых проблем). Изображение находится в ведре. Стручки не могут получить изображение, в котором заключается проблема.   -  person Georges Lorré    schedule 04.03.2019
comment
Вы используете GKE или сами создаете кластер кубернетов?   -  person howie    schedule 04.03.2019
comment
GKE, ничего особенного.   -  person Georges Lorré    schedule 04.03.2019
comment
Это похоже на вашу проблему? github.com/kubernetes/kubernetes/issues/62393   -  person howie    schedule 05.03.2019


Ответы (3)


Согласно вашему описанию

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

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

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

Ссылка на эту статью Использование реестра контейнеров Google с Kubernetes, аутентификация отличается между pull docker image с помощью 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]
person howie    schedule 05.03.2019
comment
Да, это сработало! Мне пришлось создать токен доступа. Эта статья - отличная находка, спасибо, Хауи. Довольно странно, что это вдруг стало необходимо, так как оно должно работать из коробки. - person Georges Lorré; 05.03.2019

Вам нужно будет создать секрет реестра докеров и использовать 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

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

person Amityo    schedule 02.03.2019
comment
В этом нет необходимости, поскольку я извлекаю изображение из реестра контейнеров Google (в том же проекте gcp), а не из докера. Это работало раньше. Но теперь стручки k8s не авторизованы. - person Georges Lorré; 03.03.2019

У учетной записи службы или пользователя, используемого в кластере k8s, нет доступа к gcr (реестр контейнеров Google). Чтобы разрешить доступ, есть два метода, чтобы узел k8s мог извлечь изображение из gcr и развернуть поды.

Метод 1. Сделайте реестр контейнеров общедоступным (что не рекомендуется) только для лабораторных или тестовых целей.

Метод 2: Добавьте роль администратора объекта хранилища или роль наблюдателя объекта хранилища в сервисную учетную запись, назначенную вашему кластеру и узлам k8s. (рекомендуемые)

person chinmay mandal    schedule 17.03.2021