Clusterverbinding gebruiken om veilig verbinding te maken met Kubernetes-clusters met Azure Arc

Met clusterverbinding kunt u veilig verbinding maken met Kubernetes-clusters met Azure Arc vanaf elke locatie zonder dat een binnenkomende poort moet worden ingeschakeld op de firewall.

Toegang tot het apiserver Kubernetes-cluster met Azure Arc maakt de volgende scenario's mogelijk:

  • Interactieve foutopsporing en probleemoplossing.
  • Clustertoegang tot Azure-services voor aangepaste locaties en andere resources die erop zijn gemaakt.

Bekijk voordat u begint het conceptuele overzicht van de functie clusterverbinding.

Vereisten

  • Azure CLI installeren of bijwerken naar de nieuwste versie.

  • Installeer de nieuwste versie van de connectedk8s Azure CLI-extensie:

    az extension add --name connectedk8s
    

    Als u de connectedk8s extensie al hebt geïnstalleerd, werkt u de extensie bij naar de nieuwste versie:

    az extension update --name connectedk8s
    
  • Vervang de tijdelijke aanduidingen en voer de onderstaande opdracht uit om de omgevingsvariabelen in te stellen die in dit document worden gebruikt:

    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)
    
  • Naast het voldoen aan de netwerkvereisten voor Kubernetes met Arc, schakelt u deze eindpunten in voor uitgaande toegang:

    Eindpunt Poort
    *.servicebus.windows.net 443
    guestnotificationservice.azure.com, *.guestnotificationservice.azure.com 443

    Notitie

    Gebruik de opdracht \GET https://guestnotificationservice.azure.com/urls/allowlist?api-version=2020-01-01&location=<location>om het *.servicebus.windows.net jokerteken om te zetten in specifieke eindpunten. Binnen deze opdracht moet de regio worden opgegeven voor de <location> tijdelijke aanduiding.

Als u het regiosegment van een regionaal eindpunt wilt ophalen, verwijdert u alle spaties uit de naam van de Azure-regio. Bijvoorbeeld, regio VS - oost 2 , de regionaam is eastus2.

Bijvoorbeeld: *.<region>.arcdataservices.com moet zich in de regio VS - oost 2 bevinden *.eastus2.arcdataservices.com .

Voer deze opdracht uit om een lijst met alle regio's weer te geven:

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

Verificatie instellen

Maak op het bestaande cluster met Arc het ClusterRoleBinding met Microsoft Entra-verificatie of een serviceaccounttoken.

Microsoft Entra-verificatieoptie

  1. Haal de objectId gekoppelde aan uw Microsoft Entra-entiteit op.

    • Voor een Microsoft Entra-gebruikersaccount:

      AAD_ENTITY_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
      
    • Voor een Microsoft Entra-toepassing:

      AAD_ENTITY_OBJECT_ID=$(az ad sp show --id <id> --query id -o tsv)
      
  2. Autoriseren van de entiteit met de juiste machtigingen.

    • Als u kubernetes native ClusterRoleBinding of RoleBinding gebruikt voor autorisatiecontroles op het cluster, waarbij het kubeconfig bestand naar het apiserver cluster verwijst voor directe toegang, kunt u er een maken die is toegewezen aan de Microsoft Entra-entiteit (service-principal of gebruiker) die toegang nodig heeft tot dit cluster. Voorbeeld:

      kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_OBJECT_ID
      
    • Als u Azure RBAC gebruikt voor autorisatiecontroles op het cluster, kunt u een toepasselijke Azure-roltoewijzing maken die is toegewezen aan de Microsoft Entra-entiteit. Voorbeeld:

      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
      

Verificatieoptie voor serviceaccounttoken

  1. Als het kubeconfig bestand naar het apiserver Kubernetes-cluster verwijst, voert u deze opdracht uit om een serviceaccount te maken. In dit voorbeeld wordt het serviceaccount gemaakt in de standaardnaamruimte, maar u kunt elke andere naamruimte vervangen door default.

    kubectl create serviceaccount demo-user -n default
    
  2. Maak ClusterRoleBinding om dit serviceaccount de juiste machtigingen voor het cluster te verlenen. Als u een andere naamruimte in de eerste opdracht hebt gebruikt, vervangt u deze hier door default.

    kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
    
  3. Een serviceaccounttoken maken:

    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. Het token ophalen naar uitvoer naar de console

    echo $TOKEN
    

Toegang tot uw cluster vanaf een clientapparaat

U hebt nu toegang tot het cluster vanaf een andere client. Voer de volgende stappen uit op een ander clientapparaat.

  1. Meld u aan met behulp van Microsoft Entra-verificatie of tokenverificatie voor serviceaccounts.

  2. Haal de clusterverbinding kubeconfig op die nodig is om vanaf elke locatie met het cluster te communiceren (zelfs buiten de firewall rondom het cluster), op basis van de gebruikte verificatieoptie:

    • Als u Microsoft Entra-verificatie gebruikt:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • Als u tokenverificatie voor serviceaccounts gebruikt:

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

      Notitie

      Met deze opdracht wordt de proxy geopend en wordt de huidige shell geblokkeerd.

  3. Gebruik kubectl in een andere shellsessie om aanvragen naar het cluster te verzenden:

    kubectl get pods -A
    

U ziet nu een antwoord van het cluster met de lijst met alle pods onder de default naamruimte.

Bekende beperkingen

Gebruik az connectedk8s show deze optie om de Kubernetes-agentversie met Arc te controleren.

Als de gebruikte Microsoft Entra-entiteit deel uitmaakt van meer dan 200 groepen, ziet u mogelijk de volgende fout bij het indienen van aanvragen bij het Kubernetes-cluster:

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.

Dit is een bekende beperking. Ga als volgt te werk om deze fout te achterstalleren:

  1. Maak een service-principal, die minder waarschijnlijk lid is van meer dan 200 groepen.
  2. Meld u aan bij Azure CLI met de service-principal voordat u de az connectedk8s proxy opdracht uitvoert.

Volgende stappen