Dela via


Använda klusteranslutning för att ansluta på ett säkert sätt till Azure Arc-aktiverade Kubernetes-kluster

Med klusteranslutning kan du på ett säkert sätt ansluta till Azure Arc-aktiverade Kubernetes-kluster var som helst utan att kräva att någon inkommande port aktiveras i brandväggen.

Åtkomst till apiserver Det Azure Arc-aktiverade Kubernetes-klustret möjliggör följande scenarier:

  • Interaktiv avlusning och felsökning.
  • Klusteråtkomst till Azure-tjänster för anpassade platser och andra resurser som skapats ovanpå det.

Innan du börjar kan du läsa den konceptuella översikten över funktionen för klusteranslutning.

Förutsättningar

  • Installera eller uppdatera Azure CLI till den senaste versionen.

  • Installera den senaste versionen av connectedk8s Azure CLI-tillägget:

    az extension add --name connectedk8s
    

    Om du redan har installerat connectedk8s tillägget uppdaterar du tillägget till den senaste versionen:

    az extension update --name connectedk8s
    
  • Ersätt platshållarna och kör kommandot nedan för att ange de miljövariabler som används i det här dokumentet:

    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)
    

Konfigurera autentisering

I det befintliga Arc-aktiverade klustret skapar du ClusterRoleBinding med antingen Microsoft Entra-autentisering eller tjänstkontotoken.

Microsoft Entra-autentiseringsalternativ

  1. Hämta det objectId som är kopplat till din Microsoft Entra-entitet. För enskilda användarkonton hämtar du det användarhuvudnamn (UPN) som är associerat med din Microsoft Entra-entitet.

    • För ett Microsoft Entra-gruppkonto:

      AAD_ENTITY_ID=$(az ad signed-in-user show --query id -o tsv)
      
    • För ett enskilt Microsoft Entra-användarkonto:

      AAD_ENTITY_ID=$(az ad signed-in-user show --query userPrincipalName -o tsv)
      
    • För ett Microsoft Entra-program:

      AAD_ENTITY_ID=$(az ad sp show --id <id> --query id -o tsv)
      
  2. Auktorisera entiteten med lämpliga behörigheter.

    • Om du använder Kubernetes inbyggda ClusterRoleBinding eller RoleBinding för att utföra auktoriseringskontroller i klustret, där kubeconfig-filen pekar på apiserver-anslutningen till ditt kluster för direkt åtkomst, kan du koppla detta till Microsoft Entra-entiteten som behöver åtkomst till det här klustret. Till exempel:

      kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_ID
      
    • Om du använder Azure RBAC för auktoriseringskontroller i klustret kan du skapa en tillämplig Azure-rolltilldelning mappad till Microsoft Entra-entiteten. Till exempel:

      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
      

Autentiseringsalternativ för tjänstekontotoken

  1. När filen kubeconfig är kopplad till apiserver i ditt Kubernetes-kluster, kör det här kommandot för att skapa ett servicekonto. Det här exemplet skapar tjänstkontot i standardnamnområdet, men du kan ersätta alla andra namnområden med default.

    kubectl create serviceaccount demo-user -n default
    
  2. Skapa ett ClusterRoleBinding för att ge det här tjänstkontot lämpliga behörigheter för klustret. Om du använde ett annat namnområde i det första kommandot ersätter du det här med default.

    kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
    
  3. Skapa en tjänstkontotoken:

    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. Hämta token för utskrift till konsolen

    echo $TOKEN
    

Få åtkomst till klustret från en klientenhet

Nu kan du komma åt klustret från en annan klient. Kör följande steg på en annan klientenhet.

  1. Logga in med antingen Microsoft Entra-autentisering eller autentisering med tjänstkontotoken.

  2. Hämta den klusteranslutning kubeconfig som behövs för att kommunicera med klustret var som helst (även utanför brandväggen som omger klustret), baserat på det autentiseringsalternativ som används:

    • För Microsoft Entra-autentisering:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • För tokenautentisering för tjänstkonto:

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

      Anmärkning

      Den här kommandot öppnar proxyn och blockerar den aktuella skalet.

  3. I en annan skal-session, använd kubectl för att skicka förfrågningar till klustret.

    kubectl get pods -A
    

Du bör nu se ett svar från klustret som innehåller listan över alla pods under default-namnrymden.

Kända begränsningar

När du gör begäranden till Kubernetes-klustret kan följande fel uppstå om tjänstens huvudnamn för Microsoft Entra ingår i fler än 200 grupper:

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

Det här är en känd begränsning. För att komma förbi det här felet:

  1. Skapa ett tjänsthuvud, som sannolikt inte är medlem i fler än 200 grupper.
  2. Logga in på Azure CLI med tjänstens huvudnamn innan du kör az connectedk8s proxy kommandot.

Nästa steg