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, fare riferimento alla panoramica dei concetti della funzionalità di connessione cluster.

Prerequisiti

  • Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.

  • Un cluster connesso Kubernetes esistente abilitato per Azure Arc.

  • Abilitare i requisiti di rete per Kubernetes abilitato per Azure Arc

  • Abilitare questi endpoint per l'accesso in uscita:

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

    Nota

    Per convertire il carattere jolly *.servicebus.windows.net 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 segnaposto <location>.

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

Ad esempio: *.<region>.arcdataservices.com dovrebbe essere *.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
  • 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 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)
    

Configurazione dell'autenticazione

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

Opzione di autenticazione Microsoft Entra

  1. Ottenere l'oggetto objectId associato all'entità Microsoft Entra. Se si usa un singolo account utente, ottenere il nome dell'entità utente (UPN) associato all'entità Microsoft Entra.

    • Per un account del gruppo 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 usa 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à 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_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_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 dell'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 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. 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 usando l'autenticazione Microsoft Entra o l'autenticazione del token dell'account del servizio.

  2. Ottenere l'oggetto kubeconfig della funzionalità di connessione cluster necessario per comunicare con il cluster da qualsiasi posizione (anche dall'esterno del firewall che protegge 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 diversa della shell, 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 nomi default.

Limitazioni note

Usare az connectedk8s show per controllare la versione dell'agente Kubernetes abilitato per Azure 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 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