Bereitstellen von CanIPull auf einem Azure Kubernetes Service (AKS) Cluster

CanIPull ist ein Diagnosetool für Azure Kubernetes Service (AKS). Stellen Sie sie mithilfe von Azure Copilot oder dem vollständigen Kubernetes-Manifest in diesem Artikel bereit. CanIPull liest die Clusteridentitätskonfiguration von einem ausgewählten Knoten aus, überprüft die DNS-Auflösung für einen Authentifizierungsserver (Azure Container Registry, ACR) und überprüft den anfänglichen ACR-Tokenaustausch.

In diesem Artikel erfahren Sie, wie Sie CanIPull mithilfe von Azure Copilot oder einem Kubernetes-Manifest ausführen. CanIPull v0.1.0 wird jeweils auf einem AMD64 Linux-Knoten ausgeführt. Wiederholen Sie die Überprüfung auf anderen unterstützten Knoten, um ihre Konnektivität oder Konfiguration zu vergleichen.

Important

CanIPull ist kein End-to-End-Test zum Abrufen eines Images. Ein erfolgreiches Ergebnis bestätigt nicht den Zugriff auf ein Repository, ein Bildmanifest oder eine Bildebene, da CanIPull kein Bild auswählt oder abruft.

Voraussetzungen

Bevor Sie beginnen, benötigen Sie Folgendes:

  • Ein vorhandener AKS-Cluster mit mindestens einem AMD64 Linux-Knoten.
  • Eine vorhandene ACR-Instanz, die Sie testen möchten.

Um CanIPull mit Azure Copilot bereitzustellen, benötigen Sie auch Zugriff auf Azure Copilot im Azure-Portal.

Um CanIPull manuell bereitzustellen, benötigen Sie auch Folgendes:

  • Azure CLI installiert.
  • Eine authentifizierte Azure CLI Sitzung mit Berechtigungen zum Abrufen von Benutzeranmeldeinformationen für den AKS-Cluster und Lesen der ACR-Instanz.
  • kubectl konfiguriert, um eine Verbindung mit Ihrem AKS-Cluster herzustellen.
  • Kubernetes-Berechtigungen zum Auflisten von Knoten auf Clusterebene; zum Erstellen, Abrufen, Auflisten, Überwachen und Löschen von Pods im Namespace default; sowie zum Abrufen von Protokollen von Pods im Namespace default.

Bereitstellen von CanIPull mit Azure Copilot

Azure Copilot kann den AKS-Cluster, den AMD64-Linux-Knoten und den ACR-Authentifizierungsserver auswählen und dann CanIPull für Sie bereitstellen. Die Diagnose überprüft die DNS-Auflösung und den ACR-Tokenaustausch vom ausgewählten Knoten. Es wählt oder greift nicht auf ein Repository oder Bild zu.

  1. Öffnen Sie im Azure-Portal Copilot.
  2. Geben Sie eine der folgenden Eingabeaufforderungen ein:
  • Help me deploy CanIPull to my AKS cluster.
  • Can an AMD64 Linux node in my AKS cluster resolve and authenticate to a specific Azure Container Registry?
  • Help me test ACR token exchange from an AMD64 Linux node in my AKS cluster.
  1. Wählen Sie den AKS-Cluster und den AMD64 Linux-Knoten aus, auf dem CanIPull ausgeführt werden soll.
  2. Wählen Sie die ACR-Instanz aus, deren Authentifizierungsserver Sie für die DNS- und Tokenaustauschprüfungen verwenden möchten.
  3. Überprüfen Sie die Auswahl, und bestätigen Sie dann die Bereitstellung.
  4. Nachdem die Bereitstellung abgeschlossen ist, folgen Sie der Aufforderung, um den Bereich „Befehl ausführen“ zu öffnen.
  5. Überprüfen Sie die CanIPull-Protokolle für DNS-, Clusteridentitäts- und ACR-Tokenaustauschergebnisse.

Weitere Informationen zu dieser Nutzung finden Sie unter Verwenden von CanIPull mit Azure Copilot.

CanIPull manuell bereitstellen

Um CanIPull manuell bereitzustellen, stellen Sie eine Verbindung mit dem Cluster her, wählen Sie einen AMD64-Linux-Knoten aus, rufen Sie den vollqualifizierten ACR-Anmeldeserver ab, speichern Sie das vollständige Pod-Manifest, das in diesem Abschnitt angegeben ist, als canipull.yaml und führen Sie kubectl apply --filename canipull.yaml aus. Mit dem one-shot-Pod können Sie den Zielknoten auswählen und die Diagnoseprotokolle direkt prüfen mit kubectl.

Important

Das Manifest bindet /etc/kubernetes/azure.json vom ausgewählten Knoten ein. Diese Datei enthält die Konfiguration vertraulicher Clusteridentitäten. Stellen Sie den Pod nur bereit, wenn Sie ein vertrauenswürdiger Clusteradministrator sind. Erhöhen Sie die Ausführlichkeit von CanIPull nicht, da höhere Ebenen Zugriffstoken drucken können. Löschen Sie den Pod, sobald Sie den Test abgeschlossen haben.

