Freigeben über


Zugriff auf einen privaten Azure Kubernetes Service (AKS)-Cluster über die Befehlsaufruf- oder „Run“-Befehlsfunktion

Wenn Sie auf einen privaten Azure Kubernetes Service (AKS)-Cluster zugreifen, müssen Sie eine Verbindung mit dem Cluster aus dem virtuellen Clusternetzwerk (VNet), einem peered-Netzwerk oder einem konfigurierten privaten Endpunkt herstellen. Diese Ansätze erfordern eine zusätzliche Konfiguration, z. B. das Einrichten einer VPN- oder Expressroute.

Bei Verwendung der Azure-Befehlszeilenschnittstelle können Sie mit command invoke auf private Cluster zugreifen, ohne ein VPN oder ExpressRoute konfigurieren zu müssen. Mit command invoke können Sie über die Azure-API Befehle wie kubectl und helm remote für Ihren privaten Cluster aufrufen, ohne eine direkte Verbindung mit dem Cluster herzustellen. Die RBAC-Aktionen Microsoft.ContainerService/managedClusters/runcommand/action und Microsoft.ContainerService/managedClusters/commandResults/read steuern die Berechtigungen für die Verwendung command invoke.

Wenn Sie das Azure-Portal nutzen, können Sie mit dem Run command-Feature Befehle für Ihren privaten Cluster ausführen. Das Run command-Feature verwendet dieselbe command invoke-Funktionalität zum Ausführen von Befehlen für Ihren Cluster. Der von Run command erstellte Pod bietet kubectl und helm für den Betrieb Ihres Clusters. jq, xargs, grep und awk stehen für Bash-Support zur Verfügung.

Tipp

Sie können Azure Copilot verwenden, um Befehle im Azure-Portal auszuführen kubectl . Weitere Informationen finden Sie unter Effizientes Arbeiten mit AKS-Clustern mithilfe von Azure Copilot.

Voraussetzungen

System- und Berechtigungsanforderungen

Anforderungstyp Specification So überprüfen Sie dies
Azure CLI-Version 2.24.0 oder höher Verwenden Sie den Befehl az --version, um Ihre Version zu überprüfen.
Privater AKS-Cluster Muss bereits vorhanden sein Wenn Sie über keinen privaten Cluster verfügen, führen Sie die Schritte unter Erstellen eines privaten AKS-Clusters aus.
RBAC-Aktionen Microsoft.ContainerService/managedClusters/runcommand/action und Microsoft.ContainerService/managedClusters/commandResults/read Führen Sie eine Überprüfung unter Verwendung der Azure portal Access control (IAM) Seite oder des az role assignment list Azure CLI-Befehls durch.

Befehl Pod-Ressourcen-Spezifikationen ausführen

Ressourcentyp Wert Auswirkung
CPU-Anforderungen 200m Minimale CPU-Reservierung für das Befehlsmodul
Speicheranforderungen 500 MiB Mindestspeicher für das Kommandomodul reserviert
CPU-Grenzwerte 500 m Maximale verfügbare CPU für den Befehls-Pod
Speicherbeschränkungen 1Gi Maximal verfügbarer Arbeitsspeicher für Befehls-Pod
Azure Resource Manager (ARM) API Timeout 60 Sekunden Maximale Zeit für die Pod-Planung
Ausgabegrößenbeschränkung 512kB Maximale Befehlsausgabegröße

Einschränkungen und Überlegungen

Entwurfsbereich

  • Nicht für den programmgesteuerten Zugriff: Verwenden Sie Bastion, VPN oder ExpressRoute für automatisierte API-Aufrufe.
  • Pod-Planungsabhängigkeit: Erfordert ausreichende Clusterressourcen (siehe Ressourcenspezifikationen).
  • Ausgabeeinschränkungen: ExitCode und Nur Text , keine Details auf API-Ebene.
  • Netzwerkeinschränkungen gelten: Vorbehaltlich von Clusternetzwerken und Sicherheitseinschränkungen.

Mögliche Fehlerpunkte

  • Pod-Planungsfehler, wenn Knoten ressourceneinschränkt sind.
  • ARM API Timeout (60 Sekunden), wenn der Pod nicht schnell geplant werden kann.
  • Ausgabekürzung, wenn die Antwort den Grenzwert von 512 kB überschreitet.

Verwenden Sie command invoke in einem privaten AKS-Cluster mit der Azure CLI.

  • Legen Sie Umgebungsvariablen für die Ressourcengruppe und den Clusternamen fest, die in nachfolgenden Befehlen verwendet werden sollen.

    export AKS_RESOURCE_GROUP="<resource-group-name>"
    export AKS_CLUSTER_NAME="<cluster-name>"
    

    Mit diesen Umgebungsvariablen können Sie AKS-Befehle ausführen, ohne deren Namen neu schreiben zu müssen.

