Použití připojení clusteru k zabezpečenému připojení ke clusterům Kubernetes s podporou Azure Arc

Díky připojení ke clusteru se můžete bezpečně připojit ke clusterům Kubernetes s podporou Služby Azure Arc odkudkoli, aniž byste museli povolit příchozí port v bráně firewall.

Přístup ke apiserver clusteru Kubernetes s podporou Azure Arc umožňuje následující scénáře:

  • Interaktivní ladění a řešení potíží
  • Přístup ke službám Azure pro vlastní umístění a další prostředky vytvořené nad ním

Než začnete, projděte si koncepční přehled funkce připojení clusteru.

Požadavky

  • Nainstalujte nebo aktualizujte Azure CLI na nejnovější verzi.

  • Nainstalujte nejnovější verzi connectedk8s rozšíření Azure CLI:

    az extension add --name connectedk8s
    

    Pokud jste rozšíření už nainstalovali connectedk8s , aktualizujte rozšíření na nejnovější verzi:

    az extension update --name connectedk8s
    
  • Nahraďte zástupné symboly a spuštěním následujícího příkazu nastavte proměnné prostředí použité v tomto dokumentu:

    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)
    
  • Kromě splnění požadavků na síť pro Kubernetes s podporou Arc povolte tyto koncové body pro odchozí přístup:

    Koncový bod Port
    *.servicebus.windows.net 443
    guestnotificationservice.azure.com, *.guestnotificationservice.azure.com 443

    Poznámka:

    Pokud chcete zástupný znak přeložit *.servicebus.windows.net na konkrétní koncové body, použijte příkaz \GET https://guestnotificationservice.azure.com/urls/allowlist?api-version=2020-01-01&location=<location>. V rámci tohoto příkazu musí být pro zástupný symbol zadána <location> oblast.

Pokud chcete získat segment oblasti regionálního koncového bodu, odeberte všechny mezery z názvu oblasti Azure. Například oblast USA – východ 2 , název oblasti je eastus2.

Například: *.<region>.arcdataservices.com musí být *.eastus2.arcdataservices.com v oblasti USA – východ 2.

Pokud chcete zobrazit seznam všech oblastí, spusťte tento příkaz:

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

Nastavení ověřování

V existujícím clusteru s podporou arc vytvořte clusterRoleBinding s ověřováním Microsoft Entra nebo tokenem účtu služby.

Možnost ověřování Microsoft Entra

  1. Získejte přidruženou entitu objectId Microsoft Entra.

    • Pro uživatelský účet Microsoft Entra:

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

      AAD_ENTITY_OBJECT_ID=$(az ad sp show --id <id> --query id -o tsv)
      
  2. Autorizovat entitu s příslušnými oprávněními.

    • Pokud pro kontrolu autorizace v clusteru používáte nativní ClusterRoleBinding nebo RoleBinding Kubernetes, kubeconfigapiserver můžete vytvořit jeden namapovaný na entitu Microsoft Entra (instanční objekt nebo uživatel), který potřebuje přístup k tomuto clusteru. Příklad:

      kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_OBJECT_ID
      
    • Pokud ke kontrole autorizace v clusteru používáte Azure RBAC, můžete vytvořit příslušné přiřazení role Azure namapované na entitu Microsoft Entra. Příklad:

      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
      

Možnost ověřování tokenu účtu služby

  1. kubeconfig Když soubor odkazuje na apiserver cluster Kubernetes, spusťte tento příkaz a vytvořte účet služby. Tento příklad vytvoří účet služby ve výchozím oboru názvů, ale můžete nahradit jakýkoli jiný obor názvů .default

    kubectl create serviceaccount demo-user -n default
    
  2. Vytvořte clusterRoleBinding, abyste tomuto účtu služby udělili příslušná oprávnění v clusteru. Pokud jste v prvním příkazu použili jiný obor názvů, nahraďte ho zde .default

    kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
    
  3. Vytvoření tokenu účtu služby:

    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. Získání tokenu do výstupu do konzoly

    echo $TOKEN
    

Přístup ke clusteru z klientského zařízení

Teď můžete ke clusteru přistupovat z jiného klienta. Na jiném klientském zařízení spusťte následující kroky.

  1. Přihlaste se pomocí ověřování Microsoft Entra nebo pomocí ověřování tokenu účtu služby.

  2. Získejte připojení kubeconfig ke clusteru potřebné ke komunikaci s clusterem odkudkoli (i mimo bránu firewall obklopují cluster), a to na základě použité možnosti ověřování:

    • Pokud používáte ověřování Microsoft Entra:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • Pokud používáte ověřování pomocí tokenu účtu služby:

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

      Poznámka:

      Tento příkaz otevře proxy server a zablokuje aktuální prostředí.

  3. V jiné relaci prostředí použijte kubectl k odesílání požadavků do clusteru:

    kubectl get pods -A
    

Teď by se měla zobrazit odpověď z clusteru obsahujícího seznam všech podů v default oboru názvů.

Známá omezení

Slouží az connectedk8s show ke kontrole verze agenta Kubernetes s podporou Arc.

Pokud je použitá entita Microsoft Entra při provádění požadavků na cluster Kubernetes součástí více než 200 skupin, může se zobrazit následující chyba:

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.

Jedná se o známé omezení. Pokud se chcete dostat za tuto chybu:

  1. Vytvořte instanční objekt, který je méně pravděpodobné, že bude členem více než 200 skupin.
  2. Před spuštěním příkazu se přihlaste k Azure CLI pomocí instančního objektu az connectedk8s proxy .

Další kroky