手動でサービスプリンシパルを作成する方法
この記事 をベースにデプロイしています。(ほぼそのまま記載部分あり)
ローカル環境
macOS Big Sur 11.3
python 3.8.3
前提条件
- Azure環境がすでに用意されていること(テナント/サブスクリプション)。
- ローカル環境に「azure cli」がインストールされていること。
事前準備
- ローカルの環境変数に以下を定義しておきます。
- ACR_NAME=acr0ituru
- ACR_RES_GROUP=rg_ituru_acr
- SP_NAME=sp_ituru_acr
- AKS_CLUSTER_NAME=ituruAKSCluster
- AKS_RES_GROUP=rg_ituru_aks_cp
Azure にログイン
azure cli バージョンの確認
$ az version
{
"azure-cli": "2.26.1",
"azure-cli-core": "2.26.1",
"azure-cli-telemetry": "1.0.6",
"extensions": {
"azure-iot": "0.10.13"
}
}
使用するテナントのAzure環境へのログイン
$ az login --tenant <tenant_id>
使用サブスクリプションを定義します。
$ az account set --subscription '<サブスクリプション名>'
Azure Container Registry
ACR リソースグループの作成
$ az group create --resource-group $ACR_RES_GROUP --location japaneast
ACRのレジストリ作成
ACRのレジストリを作成します。
$ az acr create --resource-group $ACR_RES_GROUP --name $ACR_NAME --sku Standard --location japaneast
数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。loginServerが、"acr0ituru.azurecr.io"(指定したACR名)になっていることを確認します。
AKS と ACR の連携のためのサービスプリンシバルの定義
ACR のリソースIDの取得
$ ACR_ID=$(az acr show --name $ACR_NAME --query id --output tsv)
サービスプリンシパルのクライアントIDとシークレットの取得
SP_PASSWD=$(az ad sp create-for-rbac --name $SP_NAME --role Reader --scopes $ACR_ID --query password --output tsv)
APP_ID=$(az ad sp list --display-name $SP_NAME --query '[].{ID:appId}' --output tsv)
Azure Kubernetes Service
AKS リソースグループの作成
$ az group create --name $AKS_RES_GROUP --location japaneast
クラスターの監視を有効にする
Microsoft.OperationsManagement と Microsoft.OperationalInsights がサブスクリプションで登録されていることを確認します。
$ az provider show -n Microsoft.OperationsManagement -o table
$ az provider show -n Microsoft.OperationalInsights -o table
登録されていない場合は、次を使用して、Microsoft.OperationsManagement と Microsoft.OperationalInsights を登録します。
$ az provider register --namespace Microsoft.OperationsManagement
$ az provider register --namespace Microsoft.OperationalInsights
AKS クラスターの作成
クラスターを 3 つのノードで作成します。ACRとAKS連携のためのパラーメータも定義します。
$ az aks create \
--name $AKS_CLUSTER_NAME \
--resource-group $AKS_RES_GROUP \
--node-count 3 \
--enable-addons monitoring \
--node-vm-size Standard_DS2_v2 \
--generate-ssh-keys \
--service-principal $APP_ID \
--client-secret $SP_PASSWD
数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。
Kubernetesクラスタ接続のための認証情報の取得
$ az aks get-credentials --admin --resource-group $AKS_RES_GROUP --name $AKS_CLUSTER_NAME
.kube/configファイルに接続情報を書き込むことで、ローカルからクラスタ操作できるようになります。
kubectlコマンドを使ったクラスターの操作
ローカルから、kubectlコマンド実行してみる
kubectl をローカルにインストールします
$ az aks install-cli
接続先クラスターの確認
$ kubectl config view
クラスターの情報確認
$ kubectl cluster-info
クラスター上で動く Node の確認
$ kubectl get node
-o=wideをつけると、Nodeの追加情報表示(IPやOSバージョン等)
$ kubectl get node -o=wide
3台のNodeのうち、1台の詳細確認
$ kubectl describe node $(kubectl get node -o=jsonpath='{.items[0].metadata.name}')
ヘルプ
$ kubectl help
ACR および AKS の操作
イメージを ACR にインポートする
$ az acr import -n $ACR_NAME --source docker.io/library/nginx:latest --image nginx:v1
ACR から AKS にサンプルイメージをデプロイする
デプロイするマニフェスト
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx0-deployment
labels:
app: nginx0-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx0
template:
metadata:
labels:
app: nginx0
spec:
containers:
- name: nginx
image: acr0ituru.azurecr.io/nginx:v1
ports:
- containerPort: 80
デプロイの実施
$ kubectl apply -f acr-nginx.yaml
Podの確認
$ kubectl get pods
番外編:課金回避のためのリソースグループの削除
リソースグループ、コンテナーサービス、およびすべての関連リソースを削除します。
az group delete --name $AKS_RES_GROUP --yes --no-wait
az group delete --name $ACR_RES_GROUP --yes --no-wait
参考情報
以下の情報を参考にさせていただきました。感謝申し上げます。
az ad sp create-for-rbac は何をやっているのか
Azure AD のサービスプリンシパルを 3 つのユースケースから眺めてみた