こんにちは、 @dz_ こと大平かづみです。
Prologue - はじめに
AKS (Azure Container Service: Managed Kubernetes) を、Azure Cloud Shell で作成したときは問題なく作成できたのですが、
手元のマシンで実施すると、以下のようなエラーが出てうまくいきませんでした。
その対処法を書き留めておきます。
az aks create -g <resource group> -n <aks name> --node-count 1 --generate-ssh-key
AAD role propagation done[############################################] 100.0000%
Operation failed with status: 'Bad Request'. Details: Service principal clientID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx not found in Active Directory tenant xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, Please see https://aka.ms/acs-sp-help for more details.
※ <resource group>
, <aks name>
は任意の文字列
考察と対処
考察
考察としては、私の場合、1つのAzure アカウントで複数のサブスクリプションを使用していて、デフォルト(Pay as you go)ではないサブスクリプションでやりたかったのですが、それが関連してるように思いました。
ちなみに、上記エラーの tenant ID や client ID はあってました。
az login
az account set -s <使いたいサブスクリプションID>
# この後、続いて AKS の作成を行うと上記のエラー... (´・ω・`)
対処
ともあれ、以下のように AKS を作り直せばよいようです。
まず、上記のエラーが発生したとき、 ${HOME}/.azure/acsServicePrincipal.json
がある場合は、すでに Service Principal ができてるようです。
cat ${HOME}/.azure/acsServicePrincipal.json | jq
{
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx": {
"client_secret": "xxxxxxxxxxxxxxxxxxxx",
"service_principal": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
}
この Service Principal を指定して、 AKS を作成すればエラーになることなく作成できました。
Service Principal を指定して aks を作成する手順
まず、上記 json に書かれている Service Principal が存在するか確認します。
# 上記の Service Principal が存在するか確認する
az ad sp show --id <service_principal>
Service Principal があれば、下記のコマンドで AKS を作成しなおしましょう。 <service_principal>
, <client_secret>
は上記の json に書かれた値を指定してください。
もし Service Principal がない場合は、 AKS を最初から作成するか、別途 Service Principal を作って、その client secret を控えておき、下記のコマンドで使用すればよさそうです。
# Service Principal を指定して AKS を作成する
az aks create -g <resource_group>-n <aks name> --node-count 1 --service-principal <service_principal> --client-secret <client_secret>
※ --generate-ssh-key
を指定してないのは、本記事の冒頭でエラーが出た段階ですでにキーができてるはずだからです。キーがない場合は、 --generate-ssh-key
を指定して作成してください。
Epilogue - おわりに
ちょっとてこずりましたが、これを除けば、めちゃくちゃ使いやすい感じです!
引き続き AKS を勉強します~