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 felsökning 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)
    
  • Förutom att uppfylla nätverkskraven för Arc-aktiverade Kubernetes aktiverar du dessa slutpunkter för utgående åtkomst:

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

    Kommentar

    Om du vill översätta *.servicebus.windows.net jokertecknet till specifika slutpunkter använder du kommandot \GET https://guestnotificationservice.azure.com/urls/allowlist?api-version=2020-01-01&location=<location>. I det här kommandot måste regionen anges för <location> platshållaren.

Om du vill hämta regionsegmentet för en regional slutpunkt tar du bort alla blanksteg från Namnet på Azure-regionen. Till exempel regionen USA, östra 2 , är eastus2regionnamnet .

Till exempel: *.<region>.arcdataservices.com bör finnas *.eastus2.arcdataservices.com i regionen USA, östra 2.

Om du vill se en lista över alla regioner kör du det här kommandot:

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

Konfigurera autentisering

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

Microsoft Entra-autentiseringsalternativ

  1. Hämta den objectId associerade med din Microsoft Entra-entitet.

    • För ett Microsoft Entra-användarkonto:

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

      AAD_ENTITY_OBJECT_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 auktoriseringskontroller i klustret, med kubeconfig filen som pekar på apiserver klustret för direkt åtkomst, kan du skapa en mappad till Microsoft Entra-entiteten (tjänstens huvudnamn eller användare) som behöver åtkomst till det här klustret. Till exempel:

      kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_OBJECT_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_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
      

Autentiseringsalternativ för tjänstkontotoken

  1. kubeconfig När filen pekar på apiserver kubernetes-klustret kör du det här kommandot för att skapa ett tjänstkonto. 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 ClusterRoleBinding för att ge det här tjänstkontot rätt behörigheter i 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 till utdata 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:

    • Om du använder Microsoft Entra-autentisering:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • Om du använder tokenautentisering för tjänstkonto:

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

      Kommentar

      Det här kommandot öppnar proxyn och blockerar det aktuella gränssnittet.

  3. I en annan shell-session använder du kubectl för att skicka begäranden till klustret:

    kubectl get pods -A
    

Nu bör du se ett svar från klustret som innehåller listan över alla poddar under default namnområdet.

Kända begränsningar

Använd az connectedk8s show för att kontrollera din Arc-aktiverade Kubernetes-agentversion.

När du gör begäranden till Kubernetes-klustret kan följande fel uppstå om den Microsoft Entra-entitet som används är en del av mer än 200 grupper:

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.

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

  1. Skapa ett huvudnamn för tjänsten, vilket är mindre troligt att vara 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