Jak używać łącznika usługi w usłudze Azure Kubernetes Service (AKS)

Usługa Azure Kubernetes Service (AKS) to jedna z usług obliczeniowych obsługiwanych przez łącznik usługi. Ten artykuł ma na celu ułatwienie zrozumienia:

  • Jakie operacje są wykonywane w klastrze podczas tworzenia połączenia z usługą.
  • Jak używać utworzonych zasobów kubernetes Service Connector.
  • Jak rozwiązywać problemy i wyświetlać dzienniki łącznika usługi w klastrze usługi AKS.

Wymagania wstępne

Jakie operacje łącznik usługi tworzy w klastrze

W zależności od różnych usług docelowych i typów uwierzytelniania wybranych podczas tworzenia połączenia z usługą łącznik usługi wykonuje różne operacje w klastrze usługi AKS. Poniżej wymieniono możliwe operacje wykonane przez łącznik usługi.

Dodawanie rozszerzenia kubernetes łącznika usługi

Rozszerzenie kubernetes o nazwie sc-extension jest dodawane do klastra przy pierwszym utworzeniu połączenia z usługą. Później rozszerzenie ułatwia tworzenie zasobów kubernetes w klastrze użytkownika za każdym razem, gdy żądanie połączenia z usługą przychodzi do łącznika usługi. Rozszerzenie można znaleźć w klastrze usługi AKS w witrynie Azure Portal w menu Rozszerzenia i aplikacje .

Zrzut ekranu witryny Azure Portal przedstawiający rozszerzenie usługi AKS.

Rozszerzenie to również miejsce przechowywania metadanych połączeń klastra. Odinstalowanie rozszerzenia sprawia, że wszystkie połączenia w klastrze są niedostępne. Operator rozszerzenia jest hostowany w przestrzeni nazw sc-systemklastra .

Tworzenie zasobów kubernetes

Łącznik usługi tworzy niektóre zasoby kubernetes w przestrzeni nazw określonej przez użytkownika podczas tworzenia połączenia z usługą. Zasoby kubernetes przechowują informacje o połączeniu, które są wymagane przez definicje obciążenia użytkownika lub kod aplikacji, aby komunikować się z usługami docelowymi. W zależności od różnych typów uwierzytelniania tworzone są różne zasoby kubernetes. Connection String W przypadku typów i Service Principal uwierzytelniania tworzony jest wpis tajny kubernetes. Workload Identity Dla typu uwierzytelniania oprócz wpisu tajnego kubernetes jest również tworzone konto usługi kubernetes.

Zasoby kubernetes utworzone przez łącznik usługi można znaleźć dla każdego połączenia z usługą w witrynie Azure Portal w zasobie kubernetes w menu Łącznik usługi.

Zrzut ekranu witryny Azure Portal przedstawiający widok Łącznik usługi utworzonych zasobów kubernetes.

Usunięcie połączenia z usługą nie powoduje usunięcia skojarzonego zasobu Kubernetes. W razie potrzeby usuń zasób ręcznie, używając na przykład polecenia kubectl delete.

Włączanie dodatku azureKeyvaultSecretsProvider

Jeśli usługa docelowa to Azure Key Vault, a sterownik CSI magazynu wpisów tajnych jest włączony podczas tworzenia połączenia z usługą, łącznik usługi włącza azureKeyvaultSecretsProvider dodatek dla klastra.

Zrzut ekranu witryny Azure Portal z włączaniem sterownika CSI dla magazynu kluczy podczas tworzenia połączenia.

Postępuj zgodnie z samouczkiemNawiązywanie połączenia z usługą Azure Key Vault przy użyciu sterownika CSI, aby skonfigurować połączenie z usługą Azure Key Vault przy użyciu sterownika CSI magazynu wpisów tajnych.

Włączanie tożsamości obciążenia i wystawcy openID Connect (OIDC)

Jeśli typ uwierzytelniania występuje Workload Identity podczas tworzenia połączenia z usługą, łącznik usługi włącza tożsamość obciążenia i wystawcę OIDC dla klastra.

Zrzut ekranu przedstawiający witrynę Azure Portal przy użyciu tożsamości obciążenia w celu utworzenia połączenia.

Gdy typ uwierzytelniania to Workload Identity, tożsamość zarządzana przypisana przez użytkownika jest wymagana do utworzenia poświadczeń tożsamości federacyjnej. Dowiedz się więcej na temat tożsamości obciążeń lub postępuj zgodnie z samouczkiem, aby skonfigurować połączenie z usługą Azure Storage przy użyciu tożsamości obciążenia.

