"az aks command invoke" エラーを解決する
この記事では、Microsoft Azure CLI で az aks コマンド呼び出しエラーを解決して、任意のAzure Kubernetes Service (AKS) クラスター (特にプライベート AKS クラスター) に正常に接続できるようにする方法について説明します。
他の接続方法では、次の表に示すように、追加の構成コンポーネントを使用する必要があります。
接続方法 | 追加の構成コンポーネント |
---|---|
仮想ネットワーク | 仮想プライベート ネットワーク (VPN) |
ピアリングされたネットワーク | Azure ExpressRoute |
プライベート エンドポイント | ジャンプボックス |
az aks command invoke
Azure CLI コマンドは、追加の構成コンポーネントを必要としないクラスターに接続する別の方法です。
コマンドをaz aks command invoke
実行すると、Azure CLI によって名前空間にaks-command
ポッドが自動的に作成command-<ID>
され、AKS クラスターにアクセスし、必要な情報が取得されます。
前提条件
Kubernetes kubectl ツール。 Azure CLI を使用して kubectl をインストールするには、 az aks install-cli コマンドを 実行します。
現象
次の表に、一般的な az aks command invoke
エラー メッセージを示します。 各エラー メッセージには、エラーが発生している理由とその修正方法を説明するセクションへのリンクがあります。
エラー メッセージ | リンク |
---|---|
操作で無効な状態 'Not Found' が返されました | 原因 1: ノードまたはリソースの制約のためにポッドを作成できない |
kubernetes エラーが原因でマネージド クラスターでコマンドを実行できませんでした。 details: admission webhook "validation.gatekeeper.sh" が要求を拒否しました: <policy-specific-message> | 原因 2: ポッドの作成を許可しないAzure Policy |
サーバーからのエラー (禁止): 名前空間は禁止されています:ユーザー "<ID>" は、クラスター スコープで API グループ "" のリソース "<リソース>" を一覧表示できません | 原因 3: 必要なロールが付与されない |
MSI への接続に失敗しました。 MSI が正しく構成されていることを確認してください。 返されるトークン要求の取得: 応答 [400]; |
原因 4: Cloud Shellの問題がある |
原因 1: ノードまたはリソースの制約のためにポッドを作成できない
ポッドが正常なNot Found
状態 (などRunning
) にcommand-<ID>
到達できないため、操作によって状態が返されます。 (多くの場合、ポッドは状態のまま Pending
です)。この場合、ノードはポッドをスケジュールできません。 このシナリオには、次の原因など、さまざまな原因が考えられます。
- リソース制約
- または
SchedulingDisabled
状態をNotReady
持つノード - ポッドが許容できないテイントを持つノード
- その他の原因
解決策 1: ポッドをスケジュールして実行できるように構成を変更する
ポッドを command-<ID>
スケジュールして実行できることを確認します。
原因 2: ポッドの作成を許可しないAzure Policy
特定の Azure ポリシーがある場合、ポッドの構成が az aks command invoke
許可されていないため、コマンドが失敗する command-<ID>
可能性があります。 たとえば、読み取り専用ルート ファイル システムまたはその他の特定の構成を必要とする Azure ポリシーがあるとします。
解決策 2: ポッドの作成を禁止するポリシーの名前空間を除外する
ポッドの作成を aks-command
許可しない、関連付けられている Azure ポリシーの名前空間を除外することをお勧めします。 除外の詳細については、「Azure Policyのスコープについて」を参照してください。
Azure Policyを除外するには:
Azure portalで、[ポリシー] を検索して選択します。
[ ポリシー ] ナビゲーション ウィンドウで、[ 作成 ] セクションを見つけて、[ 割り当て] を選択します。
割り当ての表で、変更する 割り当て名 を含む行を見つけて、割り当ての名前を選択します。
その割り当ての [ポリシーの割り当て] ページで、[ 割り当ての編集] を選択します。
[ パラメーター ] タブを選択します。
[ 入力またはレビューが必要なパラメーターのみを表示する ] オプションをオフにします。
[ 名前空間の除外 ] ボックスで、除外する名前空間の一覧に aks-command 名前空間を追加します。
または、ポリシーが組み込みのポリシーでない場合は、ポッドのcommand-<ID>
構成をチェックし、必要に応じてポリシーを調整できます。 ポッドの YAML 構成を調べるには、次のコマンドを実行します。
kubectl get pods command-<ID> --namespace aks-command --output yaml
原因 3: 必要なロールが付与されない
コマンドを az aks command invoke
使用するには、クラスター上の次のロールにアクセスできる必要があります。
Microsoft.ContainerService/managedClusters/runCommand/action
Microsoft.ContainerService/managedClusters/commandResults/read
これらのロールがない場合、コマンドは az aks command invoke
必要な情報を取得できません。
解決策 3: 必要なロールを追加する
ロールと ロールをMicrosoft.ContainerService/managedClusters/commandResults/read
追加しますMicrosoft.ContainerService/managedClusters/runCommand/action
。
原因 4: Cloud Shellの問題がある
コマンドはaz aks command invoke
、Azure Cloud Shell 環境で直接実行される場合、想定どおりに処理されません。 これは、Cloud Shellの既知の問題です。
解決策 4a: az login コマンドを最初に実行する
Cloud Shellで、 を実行する前に az login コマンドを実行az aks command invoke
します。
解決策 4b: ローカル コンピューターまたは仮想マシンでコマンドを実行する
az aks command invoke
ローカル コンピューターまたは Azure CLI がインストールされている任意の仮想マシン (VM) でコマンドを実行します。
サードパーティの情報に関する免責事項
この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。
お問い合わせはこちらから
質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。