kubectl pod не может получить изображение AWS ECR - PullRequest
0 голосов
/ 19 декабря 2018

шаг 1 sudo $(aws ecr get-login --no-include-email --region xx-xxxx-x)

шаг 2 curl -LSs https://github.com/fermayo/ecr-k8s-secret/raw/master/gen-secret.sh | bash -

шаг 3 kubectl describe secret aws-ecr-credentials

Name:         aws-ecr-credentials
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  kubernetes.io/dockerconfigjson

Data

.dockerconfigjson:  32 bytes

шаг 4 kubectl describe pod x

Предупреждение Не удалось 5s kubelet, ip-10-46-250-151 Не удалось получить изображение "my-account.dkr.ecr.us-east-1.amazonaws.com/my-image:latest ": ошибка rpc: code = Unknown desc = Ответ об ошибке от демона: Получить https://my -account.dkr.ecr.us-east-1.amazonaws.com/my-image/latest: нет базовых учетных данных для аутентификации

Почему модуль не может сбросить изображение?

Ответы [ 3 ]

0 голосов
/ 12 апреля 2019
Created a script that pulls the token from AWS-ECR
ACCOUNT=xxxxxxxxxxxx
REGION=xx-xxxx-x
SECRET_NAME=${REGION}-ecr-registry
EMAIL=email@email.com

#
#

TOKEN=`aws ecr --region=$REGION get-authorization-token --output text --query 
authorizationData[].authorizationToken | base64 -d | cut -d: -f2`

#
#  Create or replace registry secret
#

kubectl delete secret --ignore-not-found $SECRET_NAME
kubectl create secret docker-registry $SECRET_NAME \
 --docker-server=https://${ACCOUNT}.dkr.ecr.${REGION}.amazonaws.com \
 --docker-username=AWS \
 --docker-password="${TOKEN}" \
 --docker-email="${EMAIL}"

и создал cronjob для Linux, который будет запускаться каждые 10 часов

0 голосов
/ 01 июня 2019

Я тоже бился головой об этом и понял, что это несоответствие региона.Я получал свой токен от нас-восток-2, когда изображение находится в нас-запад-2.

Фрагмент от https://docs.aws.amazon.com/AmazonECR/latest/userguide/common-errors-docker.html#error-403

Бывают случаи, когда вы можете получитьошибка HTTP 403 (Запрещено) или сообщение об ошибке «Нет базовых учетных данных для аутентификации» из команды Docker Push, даже если вы успешно прошли аутентификацию в Docker с помощью команды aws ecr get-login.Ниже приведены некоторые известные причины этой проблемы:

Вы прошли аутентификацию в другом регионе. Запросы на аутентификацию привязаны к определенным регионам и не могут использоваться в разных регионах.Например, если вы получаете токен авторизации от US West (Oregon), вы не можете использовать его для аутентификации в своих хранилищах на US East (N. Virginia).Чтобы решить эту проблему, убедитесь, что вы используете один и тот же регион как для аутентификации, так и для вызовов push-команды Docker.

0 голосов
/ 19 декабря 2018

В манифесте развертывания необходимо указать, что учетные данные реестра контейнера хранятся в секрете.Это так же просто, как добавление imagePullSecrets:

apiVersion: v1
kind: Deployment
metadata:
  name: deployment-name
spec:
  containers:
  - image: your-registry/image/name:tag
  imagePullSecrets:
  - name: secret-name
...