web-dev-qa-db-ja.com

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> [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

どうしましたか?秘密のアプローチが機能しないのはなぜですか?このアプローチがうまくいかない理由を理解したいので、サービスプリンシパルとのアプローチをアドバイスしないでください。動作しているに違いないと思います。

16
Andryusha2006

これも私には良さそうです。ただし、管理アカウントを使用するのではなく、サービス原則を使用することをお勧めします。 SPを使用すると、ACRインスタンス(読み取り、投稿者、所有者)へのアクセス権をきめ細かく制御できます。

このドキュメントには、サービス原則を使用したAKSとACR間の認証のための2つの方法が含まれています。

https://docs.Microsoft.com/en-us/Azure/container-registry/container-registry-auth-aks

8
Neil Peterson