Herstellen einer Verbindung mit dem Cluster und Auswählen eines Knotens

  1. Legen Sie Variablen für die AKS-Cluster- und ACR-Instanz fest.

    RESOURCE_GROUP=<resource-group>
    CLUSTER_NAME=<aks-cluster-name>
    ACR_NAME=<acr-name>
    
  2. Rufen Sie die Clusteranmeldeinformationen ab.

    az aks get-credentials \
      --resource-group $RESOURCE_GROUP \
      --name $CLUSTER_NAME
    
  3. Rufen Sie den ACR-Anmeldeserver ab. CanIPull erwartet den vollqualifizierten Anmeldeserver, wie myregistry.azurecr.io, anstelle des ACR-Ressourcennamens.

    ACR_LOGIN_SERVER=$(az acr show \
      --name $ACR_NAME \
      --query loginServer \
      --output tsv)
    
    echo $ACR_LOGIN_SERVER
    
  4. Listen Sie die AMD64 Linux-Knoten auf, und wählen Sie den Knoten aus, auf dem Sie die Diagnoseüberprüfung ausführen möchten. CanIPull v0.1.0 unterstützt nur AMD64-Knoten.

    kubectl get nodes \
      --selector kubernetes.io/os=linux,kubernetes.io/arch=amd64 \
      --output wide
    

Erstellen und Bereitstellen des vollständigen CanIPull-Manifests

  1. Kopieren Sie das vollständige Manifest in eine Datei mit dem Namen canipull.yaml. Ersetzen Sie <target-linux-node> und <acr-login-server> durch den Knotennamen und den ACR-Anmeldeserver aus dem vorherigen Abschnitt. Das Manifest bindet CanIPull an den ausgewählten Knoten, deaktiviert das Einbinden des Dienstkontotokens und die Berechtigungseskalation und bindet die erforderliche Knotenkonfiguration schreibgeschützt ein.

    apiVersion: v1
    kind: Pod
    metadata:
      name: canipull
      namespace: default
      labels:
        app: canipull
    spec:
      automountServiceAccountToken: false
      nodeName: <target-linux-node>
      restartPolicy: Never
      containers:
        - name: canipull
          image: mcr.microsoft.com/aks/canipull:v0.1.0
          imagePullPolicy: IfNotPresent
          args:
            - <acr-login-server>
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop:
                - ALL
            readOnlyRootFilesystem: true
          volumeMounts:
            - name: azure-config
              mountPath: /etc/kubernetes/azure.json
              readOnly: true
      volumes:
        - name: azure-config
          hostPath:
            path: /etc/kubernetes/azure.json
            type: File
    
  2. Erstellen Sie den Pod.

    kubectl apply --filename canipull.yaml
    
  3. Warten Sie, bis der Pod fertig ist.

    kubectl get pod canipull --watch
    

    Drücken Sie STRG+C, wenn der Pod-Status zu Completed oder Error wechselt.

Überprüfen der CanIPull-Ergebnisse

Zeigen Sie die Diagnoseausgabe an.

kubectl logs canipull

Ein erfolgreicher Test enthält die folgenden Ergebnisse:

  • Der ACR-Authentifizierungsserver wird über DNS aufgelöst.
  • CanIPull liest die Azure Konfiguration aus dem Knoten.
  • Die Kubelet-Identität oder der Dienstprinzipal des Clusters können sich authentifizieren.
  • ACR akzeptiert den anfänglichen Tokenaustausch.

Diese Ergebnisse bestätigen nur, dass der ausgewählte Knoten den ACR-Authentifizierungsserver auflösen kann und dass die Clusteridentität den anfänglichen Tokenaustausch abschließen kann. CanIPull ruft kein Bild ab oder überprüft den Zugriff auf ein Repository, ein Bildmanifest oder eine Bildebene.

Die endgültige Erfolgsmeldung des Tools verwendet breitere Formulierungen als den Umfang des Tests und ähnelt der folgenden Ausgabe:

Your cluster can pull images from <acr-login-server>!

Um einen End-to-End-Image-Pull zu überprüfen, stellen Sie eine Workload bereit, die auf ein Image im Ziel-Repository verweist.

Wenn der Test fehlschlägt, überprüfen Sie die markierte FAILEDProtokollzeile. Häufige Ursachen sind:

  • Der ACR-Authentifizierungsserver wird nicht vom ausgewählten Knoten aufgelöst.
  • Der ausgewählte Knoten enthält /etc/kubernetes/azure.json nicht.
  • Die Anmeldeinformationen für die Clusteridentität sind ungültig.
  • ACR lehnt den Tokenaustausch für die Kubelet-Identität oder den Dienstprinzipal ab.

Wenn der Tokenaustausch fehlschlägt, da die Identität nicht für den Zugriff auf ACR autorisiert ist, lesen Sie "Authentifizieren mit ACR von AKS".

Bereinigen von Ressourcen

Löschen Sie den CanIPull-Pod, und entfernen Sie dessen Zugriff auf die Knotenkonfiguration.

kubectl delete pod canipull