MinikubeからACRにアップロードしたコンテナイメージを利用する方法です。
変数設定
Azureに設定済みのACRの名前と、任意のSP_NAMEを設定します。
ACR_NAME=yomon8acr SP_NAME=yomon8-minikube-principal
ACRの準備
ACRのIDを取得します。
ACR_REGISTRY_ID=$(az acr show --name ${ACR_NAME} --query id --output tsv) # ACR_REGISTRY_ID-> /subscriptions/{Subscription}/resourceGroups/{ResourceGroup}/providers/Microsoft.ContainerRegistry/registries/{ACR_NAME}
Service Principalの作成と認証情報取得
SP(Service Principal)の名前からSPの認証情報を取得します。ACRに対してPull権限のみが必要な場合は acrpull
を設定し、IDとパスワードを取得します。両方ともGUID形式です。
$ az ad sp create-for-rbac \ --name ${SP_NAME} \ --role acrpull \ --scopes ${ACR_REGISTRY_ID} \ --query '{id: appId, password:password}' \ --output yaml id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx password: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
RBACのロールとして指定できるものは、こちらに記載があります。
Minikubeに認証情報の登録
認証情報はdefaultアカウントのImagePullSecretsに登録されます。
今回は、作業前は何も無い(none)です。
$ kubectl describe serviceaccounts default Name: default Namespace: default #- 省略 Image pull secrets: <none> #- 省略
registry-cred
のAddonを利用します。まずは以下のようにACRの認証情報を登録します。
$ minikube addons configure registry-creds Do you want to enable AWS Elastic Container Registry? [y/n]: n Do you want to enable Google Container Registry? [y/n]: n Do you want to enable Docker Registry? [y/n]: n Do you want to enable Azure Container Registry? [y/n]: y -- Enter Azure Container Registry (ACR) URL: yomon8.azurecr.io -- Enter client ID (service principal ID) to access ACR: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -- Enter service principal password to access Azure Container Registry: yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy ✅ registry-creds was successfully configured
registry-creds
をenableとするとpodが起動します。
$ minikube addons enable registry-creds
以下のようにPod情報取得してログを確認することもできます。
$ kubectl get pods --namespace kube-system | grep registry-creds registry-creds-6cc44679-4drd2 1/1 Running 0 84s $ kubectl logs -f --namespace kube-system registry-creds-6cc44679-4drd2
少し待つと以下のようにImage pull secretに認証情報が登録されます。
$ kubectl describe serviceaccounts default Name: default Namespace: default #- 省略 Image pull secrets: gcr-secret awsecr-cred dpr-secret acr-secret #- 省略
これでACRに認証通しながらイメージを取得できるようになります。
その他
認証情報を更新する
minikubeは開発環境として使っていることが多いと思うので、以下のようにやり直す方法が良いかもしれません。
# Pod停止 $ minikube addons disable registry-creds # 認証情報削除 $ kubectl delete secret acr-secret secret "acr-secret" deleted # 新認証情報設定 $ minikube addons configure registry-creds # Podを起動して新認証情報登録 $ minikube addons enable registry-creds # 登録待ち $ watch -n3 kubectl get secret acr-secret NAME TYPE DATA AGE acr-secret kubernetes.io/dockerconfigjson 1 17s
Dockerでログインしてみる
上手くいかない場合、認証情報が合っているかを確認するにはDockerでログインしてみるのも良いかもしれません。
$ docker login ${ACR_NAME}.azurecr.io --username xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx --password yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy Login Succeeded
設定の確認
設定情報が正しく入力できているかは、registry-creds-acrというsecretを見るとわかります。実態はこのregistry-creds-acrの内容からacr-secretが生成されるようです。
$ kubectl --namespace=kube-system get secret registry-creds-acr -o yaml apiVersion: v1 data: ACR_CLIENT_ID: base64-encoded-value ACR_PASSWORD: base64-encoded-value ACR_URL: base64-encoded-value kind: Secret metadata: creationTimestamp: "2020-03-11T02:31:40Z" labels: app: registry-creds cloud: acr kubernetes.io/minikube-addons: registry-creds name: registry-creds-acr namespace: kube-system resourceVersion: "28800" selfLink: /api/v1/namespaces/kube-system/secrets/registry-creds-acr uid: 353fdaa4-348a-4df2-ab6e-e6299412a4af type: Opaque