次の方法で共有


コマンド呼び出し機能またはコマンド実行機能を使用してプライベート Azure Kubernetes Service (AKS) クラスターにアクセスする

プライベート AKS クラスターにアクセスするには、クラスター仮想ネットワーク、ピアリングされたネットワーク、構成済みのプライベート エンドポイントのいずれかで接続する必要があります。 これらのアプローチでは、VPN や ExpressRoute を構成する、クラスターの仮想ネットワーク内にジャンプボックスをデプロイする、または別の仮想ネットワーク内にプライベート エンドポイントを作成する、のいずれかを行う必要があります。

Azure CLI では、command invoke を使用して、VPN または Express Route を構成せずにプライベート クラスターにアクセスすることもできます。 command invoke を使用すると、クラスターに直接接続することなく、Azure API を使用して、プライベート クラスター上で kubectlhelm のようなコマンドをリモートで呼び出すことができます。 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 によって作成されたポッドは、クラスターを操作するための kubectlhelm を提供します。 jqxargsgrepawk は、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 CPU1Gi 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-systemmyPrivateCluster クラスターで コマンドを実行します。

最初に、後続のコマンドで使用するリソース グループとクラスター名の環境変数を設定します。

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を使用して、添付ファイルでコマンドを実行する

--fileaz 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 クラスターについて詳しくは、次の記事をご覧ください。