Jak używać utworzonych zasobów kubernetes łącznika usługi

Różne zasoby kubernetes są tworzone, gdy typ usługi docelowej i typ uwierzytelniania są różne. W poniższych sekcjach pokazano, jak używać łącznika usługi utworzonego zasoby kubernetes w definicji obciążeń klastra i kodach aplikacji.

Wpis tajny platformy Kubernetes

Wpis tajny kubernetes jest tworzony, gdy typ uwierzytelniania to Connection String lub Service Principal. Definicja obciążenia klastra może odwoływać się bezpośrednio do wpisu tajnego. Poniższy fragment kodu jest przykładem.

apiVersion: batch/v1
kind: Job
metadata:
  namespace: default
  name: sc-sample-job
spec:
  template:
    spec:
      containers:
      - name: raw-linux
        image: alpine
        command: ['printenv']
        envFrom:
          - secretRef:
              name: <SecretCreatedByServiceConnector>
      restartPolicy: OnFailure

Następnie kody aplikacji mogą używać parametry połączenia w wpisie tajnym ze zmiennej środowiskowej. Możesz sprawdzić przykładowy kod , aby dowiedzieć się więcej o nazwach zmiennych środowiskowych i sposobie ich używania w kodach aplikacji do uwierzytelniania w różnych usługach docelowych.

Konto usługi Kubernetes

Zarówno konto usługi kubernetes, jak i wpis tajny są tworzone, gdy typ uwierzytelniania to Workload Identity. Definicja obciążenia klastra może odwoływać się do konta usługi i wpisu tajnego w celu uwierzytelniania za pośrednictwem tożsamości obciążenia. Poniższy fragment zawiera przykład.

apiVersion: batch/v1
kind: Job
metadata:
  namespace: default
  name: sc-sample-job
  labels:
    azure.workload.identity/use: "true"
spec:
  template:
    spec:
      serviceAccountName: <ServiceAccountCreatedByServiceConnector>
      containers:
      - name: raw-linux
        image: alpine
        command: ['printenv']
        envFrom:
          - secretRef:
              name: <SecretCreatedByServiceConnector>
      restartPolicy: OnFailure

Możesz sprawdzić samouczek, aby dowiedzieć się , jak nawiązać połączenie z usługą Azure Storage przy użyciu tożsamości obciążenia.

Jak rozwiązywać problemy i wyświetlać dzienniki

Jeśli wystąpi błąd i nie można go wyeliminować, spróbuj ponownie podczas tworzenia połączenia z usługą, poniższe metody mogą pomóc zebrać więcej informacji na temat rozwiązywania problemów.

Sprawdzanie rozszerzenia kubernetes łącznika usługi

Rozszerzenie kubernetes łącznika usługi jest oparte na rozszerzeniach klastra Kubernetes z obsługą usługi Azure Arc. Użyj poniższych poleceń, aby zbadać, czy podczas instalacji lub aktualizowania rozszerzenia występują jakiekolwiek błędy.

  1. Zainstaluj rozszerzenie interfejsu wiersza polecenia platformy k8s-extension Azure.
az extension add --name k8s-extension
  1. Pobierz stan rozszerzenia łącznika usługi. statuses Sprawdź właściwość w danych wyjściowych polecenia, aby sprawdzić, czy występują jakieś błędy.
az k8s-extension show \
    --resource-group MyClusterResourceGroup \
    --cluster-name MyCluster \
    --cluster-type managedClusters \
    --name sc-extension

Sprawdzanie dzienników klastra kubernetes

