このチュートリアルでは、Service Connector を使用して、ワークロード ID を使用してAzure Storage アカウントをAzure Kubernetes Service (AKS) クラスター内のポッドに接続する方法について説明します。 次のタスクを実行します。
- AKS クラスターとAzure Storage アカウントを作成します。
- Service Connector を使用して、AKS クラスターと Azure Storage アカウントの間に接続を作成します。
- AKS クラスターからAzure Storage アカウントに接続するサンプル アプリケーションを複製します。
- AKS クラスター内のポッドにアプリケーションをデプロイし、接続をテストします。
- リソースをクリーンアップする。
前提条件
- コンテナー、ワークロード ID、AKS に関する基本的な理解。 詳細については、「
Tutorial: Azure Kubernetes Service (AKS) を参照してください。 - Azure リソースへの書き込み権限を持つ Azure サブスクリプションで、Service Connector をサポートするAzure リージョン内にあり、チュートリアルを実行するのに十分な AKS サポートとコンピューティング クォータがある必要があります。 無料でアカウントを作成できます。
- Azure サブスクリプションに登録されている
Microsoft.ServiceLinker、Microsoft.ContainerService、Microsoft.ContainerRegistry、およびMicrosoft.ManagedIdentityリソース プロバイダー。az provider register -n Microsoft.[service]を実行してプロバイダーを登録できます。 - Git を使用してサンプル リポジトリにアクセスし、複製します。
- コンテナー イメージと Kubernetes リソースを管理するためにインストールされた Docker と kubectl。
kubectlを実行して、az aks install-cliをローカルにインストールします。 - Azure CLIがインストールされています。
Azure リソースを作成する
az login を実行し、プロンプトに従ってAzureにサインインします。
このチュートリアルで使用する Azure リソース グループを作成し、
<region>プレースホルダーを有効な値に置き換えます。locationは、サブスクリプションがAzure リソースに対して十分なコンピューティング クォータを持ち、どのサービスにも制限がないAzure リージョンである必要があります。az group create \ --name MyResourceGroup \ --location <region>次のコマンドを実行して、サービス接続、ポッド定義、サンプル アプリケーションを含む AKS クラスターを作成します。 詳細については、「
Quickstart: Azure CLI を参照してください。az aks create \ --resource-group MyResourceGroup \ --name MyAKSCluster \ --enable-managed-identity \ --node-count 1次のコマンドを実行して、クラスターに接続します。
az aks get-credentials \ --resource-group MyResourceGroup \ --name MyAKSClusterAKS クラスターが接続し、サンプル アプリケーションが対話するターゲット サービスとなるAzure Storage アカウントを作成します。 詳細については、「 Azure ストレージ アカウントの作成」を参照してください。 次のコマンドを実行し、
<storageaccountname>を 3 から 24 文字の小文字または数字の名前に置き換え、Azure全体で一意の名前に置き換えます。az storage account create \ --resource-group MyResourceGroup \ --name <storageaccountname> \ --sku Standard_LRSAKS ポッド定義によって使用されるアプリケーション コンテナー イメージをホストするAzure コンテナー レジストリを作成します。 詳細については、「Quickstart: Azure ポータルを使用してAzure コンテナー レジストリを作成するを参照してください。 次のコマンドを実行し、
<registryname>を 5 から 50 の小文字または数字の名前に置き換え、Azure全体で一意の名前に置き換えます。az acr create \ --resource-group MyResourceGroup \ --name <registryname> \ --sku StandardAKS クラスターがレジストリ イメージを使用できるように、匿名プルを有効にします。
<registryname>プレースホルダーをレジストリ名に置き換えます。az acr update \ --resource-group MyResourceGroup \ --name <registryname> \ --anonymous-pull-enabled次のコマンドを実行して、サービス接続の作成で AKS ワークロードのワークロード ID を有効にするために使用できるユーザー割り当てマネージド ID を作成します。 詳細については、「Azure ポータルを使用してユーザー割り当てマネージド ID を管理するを参照してください。
az identity create \ --resource-group MyResourceGroup \ --name MyIdentity
Service Connector を使ってサービス接続を作成する
Azure CLIまたは Azure ポータルを使用して、AKS クラスターとAzure Storage アカウントの間にサービス接続を作成します。
次の Azure CLI コマンドを実行して、Azure ストレージ アカウントへのサービス接続を作成します。
<storageaccountname>をストレージ アカウント名に置き換え、<user-identity-resource-id>をユーザー割り当てマネージド ID リソース ID に置き換えます。
前の az identity create コマンドの出力からユーザー割り当てマネージド ID リソース ID を取得することも、/subscriptions/<subscription-id>/resourceGroups/MyResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/MyIdentity 形式を使用することもできます。
az aks connection create storage-blob \
--resource-group MyResourceGroup \
--name MyAKSCluster \
--target-resource-group MyResourceGroup \
--account <storageaccountname> \
--workload-identity <user-identity-resource-id>
接続が作成されると、Azure ポータルの [Service Connector] ページに新しい接続に関する情報が表示されます。 この情報は、このチュートリアルの後半で pod.yaml ファイルを編集するときに使用できます。
サンプル アプリケーションを作成する
サンプル リポジトリを複製し、サンプル アプリを含むディレクトリに変更します。 このフォルダーから残りのコマンドを実行します。
git clone https://github.com/Azure-Samples/serviceconnector-aks-samples.git cd serviceconnector-aks-samples/azure-storage-workload-identityaz acr buildコマンドを使用して、イメージをビルドしてコンテナー レジストリにプッシュします。<registryname>プレースホルダーをレジストリ名に置き換えます。az acr build --registry <registryname> --image sc-demo-storage-identity:latest ./az acr repository listコマンドを使用して、コンテナー レジストリ内のイメージを表示します。<registryname>プレースホルダーをレジストリ名に置き換えます。az acr repository list --name <registryname> --output table
アプリケーションを実行し接続をテストする
ローカル アプリ フォルダー内の pod.yaml ファイル内の次のプレースホルダーを置き換えます。
-
<YourContainerImage>: コンテナー レジストリ内のイメージ名に置き換えます (例:<registryname>.azurecr.io/sc-demo-storage-identity:latest)。 -
<ServiceAccountCreatedByServiceConnector>: サービス アカウント「Service Connector」を接続作成後に作成されたものに置き換えます。 Azure ポータルの AKS クラスター Service Connector ページで、サービス アカウント名を確認できます。 -
<SecretCreatedByServiceConnector>: 接続を作成した後に生成されたシークレットサービスコネクタに置き換えてください。 Azure ポータルの AKS クラスター Service Connector ページで、サービス アカウント名を確認できます。
-
kubectl applyを使用してクラスターにポッドをデプロイします。 コマンドでは、AKS クラスターの既定の名前空間にsc-demo-storage-identityという名前のポッドが作成されます。kubectl apply -f pod.yamlkubectlを使用してポッドを表示して、デプロイが成功したことを確認します。kubectl get pod/sc-demo-storage-identitykubectlを使用してログを表示して、接続が確立されていることを確認します。kubectl logs pod/sc-demo-storage-identity
リソースをクリーンアップする
このチュートリアル用に作成したAzure リソースが不要になった場合は、MyResourceGroup リソース グループを削除することで削除できます。
az group delete \
--resource-group MyResourceGroup