コマンド呼び出し機能またはコマンド実行機能を使用してプライベート Azure Kubernetes Service (AKS) クラスターにアクセスする
プライベート AKS クラスターにアクセスするには、クラスター仮想ネットワーク、ピアリングされたネットワーク、構成済みのプライベート エンドポイントのいずれかで接続する必要があります。 これらのアプローチでは、VPN や ExpressRoute を構成する、クラスターの仮想ネットワーク内にジャンプボックスをデプロイする、または別の仮想ネットワーク内にプライベート エンドポイントを作成する、のいずれかを行う必要があります。
Azure CLI では、command invoke
を使用して、VPN または Express Route を構成せずにプライベート クラスターにアクセスすることもできます。 command invoke
を使用すると、クラスターに直接接続することなく、Azure API を使用して、プライベート クラスター上で kubectl
や helm
のようなコマンドをリモートで呼び出すことができます。 Microsoft.ContainerService/managedClusters/runcommand/action
アクションと Microsoft.ContainerService/managedclusters/commandResults/read
アクションは、command invoke
を使用するためのアクセス許可を制御します。
Azure portal では、Run command
機能を使用して、プライベート クラスターでコマンドを実行できます。 Run command
機能では、クラスターでコマンドを実行するために同じ command invoke
機能が使用されます。
Run command
によって作成されたポッドは、クラスターを操作するための kubectl
と helm
を提供します。 jq
、xargs
、grep
、awk
は、Bash サポートで使用できます。
開始する前に
作業を開始する前に、以下のリソースとアクセス許可があることを確認してください。
- 既存のプライベート クラスター。 まだお持ちでない場合は、プライベート AKS クラスターの作成に関する記事を参照してください。
- Azure CLI バージョン 2.24.0 以降。 バージョンを確認するには、
az --version
を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。 - クラスター上の
Microsoft.ContainerService/managedClusters/runcommand/action
およびMicrosoft.ContainerService/managedclusters/commandResults/read
ロールへのアクセス。
制限事項
この機能は、クラスター アクセスを簡略化するために設計されており、プログラムによるアクセス用には設計されていません。 Run command
を使用して Kubernetes を呼び出すプログラムがある場合は、次の短所の影響を受けます。
- "exitCode" と "テキスト出力" のみが取得され、API レベルの詳細が失われます。
- 1 つの追加ホップでは、追加の障害ポイントが発生します。
Run command
によって作成されたポッドは、200m CPU
と 500Mi memory
要求、および 500m CPU
と 1Gi memory
の制限を持ってハード コーディングされます。 まれに、すべてのノードがパックされている場合、ARM API 制限の 60 秒以内にポッドのスケジュールを設定することはできません。 つまり、自動スケーリングするように構成されている場合でも、Run command
は失敗します。
command invoke
はクラスターからコマンドを実行するため、この方法で実行されるコマンドはすべて、構成したネットワーク制限や構成したその他の制限の対象になります。 このコマンド ポッドのスケジュールを設定するのに十分なノードとリソースがクラスターにあることを確認してください。
Note
command invoke
の出力はサイズが 512kB に制限されています。
AKS クラスターでコマンドを実行する
command invoke
を使用して 1 つのコマンドを実行する
クラスターでコマンドを実行するには、
az aks command invoke --command
コマンドを使用します。 次のコマンドの例では、myResourceGroup の myPrivateCluster クラスターでkubectl get pods -n kube-system
コマンドを実行します。az aks command invoke \ --resource-group myResourceGroup \ --name myPrivateCluster \ --command "kubectl get pods -n kube-system"
command invoke
を使用して複数のコマンドを実行する
クラスターで複数のコマンドを実行するには、
az aks command invoke --command
コマンドを使用します。 次のコマンド例では、myResourceGroup の myPrivateCluster クラスターで 3 つのhelm
コマンドを実行します。az aks command invoke \ --resource-group myResourceGroup \ --name myPrivateCluster \ --command "helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo update && helm install my-release bitnami/nginx"
添付されたファイルまたはディレクトリを使用してコマンドを実行するには、command invoke
を使用します
ファイルまたはディレクトリが添付されたコマンドを実行するには、
--file
パラメーターを指定したaz aks command invoke --command
コマンドを使用します。 次のコマンド例では、myResourceGroup の myPrivateCluster クラスターでkubectl apply -f deployment.yaml -n default
を実行します。deployment.yaml
ファイルは、az aks command invoke
が実行された開発用コンピューター上の現在のディレクトリから添付されます。az aks command invoke \ --resource-group myResourceGroup \ --name myPrivateCluster \ --command "kubectl apply -f deployment.yaml -n default" \ --file deployment.yaml
command invoke
を使用して現在のディレクトリ内のすべてのファイルが添付されたコマンドを実行する
現在のディレクトリにあるすべてのファイルが添付されたコマンドを実行するには、
--file
パラメーターを指定したaz aks command invoke --command
コマンドを使用します。 次のコマンド例では、myResourceGroup の myPrivateCluster クラスターでkubectl apply -f deployment.yaml configmap.yaml -n default
を実行します。deployment.yaml
およびconfigmap.yaml
ファイルは、az aks command invoke
が実行された開発用コンピューター上の現在のディレクトリの一部です。az aks command invoke \ --resource-group myResourceGroup \ --name myPrivateCluster \ --command "kubectl apply -f deployment.yaml configmap.yaml -n default" \ --file .
トラブルシューティング
az aks command invoke
に関する最も一般的な問題とその解決方法については、az aks command invoke
のエラーを解決する方法に関するページを参照してください。
次のステップ
この記事では、プライベート クラスターにアクセスし、そのクラスターでコマンドを実行する方法について説明しました。 AKS クラスターについて詳しくは、次の記事をご覧ください。
Azure Kubernetes Service