AKS. 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> --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
뭐가 잘못됐나요?비밀접근은 왜 안 되는 거죠?왜 이 어프로치가 작동하지 않는지 알고 싶기 때문에, 서비스 책임자와의 어프로치를 추천하지 말아 주세요.효과가 있을 것 같아요.
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을 접속한 후, ACR에 접속하려면 몇 분 걸립니다.
ImagePullBackOff전환하다Running.
저도 이거 좋아 보여요.즉, admin 계정을 사용하지 않고 서비스 원칙을 사용하는 것이 좋습니다.SP를 사용하면 ACR 인스턴스(읽기, 기여자, 소유자)에 대한 액세스 권한을 세부적으로 제어할 수 있습니다.
이 문서에서는 서비스 원칙을 사용하여 AKS와 ACR 간의 인증에 대해2가지 방법을 설명하고 있습니다.
https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-aks
정확히는 의문사건이 아닙니다.그러나, 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 명령의 ACR URL에 있는 모든 소문자를 사용하십시오.
언급URL : https://stackoverflow.com/questions/49512099/aks-cant-pull-image-from-an-acr
'programing' 카테고리의 다른 글
| Git 상태를 완료하는 데 시간이 오래 걸린다 (0) | 2023.04.24 |
|---|---|
| Bash 명령줄 인수를 해석하려면 어떻게 해야 하나요? (0) | 2023.04.24 |
| Excel에서 선행 0을 연결하는 방법 (0) | 2023.04.24 |
| 웹소켓과서버에서 보낸 이벤트/이벤트 소스 (0) | 2023.04.24 |
| gpg가 데이터 서명에 실패함: 커밋 개체를 쓰지 못했습니다 [Git 2.10.0] (0) | 2023.04.24 |