サービスプリンシパルを自動的に作成して使用する方法
この記事 をベースにデプロイしています。(ほぼそのまま記載部分あり)
ローカル環境
macOS Big Sur 11.3
python 3.8.3
前提条件
- Azure環境がすでに用意されていること(テナント/サブスクリプション)。
- ローカル環境に「azure cli」がインストールされていること。
- このシナリオでは、Azure CLI によって、AKS クラスター用のサービスプリンシパルが自動的に作成されます。 この操作を正しく完了するためには、Azureアカウントが、サービスプリンシパルを作成するための適切な権限を持っている必要があります。
事前準備
- ローカルの環境変数に以下を定義しておきます。
- ACR_NAME=acr0ituru
- ACR_RES_GROUP=rg_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のレジストリ作成
$ az acr create --resource-group $ACR_RES_GROUP --name $ACR_NAME --sku Standard --location japaneast
数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。loginServerが、"acr0ituru.azurecr.io"(指定したACR名)になっていることを確認します。
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 \
--attach-acr $ACR_NAME
数分後、コマンドが完了し、クラスターに関する情報が JSON 形式で返されます。
Kubernetesクラスタ接続のための認証情報の取得
$ az aks get-credentials --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 つのユースケースから眺めてみた