プライベート 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
機能が使用されます。
ヒント
Azure で Microsoft Copilot を使用して、Azure portal で kubectl
コマンドを実行できます。 詳細については、「 Azure で Microsoft Copilot を使用して AKS クラスターを効率的に操作する」を参照してください。
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
ロールへのアクセス。
制限事項
この機能は、クラスター アクセスを簡略化するために設計されており、プログラムによるアクセス用には設計されていません。 クラスターへのプログラムによる呼び出しには、Bastion、VPN、または Express Route 経由の直接 API アクセスを利用する必要があります。
Run command
を使用して Kubernetes を呼び出すプログラムがある場合は、次の短所の影響を受けます。
- "exitCode" と "テキスト出力" のみが取得され、API レベルの詳細が失われます。
- 1 つの追加ホップでは、追加の障害ポイントが発生します。
Run command
によって作成されたポッドには、200m CPU
要求と500Mi memory
要求と、500m CPU
と1Gi memory
の制限があります。 すべてのノードが完全または過剰にコミットされている場合、ARM API タイムアウト 60 秒以内にポッドをスケジュールできない可能性があります。 つまり、 Run command
呼び出しは失敗します。
command invoke
はクラスターからコマンドを実行するため、この方法で実行されるすべてのコマンドは、構成済みのネットワーク制限およびその他の構成済み制限の対象となります。 このコマンド ポッドのスケジュールを設定するのに十分なノードとリソースがクラスターにあることを確認してください。
注
command invoke
の出力はサイズが 512kB に制限されています。
AKS クラスターでコマンドを実行する
az aks command invoke
を使用してプライベート AKS クラスターに対してコマンドを実行する方法の例を次に示します。 これらの例では、既存のリソース グループと AKS クラスターがあることを前提としています。
command invoke
を使用して 1 つのコマンドを実行する
az aks command invoke --command
コマンドを使用して、クラスターでコマンドを実行できます。 次のコマンドの例では、kubectl get pods -n kube-system
の myPrivateCluster クラスターで コマンドを実行します。
最初に、後続のコマンドで使用するリソース グループとクラスター名の環境変数を設定します。
export AKS_RESOURCE_GROUP="myResourceGroup"
export AKS_CLUSTER_NAME="myPrivateCluster"
上記の環境変数を使用すると、名前を書き直すことなく、次のセクションで AKS コマンドを実行できます。
AKS クラスターで 1 つの kubectl コマンドを実行するには:
az aks command invoke \
--resource-group $AKS_RESOURCE_GROUP \
--name $AKS_CLUSTER_NAME \
--command "kubectl get pods -n kube-system"
command invoke
を使用して複数のコマンドを実行する
複数のコマンドを実行することもできます。 次の例では、クラスターで 3 つの helm
コマンドを順番に実行します。
az aks command invoke \
--resource-group $AKS_RESOURCE_GROUP \
--name $AKS_CLUSTER_NAME \
--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
パラメーターを使用する場合は、ファイルが存在し、現在の作業ディレクトリにアクセスできる必要があります。 以下では、デモンストレーション用の最小限のデプロイ ファイルを作成します。
ファイルを添付してコマンドを実行するには、最初に deployment.yaml
という名前の Kubernetes マニフェスト ファイルを作成します。 次の例では、小さな nginx デプロイを作成し、 command invoke
で適用します。
cat <<EOF > deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-demo
spec:
replicas: 1
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
spec:
containers:
- name: nginx
image: nginx:1.21.6
ports:
- containerPort: 80
EOF
az aks command invoke \
--resource-group $AKS_RESOURCE_GROUP \
--name $AKS_CLUSTER_NAME \
--command "kubectl apply -f deployment.yaml -n default" \
--file deployment.yaml
command invoke
を使用して現在のディレクトリ内のすべてのファイルが添付されたコマンドを実行する
システム サイズの制限を超えないように、必要な小さなファイルのみを使用してください。 以下では、2 つの最小 YAML ファイルをアタッチする前に作成します。
cat <<EOF > deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-demo
spec:
replicas: 1
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
spec:
containers:
- name: nginx
image: nginx:1.21.6
ports:
- containerPort: 80
EOF
cat <<EOF > configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
data:
welcome-message: "Hello from configmap"
EOF
az aks command invoke \
--resource-group $AKS_RESOURCE_GROUP \
--name $AKS_CLUSTER_NAME \
--command "kubectl apply -f deployment.yaml -f configmap.yaml -n default" \
--file deployment.yaml \
--file configmap.yaml
Run command
を無効にする
Run command
を .properties.apiServerAccessProfile.disableRunCommand
に設定することで、true
機能を無効にすることができます。
トラブルシューティング
az aks command invoke
に関する最も一般的な問題とその解決方法については、az aks command invoke
のエラーを解決する方法に関するページを参照してください。
次のステップ
この記事では、プライベート クラスターにアクセスし、そのクラスターでコマンドを実行する方法について説明しました。 AKS クラスターについて詳しくは、次の記事をご覧ください。
Azure Kubernetes Service