АКС. Не могу вытащить изображение с акра
Я пытаюсь извлечь изображение из 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.