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

Я пытаюсь извлечь изображение из 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> --docker-email=some@email.com

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

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

1 ответ

Решение

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

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

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

"Старый" способ с 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.

Это не совсем вопрос. Но у меня была аналогичная проблема с использованием подхода 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.

Другие вопросы по тегам