次の方法で共有


AKS クラスターをデプロイするときの OrasPullUnauthorizedVMExtensionError エラー コード (212)

この記事では、Microsoft Azure Kubernetes Service (AKS) クラスターを作成してデプロイしようとしたときに発生する OrasPullUnauthorizedVMExtensionError エラー (エラー コード 212) を特定して解決する方法について説明します。

症状

送信の種類が none または block の AKS クラスターを作成しようとすると、次のエラー メッセージが表示されます。

VMExtensionProvisioningError: 拡張機能 'vmssCSE' の処理中に VM からエラーが報告されました。

エラーメッセージ: "有効化に失敗しました: コマンドの実行に失敗しました: コマンドは終了ステータス=212で終了しました"

ブートストラップ コンテナー レジストリの承認に失敗しました。 kubelet ID がレジストリにプル アクセスできることを確認してください。

原因

ネットワーク分離クラスターの場合、エグレス トラフィックは制限されます。 この機能には、AKS ブートストラップ用の Microsoft Artifact Registry (MAR) から必要なバイナリまたはイメージをダウンロードするためのプロキシとして機能するプライベート Azure Container Registry (ACR) キャッシュが導入されています。 ACR への匿名アクセスを無効にすることをお勧めします。 AKS ノードは、kubelet ID を使用して ACR にアクセスします。 acrpullアクセス許可が正しく設定されていない場合、または kubelet ID が VM インスタンスにバインドされていない場合は、承認されていないエラーが発生します。

解決策

この問題を解決するには、次の手順に従ってください。

  1. Secure Shell (SSH) を使用して VM インスタンスにアクセスし、ログ ファイルを取得します/var/log/azure/cluster-provision.log。 ログを確認して、問題が 401 エラー、Azure Instance Metadata Service (IMDS) 接続タイムアウト、または HTTP コード 400 で見つからない ID に関連しているかどうかを確認します。

  2. 次のコマンドを実行して、AKS がブートストラップ ACR として使用する ACR リソース ID を取得します。

    export REGISTRY_ID=$(az aks show -g ${RESOURCE_GROUP} -n ${CLUSTER_NAME} --query 'bootstrapProfile.containerRegistryId' -o tsv)
    
  3. 問題が 401 の未承認エラーに関連している場合は、AKS ID に、レジストリで承認するために必要な ACR ロールがあることを確認する必要があります。 これを行うには、ACR レジストリのロールの割り当てを確認して、AKS ID の既存のロールの割り当てがあるかどうかを確認します。

    AKS ID に ACR レジストリへのアクセス許可があることを確認するには、最初に次のコマンドを実行して AKS ID のプリンシパル ID を取得します。

    export KUBELET_IDENTITY_PRINCIPAL_ID=$(az aks show -g ${RESOURCE_GROUP} -n ${CLUSTER_NAME} --query 'identityProfile.kubeletidentity.clientId' -o tsv)
    

    その後、AKS ID に正しい ACR ロールを割り当てます。 レジストリのロール割り当てアクセス許可モードが "ABAC 対応" で、"RBAC レジストリ + ABAC リポジトリのアクセス許可" に構成されている場合は、 Container Registry Repository Reader ロールを割り当てる必要があります。 それ以外の場合、レジストリのロール割り当てアクセス許可モードが ABAC 対応ではなく、"RBAC レジストリのアクセス許可" のみに構成されている場合は、 AcrPull ロールを割り当てる必要があります。 ABAC 対応 ACR レジストリと必要なさまざまなロールの詳細については、 https://aka.ms/acr/auth/abac を参照してください。

    ABAC 対応レジストリの場合は、次のコマンドを実行します。 ABAC 対応以外のレジストリの場合は、次のコマンドの Container Registry Repository Reader を代わりに AcrPull に置き換えます。

    az role assignment create --role "Container Registry Repository Reader" --scope ${REGISTRY_ID} --assignee-object-id ${KUBELET_IDENTITY_PRINCIPAL_ID} --assignee-principal-type ServicePrincipal
    
  4. ログ エラーで ID が見つからないことが示された場合は、kubelet ID を仮想マシン スケール セット (VMSS) に手動でバインドして簡単に修正します。

  5. 問題が IMDS 接続タイムアウトに関連している場合は、サポート チケットを送信します。

  6. 上記の操作が完了した場合は、クラスターを調整します。

リファレンス

お問い合わせはこちらから

ご質問がある場合は、 Azure コミュニティサポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。