チュートリアル:Service Connector とワークロード ID を使用して AKS のAzure Storageに接続する

このチュートリアルでは、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.ServiceLinkerMicrosoft.ContainerServiceMicrosoft.ContainerRegistry、および Microsoft.ManagedIdentity リソース プロバイダー。 az provider register -n Microsoft.[service] を実行してプロバイダーを登録できます。
  • Git を使用してサンプル リポジトリにアクセスし、複製します。
  • コンテナー イメージと Kubernetes リソースを管理するためにインストールされた Dockerkubectlkubectlを実行して、az aks install-cliをローカルにインストールします。
  • Azure CLIがインストールされています。

Azure リソースを作成する

  1. az login を実行し、プロンプトに従ってAzureにサインインします。

  2. このチュートリアルで使用する Azure リソース グループを作成し、<region> プレースホルダーを有効な値に置き換えます。 location は、サブスクリプションがAzure リソースに対して十分なコンピューティング クォータを持ち、どのサービスにも制限がないAzure リージョンである必要があります。

    az group create \
        --name MyResourceGroup \
        --location <region>
    
  3. 次のコマンドを実行して、サービス接続、ポッド定義、サンプル アプリケーションを含む AKS クラスターを作成します。 詳細については、「Quickstart: Azure CLIを参照してください。

    az aks create \
        --resource-group MyResourceGroup \
        --name MyAKSCluster \
        --enable-managed-identity \
        --node-count 1
    
  4. 次のコマンドを実行して、クラスターに接続します。

    az aks get-credentials \
        --resource-group MyResourceGroup \
        --name MyAKSCluster
    
  5. AKS クラスターが接続し、サンプル アプリケーションが対話するターゲット サービスとなるAzure Storage アカウントを作成します。 詳細については、「 Azure ストレージ アカウントの作成」を参照してください。 次のコマンドを実行し、<storageaccountname> を 3 から 24 文字の小文字または数字の名前に置き換え、Azure全体で一意の名前に置き換えます。

    az storage account create \
        --resource-group MyResourceGroup \
        --name <storageaccountname> \
        --sku Standard_LRS
    
  6. AKS ポッド定義によって使用されるアプリケーション コンテナー イメージをホストするAzure コンテナー レジストリを作成します。 詳細については、「Quickstart: Azure ポータルを使用してAzure コンテナー レジストリを作成するを参照してください。 次のコマンドを実行し、<registryname> を 5 から 50 の小文字または数字の名前に置き換え、Azure全体で一意の名前に置き換えます。

    az acr create \
        --resource-group MyResourceGroup \
        --name <registryname> \
        --sku Standard
    
  7. AKS クラスターがレジストリ イメージを使用できるように、匿名プルを有効にします。 <registryname> プレースホルダーをレジストリ名に置き換えます。

    az acr update \
        --resource-group MyResourceGroup \
        --name <registryname> \
        --anonymous-pull-enabled
    
  8. 次のコマンドを実行して、サービス接続の作成で 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 ファイルを編集するときに使用できます。

Azure ポータルのスクリーンショットで、Service Connector によって作成された Kubernetes リソースを表示しています。

サンプル アプリケーションを作成する

  1. サンプル リポジトリを複製し、サンプル アプリを含むディレクトリに変更します。 このフォルダーから残りのコマンドを実行します。

    git clone https://github.com/Azure-Samples/serviceconnector-aks-samples.git
    cd serviceconnector-aks-samples/azure-storage-workload-identity
    
  2. az acr build コマンドを使用して、イメージをビルドしてコンテナー レジストリにプッシュします。 <registryname> プレースホルダーをレジストリ名に置き換えます。

    az acr build --registry <registryname> --image sc-demo-storage-identity:latest ./
    
  3. az acr repository list コマンドを使用して、コンテナー レジストリ内のイメージを表示します。 <registryname> プレースホルダーをレジストリ名に置き換えます。

    az acr repository list --name <registryname> --output table
    

アプリケーションを実行し接続をテストする

  1. ローカル アプリ フォルダー内の pod.yaml ファイル内の次のプレースホルダーを置き換えます。

    • <YourContainerImage>: コンテナー レジストリ内のイメージ名に置き換えます (例: <registryname>.azurecr.io/sc-demo-storage-identity:latest)。
    • <ServiceAccountCreatedByServiceConnector>: サービス アカウント「Service Connector」を接続作成後に作成されたものに置き換えます。 Azure ポータルの AKS クラスター Service Connector ページで、サービス アカウント名を確認できます。
    • <SecretCreatedByServiceConnector>: 接続を作成した後に生成されたシークレットサービスコネクタに置き換えてください。 Azure ポータルの AKS クラスター Service Connector ページで、サービス アカウント名を確認できます。
  2. kubectl applyを使用してクラスターにポッドをデプロイします。 コマンドでは、AKS クラスターの既定の名前空間に sc-demo-storage-identity という名前のポッドが作成されます。

    kubectl apply -f pod.yaml
    
  3. kubectlを使用してポッドを表示して、デプロイが成功したことを確認します。

    kubectl get pod/sc-demo-storage-identity
    
  4. kubectlを使用してログを表示して、接続が確立されていることを確認します。

    kubectl logs pod/sc-demo-storage-identity
    

リソースをクリーンアップする

このチュートリアル用に作成したAzure リソースが不要になった場合は、MyResourceGroup リソース グループを削除することで削除できます。

az group delete \
  --resource-group MyResourceGroup