Używanie połączenia z klastrem w celu bezpiecznego nawiązywania połączenia z klastrami Kubernetes z włączoną usługą Azure Arc

Dzięki połączeniu klastra można bezpiecznie łączyć się z klastrami Kubernetes z włączoną usługą Azure Arc z dowolnego miejsca bez konieczności włączania żadnego portu przychodzącego w zaporze.

Dostęp do apiserver klastra Kubernetes z obsługą usługi Azure Arc umożliwia wykonanie następujących scenariuszy:

  • Interaktywne debugowanie i rozwiązywanie problemów.
  • Dostęp klastra do usług platformy Azure dla lokalizacji niestandardowych i innych zasobów utworzonych na jego podstawie.

Przed rozpoczęciem zapoznaj się z koncepcyjnym omówieniem funkcji łączenia klastra.

Wymagania wstępne

  • Zainstaluj lub zaktualizuj interfejs wiersza polecenia platformy Azure do najnowszej wersji.

  • Zainstaluj najnowszą wersję rozszerzenia interfejsu wiersza polecenia platformy connectedk8s Azure:

    az extension add --name connectedk8s
    

    Jeśli rozszerzenie zostało connectedk8s już zainstalowane, zaktualizuj rozszerzenie do najnowszej wersji:

    az extension update --name connectedk8s
    
  • Zastąp symbole zastępcze i uruchom poniższe polecenie, aby ustawić zmienne środowiskowe używane w tym dokumencie:

    CLUSTER_NAME=<cluster-name>
    RESOURCE_GROUP=<resource-group-name>
    ARM_ID_CLUSTER=$(az connectedk8s show -n $CLUSTER_NAME -g $RESOURCE_GROUP --query id -o tsv)
    
  • Oprócz spełnienia wymagań sieciowych dla platformy Kubernetes z obsługą usługi Arc włącz te punkty końcowe dla dostępu wychodzącego:

    Punkt końcowy Port
    *.servicebus.windows.net 443
    guestnotificationservice.azure.com, *.guestnotificationservice.azure.com 443

    Uwaga

    Aby przetłumaczyć *.servicebus.windows.net symbol wieloznaczny na określone punkty końcowe, użyj polecenia \GET https://guestnotificationservice.azure.com/urls/allowlist?api-version=2020-01-01&location=<location>. W tym poleceniu należy określić region dla symbolu zastępczego <location> .

Aby uzyskać segment regionu regionalnego punktu końcowego, usuń wszystkie spacje z nazwy regionu świadczenia usługi Azure. Na przykład region Wschodnie stany USA 2 nazwa regionu to eastus2.

Na przykład: *.<region>.arcdataservices.com powinien znajdować się *.eastus2.arcdataservices.com w regionie Wschodnie stany USA 2.

Aby wyświetlić listę wszystkich regionów, uruchom następujące polecenie:

az account list-locations -o table
Get-AzLocation | Format-Table

Konfigurowanie uwierzytelniania

W istniejącym klastrze z obsługą usługi Arc utwórz klasterRoleBinding przy użyciu uwierzytelniania Microsoft Entra lub tokenu konta usługi.

