AKSでもマネージドIDが使えるようになったことで、KubernetesのPodから定期ジョブなどでkubectlを実行したい時にAzure CLIで認証できるようになりました。
前提
以下の記事でも書いたように、AKSに紐付いたマネージドIDに適切な権限が付いていることが前提になります。
コンテナイメージをビルド
ENTRYPOINTのスクリプト
マネージドIDで認証をAzure CLIで取得して、kubectlを実行するスクリプトを entrypoint.sh
とう名前で作ります。
AKSの情報は環境変数から取得します。
#!/bin/sh AZ_RG=${RESOURCE_GROUP} AZ_CLUSTER=${CLUSTER_NAME} az login --identity az aks get-credentials -g ${AZ_RG} -n ${AZ_CLUSTER} > /dev/null kubectl get pods -n kube-system
イメージのビルド
以下のAzure CLIのイメージをベースにしてイメージをビルドします。
https://hub.docker.com/r/microsoft/azure-cli
kubectlをインストールして、先程のスクリプトをENTRYPOINTに設定しておきます。
FROM microsoft/azure-cli RUN az aks install-cli COPY ./entrypoint.sh / ENTRYPOINT [ "/entrypoint.sh" ]
ACRにイメージをビルド
イメージをACRにビルドします。
az acr build --registry ${ACR_NAME} --image get-pod ./path/to/manifest
Kubernetesデプロイ
定義作成
環境変数でパラメータを渡すために環境変数に RESOURCE_GROUP
と CLUSTER_NAME
を設定します。
ACRの名前も自身の環境のものに調整してください。
apiVersion: batch/v1 kind: Job metadata: name: get-pod spec: backoffLimit: 0 completions: 1 parallelism: 1 template: spec: containers: - name: get-pod image: youracr.azurecr.io/get-pod env: - name: RESOURCE_GROUP value: your_resource_group_name - name: CLUSTER_NAME value: your_aks_cluster_name restartPolicy: Never
Podデプロイ
ローカルのkubectlでデプロイします。
$ kubectl apply -f ./path/to/job.yml
ローカルからAKSのpodの情報を取得して確認します。
$ kubectl get po NAME READY STATUS RESTARTS AGE get-pod-242dx 0/1 Completed 0 10s
ログを確認すると、Pod内部でkubectlが叩けて、kube-systemのPod一覧が取得できていることが確認できます。
また、その前に打った az login
コマンドの結果からMSIが使われていることがわかります。
$ kubectl logs -f get-pod-n4srf # --- 省略 --- "user": { "assignedIdentityInfo": "MSI", "name": "systemAssignedIdentity", "type": "servicePrincipal" } } ] NAME READY STATUS RESTARTS AGE coredns-57bcc6456b-gls87 1/1 Running 0 10h coredns-57bcc6456b-mclbw 1/1 Running 0 10h coredns-autoscaler-79b778686c-59lw5 1/1 Running 0 10h kube-proxy-4d2cg 1/1 Running 0 5h16m kubernetes-dashboard-74d8c675bc-m7bvn 1/1 Running 0 10h metrics-server-69df9f75bf-47khn 1/1 Running 0 10h omsagent-kg6mp 1/1 Running 0 5h16m omsagent-rs-6b8f66f7db-lrnbm 1/1 Running 0 5h16m tunnelfront-64bb48dc47-c5vqb 1/1 Running 0 10h