Azure Kubernetes Service (AKS) のカスタム仮想ネットワークにノード自動プロビジョニング (NAP) クラスターを作成する

この記事では、カスタム仮想ネットワーク (VNet) でノード自動プロビジョニング (NAP) が有効になっているAzure Kubernetes Service (AKS) クラスターを作成する方法について説明します。 VNet とサブネットを作成し、マネージド ID に VNet へのアクセス権を付与します。

[前提条件]

制限事項

環境変数を設定し、リソース グループを作成する

  1. この記事全体で使用する環境変数を設定します。 プレースホルダーの値をあなた自身の値に置き換えてください。

    export SUBSCRIPTION_ID="<subscription-id>"
    export RG_NAME="<resource-group-name>"
    export LOCATION="<location>"
    export VNET_NAME="<vnet-name>"
    export SUBNET_NAME="<subnet-name>"
    export IDENTITY_NAME="<managed-identity-name>"
    export CLUSTER_NAME="<cluster-name>"
    
  2. az account set コマンドを使用して、Azure サブスクリプションを選択します。

    az account set --subscription $SUBSCRIPTION_ID
    
  3. az group create コマンドを使用して、リソース グループを作成します。

    az group create \
        --name $RG_NAME \
        --location $LOCATION
    

仮想ネットワークとサブネットを作成する

  1. az network vnet create コマンドを使用して VNet を作成します。

    az network vnet create \
        --name $VNET_NAME \
        --resource-group $RG_NAME \
        --location $LOCATION \
        --address-prefixes 172.19.0.0/16
    
  2. az network vnet subnet create コマンドを使用してノード サブネットを作成します。

    az network vnet subnet create \
        --resource-group $RG_NAME \
        --vnet-name $VNET_NAME \
        --name $SUBNET_NAME \
        --address-prefixes 172.19.0.0/24
    

マネージド ID を作成し、VNet のアクセス許可を割り当てる

  1. az identity create コマンドを使用して、マネージド ID を作成します。

    az identity create \
        --resource-group $RG_NAME \
        --name $IDENTITY_NAME \
        --location $LOCATION
    
  2. az identity show コマンドを使用して、マネージド ID のプリンシパル ID を取得し、環境変数に保存します。

    IDENTITY_PRINCIPAL_ID=$(az identity show --resource-group $RG_NAME --name $IDENTITY_NAME --query principalId -o tsv)
    
  3. az role assignment create コマンドを使用して、マネージド ID にネットワーク共同作成者ロールを割り当てます。 --assignee-principal-type パラメーターは、マネージド ID を作成した後のレプリケーションの遅延によって発生するエラーを防ぎます。

    Important

    VNet スコープのネットワーク共同作成者ロールは、広範なアクセス許可を付与します。 運用環境でこの方法を使用する前に、 カスタム サブネット構成の RBAC 設定 を確認し、スコープ付きサブネットのアクセス許可を割り当てることを検討してください。

    az role assignment create \
        --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RG_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME" \
        --role "Network Contributor" \
        --assignee-object-id $IDENTITY_PRINCIPAL_ID \
        --assignee-principal-type ServicePrincipal
    

NAP を有効にしてクラスターに接続する

前のセクションで作成したマネージド ID、VNet、およびノード サブネットを使用します。 クラスターでは、「制限事項」の説明に従って、Standard Load Balancerを使用する必要があります。

  1. az aks create コマンドを使用して、カスタム VNet で NAP が有効になっている AKS クラスターを作成します。 次の表では、コマンドで使用される NAP およびネットワーク パラメーターについて説明します。

    パラメーター Description
    --node-provisioning-mode Auto クラスターで NAP を有効にします。
    --network-plugin azure クラスター ネットワークAzure CNI を使用します。
    --network-plugin-mode overlay ポッド ネットワークAzure CNI オーバーレイを使用します。
    --network-dataplane cilium Cilium データ プレーンを使用します。

    詳細については、Azure Kubernetes Service (AKS)のノード自動プロビジョニング (NAP) のネットワーク構成の概要を参照してください。

    az aks create \
        --name $CLUSTER_NAME \
        --resource-group $RG_NAME \
        --location $LOCATION \
        --assign-identity "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RG_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$IDENTITY_NAME" \
        --network-dataplane cilium \
        --network-plugin azure \
        --network-plugin-mode overlay \
        --vnet-subnet-id "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RG_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME" \
        --node-provisioning-mode Auto \
        --generate-ssh-keys
    

    クラスターの作成が完了すると、コマンドはクラスターに関する JSON 形式の情報を返します。

  2. kubectl コマンドを使用して、Kubernetes クラスターに接続するように az aks get-credentials を構成します。 このコマンドは、資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。

    az aks get-credentials \
        --resource-group $RG_NAME \
        --name $CLUSTER_NAME
    
  3. kubectl get コマンドを使用して、ご利用のクラスターへの接続を確認します。 このコマンドでは、クラスター ノードの一覧が返されます。

    kubectl get nodes
    

次のステップ

AKS でのノード自動プロビジョニングの詳細については、次の記事を参照してください。