Wdrażanie narzędzia CanIPull w klastrze Azure Kubernetes Service (AKS)

CanIPull to narzędzie diagnostyczne dla Azure Kubernetes Service (AKS). Wdróż go przy użyciu Azure Copilot lub pełnego manifestu Kubernetes zamieszczonego w tym artykule. Program CanIPull odczytuje konfigurację tożsamości klastra z jednego wybranego węzła, sprawdza rozpoznawanie nazw DNS dla serwera uwierzytelniania Azure Container Registry (ACR) i weryfikuje początkową wymianę tokenów usługi ACR.

W tym artykule pokazano, jak uruchomić narzędzie CanIPull przy użyciu Azure Copilot lub manifestu platformy Kubernetes. Narzędzie CanIPull v0.1.0 działa na jednym węźle AMD64 Linux naraz. Powtórz sprawdzanie w innych obsługiwanych węzłach, aby porównać ich łączność lub konfigurację.

Ważna

CanIPull nie jest testem ściągania obrazu kompleksowego. Pomyślny wynik nie potwierdza dostępu do repozytorium, manifestu obrazu ani warstwy obrazu, ponieważ program CanIPull nie wybiera ani nie ściąga obrazu.

Wymagania wstępne

Przed rozpoczęciem potrzebne są następujące elementy:

  • Istniejący klaster AKS z co najmniej jednym węzłem systemu Linux AMD64.
  • Istniejąca instancja ACR, którą chcesz przetestować.

Aby wdrożyć aplikację CanIPull przy użyciu Azure Copilot, musisz również mieć dostęp do Azure Copilot w portalu Azure.

Aby wdrożyć narzędzie CanIPull ręcznie, potrzebne są również następujące elementy:

  • Azure CLI zainstalowany.
  • Uwierzytelniona sesja Azure CLI z uprawnieniami do pobierania poświadczeń użytkownika dla klastra usługi AKS i odczytywania wystąpienia usługi ACR.
  • kubectl skonfigurowany do łączenia z Twoim klastrem AKS.
  • Uprawnienia Kubernetes do wyświetlania listy węzłów na poziomie klastra; tworzenia, pobierania, wyświetlania, obserwowania i usuwania podów w przestrzeni nazw default; oraz pobierania dzienników podów w przestrzeni nazw default.

Wdrażanie narzędzia CanIPull za pomocą Azure Copilot

Azure Copilot może wybrać za Ciebie klaster AKS, węzeł systemu Linux AMD64 i serwer uwierzytelniania ACR, a następnie wdrożyć narzędzie CanIPull. Diagnostyka sprawdza rozpoznawanie nazw DNS i wymianę tokenów usługi ACR z wybranego węzła. Nie wybiera ani nie uzyskuje dostępu do repozytorium ani obrazu.

  1. W portalu Azure otwórz Copilot.
  2. Wprowadź jeden z następujących monitów:
  • 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. Wybierz klaster AKS i węzeł AMD64 Linux, w którym ma zostać uruchomiony program CanIPull.
  2. Wybierz wystąpienie usługi ACR, którego serwera uwierzytelniania chcesz użyć do sprawdzania DNS i wymiany tokenów.
  3. Przejrzyj wybrane opcje, a następnie potwierdź wdrożenie.
  4. Po zakończeniu wdrażania postępuj zgodnie z monitem, aby otworzyć okienko Uruchom polecenie .
  5. Przejrzyj dzienniki narzędzia CanIPull pod kątem wyników dotyczących systemu DNS, tożsamości klastra i wymiany tokenu ACR.

Aby uzyskać więcej informacji na temat tego środowiska, zobacz Use CanIPull with Azure Copilot (Używanie narzędzia CanIPull z Azure Copilot).

Ręczne wdrażanie aplikacji CanIPull

Aby wdrożyć program CanIPull ręcznie, połącz się z klastrem, wybierz węzeł AMD64 Linux, pobierz w pełni kwalifikowany serwer logowania usługi ACR, zapisz pełny manifest zasobnika podany w tej sekcji jako canipull.yaml, a następnie uruchom polecenie kubectl apply --filename canipull.yaml. Jednorazowy pod umożliwia wybranie węzła docelowego i bezpośrednie przeglądanie logów diagnostycznych przy użyciu kubectl.

Ważna

