Condividi tramite


Usare la funzionalità di connessione cluster per connettersi in modo sicuro ai cluster Kubernetes abilitati per Azure Arc

Con la funzionalità di connessione cluster, è possibile connettersi in modo sicuro ai cluster Kubernetes abilitati per Azure Arc da qualsiasi posizione senza la necessità di abilitare porte in ingresso a livello di firewall.

L'accesso a apiserver del cluster Kubernetes abilitato per Azure Arc abilita gli scenari seguenti:

  • Debug interattivo e risoluzione dei problemi.
  • Accesso del cluster ai servizi di Azure per percorsi personalizzati e le altre risorse create.

Prima di iniziare, rivedere la panoramica dei concetti della funzionalità di connessione cluster.

Prerequisiti

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

  • Installare la versione più recente dell'estensione connectedk8s dell'interfaccia della 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 utilizzate 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)
    

Configurare l'autenticazione

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

Opzione di autenticazione con Microsoft Entra

  1. Ottenere l'oggetto objectId associato all'entità di Microsoft Entra. Per i singoli account utente, ottenere il nome dell'entità utente (UPN) associato all'entità di Microsoft Entra.

    • Per un account del gruppo di Microsoft Entra:

      AAD_ENTITY_ID=$(az ad signed-in-user show --query id -o tsv)
      
    • Per un singolo account utente Microsoft Entra:

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

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

    • Se si utilizza l'oggetto ClusterRoleBinding o RoleBinding nativo di Kubernetes per i controlli di autorizzazione nel cluster, con il file kubeconfig che punta a apiserver del cluster per l'accesso diretto, è possibile creare un oggetto mappato all'entità di Microsoft Entra per l'accesso a tale cluster. Ad esempio:

      kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_ID
      
    • Se si utilizza 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à di Microsoft Entra. Ad esempio:

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

Opzione di autenticazione del token con l'account del servizio

  1. Con il file kubeconfig che punta all'oggetto 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 un clusterRoleBinding per concedere a questo account del servizio le autorizzazioni appropriate per il cluster. Se nel primo comando è stato utilizzato 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. Impostare il token in modo che l'output venga restituito 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 utilizzando il token di autenticazione o l'account del servizio di Microsoft Entra.

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

    • Per l'autenticazione di Microsoft Entra:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • Per l'autenticazione del token dell'account di servizio:

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

      Nota

      Questo comando apre il proxy e blocca la shell corrente.

  3. In una sessione diversa della shell, utilizzare 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 nomi default.

Limitazioni note

Se l'entità servizio di Microsoft Entra utilizzata fa parte di più di 200 gruppi quando si effettuano richieste al cluster Kubernetes, è possibile che venga visualizzato l'errore seguente:

Overage claim (users with more than 200 group membership) for SPN is currently not supported. For troubleshooting, please refer to aka.ms/overageclaimtroubleshoot

Si tratta di una limitazione nota. Per ovviare a questo errore:

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

Passaggi successivi