Opcja uwierzytelniania Entra firmy Microsoft

  1. Pobierz skojarzona objectId z jednostką Microsoft Entra.

    • W przypadku konta użytkownika Entra firmy Microsoft:

      AAD_ENTITY_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
      
    • W przypadku aplikacji Firmy Microsoft Entra:

      AAD_ENTITY_OBJECT_ID=$(az ad sp show --id <id> --query id -o tsv)
      
  2. Autoryzuj jednostkę z odpowiednimi uprawnieniami.

    • Jeśli używasz natywnego klastra Kubernetes ClusterRoleBinding lub RoleBinding do sprawdzania autoryzacji w klastrze, a kubeconfig plik wskazujący apiserver klaster na bezpośredni dostęp, możesz utworzyć jeden mapowany do jednostki Microsoft Entra (jednostki usługi lub użytkownika), która musi uzyskać dostęp do tego klastra. Na przykład:

      kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_OBJECT_ID
      
    • Jeśli używasz kontroli dostępu opartej na rolach platformy Azure do sprawdzania autoryzacji w klastrze, możesz utworzyć odpowiednie przypisanie roli platformy Azure zamapowane na jednostkę Microsoft Entra. Na przykład:

      az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee $AAD_ENTITY_OBJECT_ID --scope $ARM_ID_CLUSTER
      az role assignment create --role "Azure Arc Enabled Kubernetes Cluster User Role" --assignee $AAD_ENTITY_OBJECT_ID --scope $ARM_ID_CLUSTER
      

Opcja uwierzytelniania tokenu konta usługi

  1. kubeconfig Gdy plik wskazuje apiserver klaster Kubernetes, uruchom to polecenie, aby utworzyć konto usługi. W tym przykładzie zostanie utworzone konto usługi w domyślnej przestrzeni nazw, ale możesz zastąpić dowolną inną przestrzeń nazw .default

    kubectl create serviceaccount demo-user -n default
    
  2. Utwórz klasterRoleBinding, aby przyznać temu kontu usługi odpowiednie uprawnienia w klastrze. Jeśli w pierwszym poleceniu użyto innej przestrzeni nazw, zastąp ją tutaj .default

    kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
    
  3. Utwórz token konta usługi:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: Secret
    metadata:
      name: demo-user-secret
      annotations:
        kubernetes.io/service-account.name: demo-user
    type: kubernetes.io/service-account-token
    EOF
    
    TOKEN=$(kubectl get secret demo-user-secret -o jsonpath='{$.data.token}' | base64 -d | sed 's/$/\n/g')
    
  4. Pobieranie tokenu do danych wyjściowych do konsoli

    echo $TOKEN
    

Uzyskiwanie dostępu do klastra z urządzenia klienckiego

Teraz możesz uzyskać dostęp do klastra z innego klienta. Uruchom następujące kroki na innym urządzeniu klienckim.

  1. Zaloguj się przy użyciu uwierzytelniania microsoft Entra lub uwierzytelniania tokenu konta usługi.

  2. Uzyskaj połączenie kubeconfig klastra potrzebne do komunikowania się z klastrem z dowolnego miejsca (nawet spoza zapory otaczającej klaster) na podstawie używanej opcji uwierzytelniania:

    • W przypadku korzystania z uwierzytelniania entra firmy Microsoft:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • W przypadku korzystania z uwierzytelniania tokenu konta usługi:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP --token $TOKEN
      

      Uwaga

      To polecenie spowoduje otwarcie serwera proxy i zablokowanie bieżącej powłoki.

  3. W innej sesji powłoki użyj polecenia kubectl , aby wysyłać żądania do klastra:

    kubectl get pods -A
    

Teraz powinna zostać wyświetlona odpowiedź z klastra zawierającego listę wszystkich zasobników w default przestrzeni nazw.

Znane ograniczenia

Użyj az connectedk8s show polecenia , aby sprawdzić wersję agenta Kubernetes z obsługą usługi Arc.

Jeśli podczas wykonywania żądań do klastra Kubernetes używana jednostka Microsoft Entra jest częścią ponad 200 grup, może zostać wyświetlony następujący błąd:

You must be logged in to the server (Error:Error while retrieving group info. Error:Overage claim (users with more than 200 group membership) is currently not supported.

Jest to znane ograniczenie. Aby przejść przez ten błąd:

  1. Utwórz jednostkę usługi, która prawdopodobnie będzie członkiem ponad 200 grup.
  2. Przed uruchomieniem az connectedk8s proxy polecenia zaloguj się do interfejsu wiersza polecenia platformy Azure przy użyciu jednostki usługi.

Następne kroki