Jeśli podczas instalacji rozszerzenia wystąpi błąd, a komunikat o błędzie we statuses właściwości nie dostarcza wystarczającej ilości informacji o tym, co się stało, możesz dokładniej sprawdzić dzienniki kubernetes, wykonując następujące kroki.

  1. Połącz się z klastrem usługi AKS.

    az aks get-credentials \
        --resource-group MyClusterResourceGroup \
        --name MyCluster
    
  2. Rozszerzenie łącznika usługi jest instalowane w przestrzeni nazw sc-system za pomocą wykresu helm, sprawdź przestrzeń nazw i wydanie programu Helm, wykonując następujące polecenia.

    • Sprawdź, czy przestrzeń nazw istnieje.
    kubectl get ns
    
    • Sprawdź stan wydania narzędzia Helm.
    helm list -n sc-system
    
  3. Podczas instalacji lub aktualizowania rozszerzenia zadanie kubernetes o nazwie sc-job tworzy zasoby kubernetes dla połączenia z usługą. Niepowodzenie wykonywania zadania zwykle powoduje błąd rozszerzenia. Sprawdź stan zadania, uruchamiając następujące polecenia. Jeśli sc-job nie istnieje w sc-system przestrzeni nazw, powinno zostać wykonane pomyślnie. To zadanie zostało zaprojektowane tak, aby zostało automatycznie usunięte po pomyślnym wykonaniu.

    • Sprawdź, czy zadanie istnieje.
    kubectl get job -n sc-system
    
    • Pobierz stan zadania.
    kubectl describe job/sc-job -n sc-system
    
    • Wyświetl dzienniki zadań.
    kubectl logs job/sc-job -n sc-system
    

Typowe błędy i środki zaradcze

Konflikt

Komunikat o błędzie:Operation returned an invalid status code: Conflict.

Przyczyna: Ten błąd występuje zwykle podczas próby utworzenia połączenia z usługą, gdy klaster usługi AKS (Azure Kubernetes Service) jest w stanie aktualizacji. Aktualizacja połączenia z usługą powoduje konflikt z bieżącą aktualizacją.

Środki zaradcze: Przed ponowieniu próby utworzenia upewnij się, że klaster jest w stanie "Powodzenie". Rozwiązuje większość błędów związanych z konfliktami.

Timeout

Komunikat o błędzie:

  • Long running operation failed with status 'Failed'. Unable to get a response from the Agent in time.
  • Timed out waiting for the resource to come to a ready/completed state

Przyczyna: Ten błąd często występuje, gdy zadanie kubernetes użyte do utworzenia lub zaktualizowania rozszerzenia klastra łącznika usługi nie może zostać zaplanowane z powodu ograniczeń zasobów lub innych problemów.

Środki zaradcze: zapoznaj się z artykułem Sprawdzanie dzienników klastra Kubernetes, aby zidentyfikować i rozwiązać szczegółowe przyczyny. Typowym problemem jest to, że żadne węzły nie są dostępne z powodu wywłaszczania. W takim przypadku rozważ dodanie większej liczby węzłów lub włączenie automatycznego skalowania dla węzłów.

Nieautoryzowany dostęp do zasobów

Komunikat o błędzie:You do not have permission to perform ... If access was recently granted, please refresh your credentials.

Przyczyna: Łącznik usług wymaga uprawnień do obsługi zasobów platformy Azure, z którymi chcesz nawiązać połączenie, w celu wykonywania operacji połączenia w Twoim imieniu. Ten błąd wskazuje brak niezbędnych uprawnień w niektórych zasobach platformy Azure.

Środki zaradcze: Sprawdź uprawnienia do zasobów platformy Azure określonych w komunikacie o błędzie. Uzyskaj wymagane uprawnienia i ponów próbę utworzenia.

Brak rejestracji subskrypcji

Komunikat o błędzieThe subscription is not registered to use namespace 'Microsoft.KubernetesConfiguration':

Przyczyna: Łącznik usługi wymaga zarejestrowania subskrypcji dla Microsoft.KubernetesConfigurationusługi , która jest dostawcą zasobów dla rozszerzeń klastra Kubernetes z obsługą usługi Azure Arc.

Środki zaradcze: Aby rozwiązać problemy związane z rejestracją dostawcy zasobów, wykonaj czynności opisane w tym samouczku.

Inne problemy

Jeśli powyższe środki zaradcze nie rozwiążą problemu, spróbuj zresetować rozszerzenie klastra łącznika usługi, usuwając je, a następnie ponów próbę utworzenia. Ta metoda ma rozwiązać większość problemów związanych z rozszerzeniem klastra łącznika usługi.

Użyj następujących poleceń interfejsu wiersza polecenia, aby zresetować rozszerzenie:

az extension add --name k8s-extension

az k8s-extension delete \
    --resource-group <MyClusterResourceGroup> \
    --cluster-name <MyCluster> \
    --cluster-type managedClusters \
    --name sc-extension

Następne kroki

Dowiedz się, jak zintegrować różne usługi docelowe i zapoznać się z ich ustawieniami konfiguracji i metodami uwierzytelniania.