Usare la connessione del cluster per connettersi in modo sicuro ai cluster Kubernetes abilitati per Azure Arc

Con la connessione al cluster, è possibile connettersi in modo sicuro ai cluster Kubernetes abilitati per Azure Arc da qualsiasi posizione senza richiedere l'abilitazione di alcuna porta in ingresso nel firewall.

L'accesso apiserver al del cluster Kubernetes abilitato per Azure Arc consente gli scenari seguenti:

  • Debug interattivo e risoluzione dei problemi.
  • Accesso del cluster ai servizi di Azure per località personalizzate e altre risorse create sopra.

Prima di iniziare, esaminare la panoramica concettuale della funzionalità di connessione del cluster.

Prerequisiti

  • Installare o aggiornare l'interfaccia della riga di comando di Azure alla versione più recente.

  • Installare la versione più recente dell'estensione dell'interfaccia della connectedk8s riga di comando di Azure:

    az extension add --name connectedk8s
    

    Se l'estensione connectedk8s è già stata installata, aggiornare l'estensione alla versione più recente:

    az extension update --name connectedk8s
    
  • Sostituire i segnaposto ed eseguire il comando seguente per impostare le variabili di ambiente usate in questo documento:

    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)
    
  • Oltre a soddisfare i requisiti di rete per Kubernetes abilitato per Arc, abilitare questi endpoint per l'accesso in uscita:

    Endpoint Port
    *.servicebus.windows.net 443
    guestnotificationservice.azure.com, *.guestnotificationservice.azure.com 443

    Nota

    Per convertire il *.servicebus.windows.net carattere jolly in endpoint specifici, usare il comando \GET https://guestnotificationservice.azure.com/urls/allowlist?api-version=2020-01-01&location=<location>. All'interno di questo comando, l'area deve essere specificata per il <location> segnaposto.

Per ottenere il segmento di area di un endpoint a livello di area, rimuovere tutti gli spazi dal nome dell'area di Azure. Ad esempio, area Stati Uniti orientali 2 , il nome dell'area è eastus2.

Ad esempio: *.<region>.arcdataservices.com deve trovarsi *.eastus2.arcdataservices.com nell'area Stati Uniti orientali 2.

Per visualizzare un elenco di tutte le aree, eseguire questo comando:

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

Configurazione dell'autenticazione

Nel cluster abilitato per Arc esistente creare ClusterRoleBinding con l'autenticazione di Microsoft Entra o un token dell'account del servizio.

Opzione di autenticazione Di Microsoft Entra

  1. Ottiene l'oggetto associato all'entità objectId Microsoft Entra.

    • Per un account utente di Microsoft Entra:

      AAD_ENTITY_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
      
    • Per un'applicazione Microsoft Entra:

      AAD_ENTITY_OBJECT_ID=$(az ad sp show --id <id> --query id -o tsv)
      
  2. Autorizzare l'entità con le autorizzazioni appropriate.

    • Se si usa ClusterRoleBinding nativo di Kubernetes o RoleBinding per i controlli di autorizzazione nel cluster, con il kubeconfig file che punta al apiserver del cluster per l'accesso diretto, è possibile crearne uno mappato all'entità Microsoft Entra (entità servizio o utente) che deve accedere a questo cluster. Ad esempio:

      kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_OBJECT_ID
      
    • Se si usa il controllo degli accessi in base al ruolo di Azure per i controlli di autorizzazione nel cluster, è possibile creare un'assegnazione di ruolo di Azure applicabile mappata all'entità Microsoft Entra. Ad esempio:

      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
      

Opzione di autenticazione del token dell'account del servizio

  1. Con il kubeconfig file che punta al apiserver del cluster Kubernetes, eseguire questo comando per creare un account del servizio. In questo esempio viene creato l'account del servizio nello spazio dei nomi predefinito, ma è possibile sostituire qualsiasi altro spazio dei nomi per default.

    kubectl create serviceaccount demo-user -n default
    
  2. Creare ClusterRoleBinding per concedere a questo account del servizio le autorizzazioni appropriate per il cluster. Se nel primo comando è stato usato uno spazio dei nomi diverso, sostituirlo qui per default.

    kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
    
  3. Creare un token dell'account del servizio:

    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. Ottenere il token per l'output nella console

    echo $TOKEN
    

Accedere al cluster da un dispositivo client

È ora possibile accedere al cluster da un client diverso. Eseguire i passaggi seguenti in un altro dispositivo client.

  1. Accedere usando l'autenticazione di Microsoft Entra o l'autenticazione del token dell'account del servizio.

  2. Ottenere la connessione kubeconfig del cluster necessaria per comunicare con il cluster da qualsiasi posizione (anche all'esterno del firewall che circonda il cluster), in base all'opzione di autenticazione usata:

    • Se si usa l'autenticazione Microsoft Entra:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • Se si usa l'autenticazione del token dell'account del servizio:

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

      Nota

      Questo comando aprirà il proxy e bloccherà la shell corrente.

  3. In una sessione della shell diversa usare kubectl per inviare richieste al cluster:

    kubectl get pods -A
    

Verrà visualizzata una risposta dal cluster contenente l'elenco di tutti i pod nello spazio dei default nomi .

Limitazioni note

Usare az connectedk8s show per controllare la versione dell'agente Kubernetes abilitata per Arc.

Quando si effettuano richieste al cluster Kubernetes, se l'entità Microsoft Entra usata fa parte di più di 200 gruppi, potrebbe essere visualizzato l'errore seguente:

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.

Si tratta di una limitazione nota. Per superare questo errore:

  1. Creare un'entità servizio, che è meno probabile che sia membro di più di 200 gruppi.
  2. Accedere all'interfaccia della riga di comando di Azure con l'entità servizio prima di eseguire il az connectedk8s proxy comando .

Passaggi successivi

  • Configurare Il controllo degli accessi in base al ruolo di Microsoft Entra nei cluster.
  • Distribuire e gestire le estensioni del cluster.