АКС. Не могу вытащить изображение из acr

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

Я создал ресурсы с помощью команд azure cli:

az login
az provider register -n Microsoft.Network
az provider register -n Microsoft.Storage
az provider register -n Microsoft.Compute
az provider register -n Microsoft.ContainerService

az group create --name aksGroup --location westeurope

az aks create --resource-group aksGroup --name aksCluster --node-count 1 --generate-ssh-keys -k 1.9.2
az aks get-credentials --resource-group aksGroup --name aksCluster

az acr create --resource-group aksGroup --name aksClusterRegistry --sku Basic --admin-enabled true

После этого я вошел в систему и успешно отправил образ в созданный ACR с локального компьютера.

docker login aksclusterregistry.azurecr.io
docker tag jetty aksclusterregistry.azurecr.io/jetty
docker push aksclusterregistry.azurecr.io/jetty

Следующим шагом было создание секрета:

kubectl create secret docker-registry secret --docker-server=aksclusterregistry.azurecr.io --docker-username=aksClusterRegistry --docker-password=<Password from tab ACR/Access Keys> [email protected]

И в конце концов я попытался создать под с изображением из ACR:

#pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: jetty
spec:
  containers:
  - name: jetty
    image: aksclusterregistry.azurecr.io/jetty
  imagePullSecrets:
  - name: secret

kubectl create -f pod.yml

В результате у меня есть стручок со статусом ImagePullBackOff:

>kubectl get pods
NAME                    READY     STATUS             RESTARTS   AGE
jetty                   0/1       ImagePullBackOff   0          1m
> kubectl describe pod jetty
Events:
  Type     Reason                 Age              From                               Message
  ----     ------                 ----             ----                               -------
  Normal   Scheduled              2m               default-scheduler                  Successfully assigned jetty to aks-nodepool1-62963605-0
  Normal   SuccessfulMountVolume  2m               kubelet, aks-nodepool1-62963605-0  MountVolume.SetUp succeeded for volume "default-token-w8png"
  Normal   Pulling                2m (x2 over 2m)  kubelet, aks-nodepool1-62963605-0  pulling image "aksclusterregistry.azurecr.io/jetty"
  Warning  Failed                 2m (x2 over 2m)  kubelet, aks-nodepool1-62963605-0  Failed to pull image "aksclusterregistry.azurecr.io/jetty": rpc error: code = Unknown desc = Error response from daemon: Get https://aksclusterregistry.azurecr.io/v2/jetty/manifests/latest: unauthorized: authentication required
  Warning  Failed                 2m (x2 over 2m)  kubelet, aks-nodepool1-62963605-0  Error: ErrImagePull
  Normal   BackOff                2m (x5 over 2m)  kubelet, aks-nodepool1-62963605-0  Back-off pulling image "aksclusterregistry.azurecr.io/jetty"
  Normal   SandboxChanged         2m (x7 over 2m)  kubelet, aks-nodepool1-62963605-0  Pod sandbox changed, it will be killed and re-created.
  Warning  Failed                 2m (x6 over 2m)  kubelet, aks-nodepool1-62963605-0  Error: ImagePullBackOff

Что случилось? Почему не работает подход с секретом? Пожалуйста, не советуйте мне обращаться к руководителю службы, потому что я хотел бы понять, почему этот подход не работает. Я думаю, это должно работать.


person typik89    schedule 27.03.2018    source источник
comment
это выглядит правильно и должно работать. принципал службы здесь не имеет значения   -  person 4c74356b41    schedule 27.03.2018
comment
но это не работает   -  person typik89    schedule 27.03.2018
comment
хорошо, проверьте учетные данные докера. Я настоятельно рекомендую использовать имя пользователя для более низкого уровня   -  person 4c74356b41    schedule 27.03.2018


Ответы (3)


Мне это тоже нравится. Тем не менее, рекомендуется использовать не учетную запись администратора, а принцип обслуживания. С SP вы получаете некоторый детальный контроль над правами доступа к экземпляру ACR (чтение, участник, владелец).

Этот документ включает два метода аутентификации между AKS и ACR с использованием принципов обслуживания.

https://docs.microsoft.com/en-us/azure/container-registry/container-registry-auth-aks

person Neil Peterson    schedule 27.03.2018
comment
Оно работает. Но не могли бы вы объяснить, почему подход с учетной записью администратора не работает, потому что я могу подключиться к ACR с помощью учетной записи администратора из локального докера. И как я могу получить пароль sp или сбросить его после создания времени. Я не нашел этой информации на портале и не нашел команды, которая могла бы мне помочь. - person typik89; 28.03.2018
comment
У меня такая же проблема, и я тоже хотел бы знать, почему этот метод работает, а оригинал - нет. - person Asu; 02.04.2019

"Старый" способ с AKS заключался в том, чтобы делать create secret, как вы упомянули. Это больше не рекомендуется.

«Новый» способ - прикрепить реестр контейнеров. В этой статье объясняется «новый» способ прикрепления ACR, а также ссылка на старый способ устранения путаницы. Когда вы создаете свой кластер, прикрепите его с помощью:

az aks create -n myAKSCluster -g myResourceGroup --attach-acr $MYACR

Или, если вы уже создали свой кластер, обновите его с помощью:

az aks update -n myAKSCluster -g myResourceGroup --attach-acr $MYACR

Примечания:

  • $MYACR - это просто имя вашего реестра без .azurecr.io. Пример: MYACR=foobar, а не MYACR=foobar.azurecr.io.

  • После присоединения ACR потребуется несколько минут, чтобы ImagePullBackOff перешел на Running.

person K.S.    schedule 29.10.2019
comment
Это должен быть принятый ответ, спасибо! - person Veve; 11.02.2021

Это не совсем вопрос. Но у меня была аналогичная проблема с использованием подхода Attach ACR. Моя проблема заключалась в заглавных буквах в имени реестра. Ниже показано предупреждение, созданное az cli.

Uppercase characters are detected in the registry name. When using its server url in docker commands, to avoid authentication errors, use all lowercase

Поэтому убедитесь, что в командах Docker используются все строчные буквы в URL-адресах ACR.

person mvitor    schedule 17.06.2020