Verwenden Sie command invoke zum Ausführen eines einzelnen Befehls.

  • Führen Sie einen einzelnen Befehl auf Ihrem Cluster mithilfe des az aks command invoke Befehls und des --command Parameters aus, um den auszuführenden Befehl anzugeben. Das folgende Beispiel ermittelt die Pods im kube-system-Namespace.

    az aks command invoke \
      --resource-group $AKS_RESOURCE_GROUP \
      --name $AKS_CLUSTER_NAME \
      --command "kubectl get pods -n kube-system"
    

Verwenden Sie command invoke zum Ausführen mehrerer Befehle.

  • Führen Sie mehrere Befehle auf Ihrem Cluster mithilfe des az aks command invoke Befehls und des --command Parameters aus, um die auszuführenden Befehle anzugeben. Im folgenden Beispiel wird das Bitnami Helm-Chart-Repository hinzugefügt, das Repository aktualisiert und das nginx Chart installiert.

    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"
    

Verwenden Sie command invoke, um Befehle mit einer angefügten Datei auszuführen.

Wenn Sie einen Befehl mit einer angefügten Datei ausführen möchten, muss die Datei vorhanden sein und in Ihrem aktuellen Arbeitsverzeichnis zugänglich sein. Im folgenden Beispiel erstellen wir eine minimale Bereitstellungsdatei zur Demonstration.

  1. Erstellen Sie eine Kubernetes-Manifestdatei mit dem Namen deployment.yaml. Die folgende Beispielbereitstellungsdatei stellt einen nginx Pod bereit.

    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
    
  2. Wenden Sie die Bereitstellungsdatei auf Ihren Cluster an, indem Sie den Befehl mit dem Parameter az aks command invoke--file verwenden, um die Datei zu verknüpfen. Im folgenden Beispiel wird die deployment.yaml Datei auf den default Namespace angewendet.

    az aks command invoke \
      --resource-group $AKS_RESOURCE_GROUP \
      --name $AKS_CLUSTER_NAME \
      --command "kubectl apply -f deployment.yaml -n default" \
      --file deployment.yaml
    

Wird command invoke verwendet, um Befehle mit allen Dateien im aktuellen Verzeichnis auszuführen

Hinweis

Verwenden Sie nur kleine, erforderliche Dateien, um eine Überschreitung der Systemgrößenbeschränkungen zu vermeiden.

Im folgenden Beispiel erstellen wir zwei minimale Bereitstellungsdateien für die Demonstration.

  1. Erstellen Sie zwei Kubernetes-Manifestdateien mit dem Namen deployment.yaml und configmap.yaml. Die folgenden Beispielbereitstellungsdateien stellen einen nginx Pod bereit und erstellen eine ConfigMap mit einer Willkommensnachricht.

    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
    
  2. Wenden Sie die Bereitstellungsdateien auf Ihren Cluster an, indem Sie den Befehl az aks command invoke mit dem Parameter --file verwenden, um die Datei anzuhängen. Im folgenden Beispiel werden die deployment.yaml und configmap.yaml Dateien auf den default-Namensraum angewendet.

    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
    

Verwenden Run command in einem privaten AKS-Cluster im Azure-Portal

Sie können die folgenden kubectl Befehle mit dem Run command Feature verwenden:

  • kubectl get nodes
  • kubectl get deployments
  • kubectl get pods
  • kubectl describe nodes
  • kubectl describe pod <pod-name>
  • kubectl describe deployment <deployment-name>
  • kubectl apply -f <file-name>

Verwenden Sie Run command zum Ausführen eines einzelnen Befehls.

  1. Navigieren Sie im Azure-Portal zu Ihrem privaten Cluster.
  2. Wählen Sie im Dienstmenü unter Kubernetes-Ressourcenden Befehl "Ausführen" aus.
  3. Geben Sie den Befehl ein, den Sie ausführen möchten, und wählen Sie Ausführen aus.

Verwenden von Run command zum Ausführen von Befehlen mit angefügten Dateien

  1. Navigieren Sie im Azure-Portal zu Ihrem privaten Cluster.

  2. Wählen Sie im Dienstmenü unter Kubernetes-Ressourcenden Befehl "Ausführen" aus.

  3. Wählen Sie Dateien anfügen>Nach Dateien suchen aus.

    Screenshot des Anfügens von Dateien an den Run-Befehl im Azure-Portal

  4. Wählen Sie die Datei oder Dateien aus, die Sie anfügen möchten, und wählen Sie dann "Anfügen" aus.

  5. Geben Sie den Befehl ein, den Sie ausführen möchten, und wählen Sie Ausführen aus.

Deaktivieren von Run command

Sie können die Run command Funktion deaktivieren, indem Sie .properties.apiServerAccessProfile.disableRunCommand auf true setzen.

Probleme mit command invoke beheben

Weitere Informationen zu den häufigsten Problemen mit az aks command invoke und Schritte zu ihrer Behebung finden Sie unter Beheben von az aks command invoke-Fehlern.

In diesem Artikel haben Sie erfahren, wie Sie auf einen privaten Cluster zugreifen und Befehle für diesen Cluster ausführen. Weitere Informationen zu AKS-Clustern finden Sie in den folgenden Artikeln: