pod kubectl не может загрузить образ AWS ECR

шаг 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: нет базовых учетных данных

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


person Barak    schedule 19.12.2018    source источник
comment
Создайте deployment.yml и установите imagePullSecrets   -  person DominikHelps    schedule 19.12.2018
comment
Как вы развернули именно этот модуль? Вы использовали какой-либо файл deployment.yml   -  person Hansika Weerasena    schedule 20.12.2018


Ответы (3)


Создал скрипт, который извлекает токен из AWS-ECR

ACCOUNT=xxxxxxxxxxxx
REGION=xx-xxxx-x
SECRET_NAME=${REGION}-ecr-registry
[email protected]

#
#

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}"

и создал задание Linux cron, чтобы запускать его каждые 10 часов.

person Barak    schedule 12.04.2019
comment
Стоит отметить: --docker-email требуется для работы конфигурации kubernetes, даже если она устарела. это может быть фиктивное значение, например [email protected]. - person tedder42; 16.06.2019
comment
Этот сценарий волшебный! Большое спасибо. В качестве дополнительного бонуса вы можете превратить этот скрипт в плагин kubectl, назвав его kubectl-ecr и поместив в свой путь. Затем вы можете вызвать сценарий прямо из kubectl, например, kubectl ecr. - person G. Rafael; 07.11.2019

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

apiVersion: v1
kind: Deployment
metadata:
  name: deployment-name
spec:
  containers:
  - image: your-registry/image/name:tag
  imagePullSecrets:
  - name: secret-name
person Rawkode    schedule 19.12.2018
comment
Спасибо, это уже включено в определение модуля. см. ниже apiVersion: v1 kind: Pod metadata: name: dc labels: name: DomainController location: typhoon spec: container: - name: dc image: xxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/decs-dc : latest imagePullSecrets: - name: aws-ecr-credentials - person Barak; 20.12.2018
comment
спасибо @rawkode; ваш в сочетании с ответом Барака кажется недостающими частями. - person tedder42; 16.06.2019

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

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

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

Вы прошли аутентификацию в другом регионе. Запросы аутентификации привязаны к определенным регионам и не могут использоваться в других регионах. Например, если вы получили токен авторизации на западе США (штат Орегон), вы не сможете использовать его для аутентификации в своих репозиториях на востоке США (Северная Вирджиния). Чтобы решить эту проблему, убедитесь, что вы используете один и тот же регион как для аутентификации, так и для вызовов команд docker push.

person user2566717    schedule 01.06.2019