Manifest montuje /etc/kubernetes/azure.json z wybranego węzła. Ten plik zawiera poufną konfigurację tożsamości klastra. Wdróż zasobnik tylko wtedy, gdy jesteś zaufanym administratorem klastra. Nie zwiększaj poziomu gadatliwości CanIPull, ponieważ wyższe poziomy mogą wyświetlać tokeny dostępu. Usuń pod, gdy tylko zakończysz test.

Nawiązywanie połączenia z klastrem i wybieranie węzła

  1. Ustaw zmienne dla klastra AKS i wystąpienia ACR.

    RESOURCE_GROUP=<resource-group>
    CLUSTER_NAME=<aks-cluster-name>
    ACR_NAME=<acr-name>
    
  2. Pobierz poświadczenia klastra.

    az aks get-credentials \
      --resource-group $RESOURCE_GROUP \
      --name $CLUSTER_NAME
    
  3. Pobierz serwer logowania usługi ACR. CanIPull oczekuje w pełni kwalifikowanej nazwy serwera logowania, takiej jak myregistry.azurecr.io, a nie nazwy zasobu ACR.

    ACR_LOGIN_SERVER=$(az acr show \
      --name $ACR_NAME \
      --query loginServer \
      --output tsv)
    
    echo $ACR_LOGIN_SERVER
    
  4. Wyświetl listę węzłów AMD64 Linux i wybierz węzeł, w którym chcesz uruchomić test diagnostyczny. Aplikacja CanIPull v0.1.0 obsługuje tylko węzły AMD64.

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

Tworzenie i wdrażanie kompletnego manifestu CanIPull

  1. Skopiuj kompletny manifest do pliku o nazwie canipull.yaml. Zastąp <target-linux-node> i <acr-login-server> nazwą węzła i serwerem logowania ACR z poprzedniej sekcji. Manifest przypisuje CanIPull do wybranego węzła, wyłącza montowanie tokenu konta usługi i eskalację uprawnień oraz montuje wymaganą konfigurację węzła w trybie tylko do odczytu.

    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. Utwórz pod.

    kubectl apply --filename canipull.yaml
    
  3. Poczekaj, aż pod zakończy działanie.

    kubectl get pod canipull --watch
    

    Naciśnij Ctrl+C, gdy stan poda zmieni się na Completed lub Error.

Przejrzyj wyniki aplikacji CanIPull

Wyświetl dane wyjściowe diagnostyki.

kubectl logs canipull

Udany test daje następujące wyniki:

  • Serwer uwierzytelniania ACR jest rozwiązywany przez system DNS.
  • Program CanIPull odczytuje konfigurację Azure z węzła.
  • Tożsamość kubelet klastra lub jednostka usługi głównej może uwierzytelniać się.
  • Usługa ACR akceptuje początkową wymianę tokenów.

Te wyniki potwierdzają tylko, że wybrany węzeł może rozpoznać serwer uwierzytelniania usługi ACR i że tożsamość klastra może zakończyć początkową wymianę tokenów. Program CanIPull nie ściąga obrazu ani nie weryfikuje dostępu do repozytorium, manifestu obrazu ani warstwy obrazu.

Końcowy komunikat o powodzeniu narzędzia używa szerszego sformułowania niż zakres testu i przypomina następujące dane wyjściowe:

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

Aby zweryfikować pełny proces pobierania obrazu, wdróż obciążenie robocze odwołujące się do obrazu w repozytorium docelowym.

Jeśli test zakończy się niepowodzeniem, przejrzyj wiersz dziennika oznaczony jako FAILED. Typowe przyczyny:

  • Serwer uwierzytelniania usługi ACR nie jest rozpoznawany z wybranego węzła.
  • Wybrany węzeł nie zawiera /etc/kubernetes/azure.json.
  • Poświadczenia tożsamości klastra są nieprawidłowe.
  • ACR odrzuca wymianę tokenu dla tożsamości kubelet lub nazwy głównej usługi.

Jeśli wymiana tokenów zakończy się niepowodzeniem, ponieważ tożsamość nie jest autoryzowana do uzyskiwania dostępu do usługi ACR, zobacz Uwierzytelnianie za pomocą usługi ACR z usługi AKS.

Uprzątnij zasoby

Usuń pod CanIPull i usuń mu dostęp do konfiguracji węzła.

kubectl delete pod canipull