Модули 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
см. это руководство для получения дополнительной информации