Sdílet prostřednictvím


Nasazení a konfigurace federace identit úloh v Kubernetes s podporou Azure Arc

Funkci identity úloh můžete povolit v clusteru Kubernetes s podporou Azure Arc pomocí Azure CLI. Tento proces se řídí těmito základními kroky:

  1. Povolte funkci identity úloh v novém nebo existujícím clusteru Kubernetes s podporou Arc.
  2. Vytvořte spravovanou identitu (nebo registraci aplikace) a účet služby Kubernetes.
  3. Nakonfigurujte spravovanou identitu pro federaci tokenů.
  4. Nakonfigurujte poznámky účtu služby a popisky podů aplikací tak, aby používaly identitu úloh.
  5. Nakonfigurujte nastavení identity úloh v clusteru Kubernetes.
  6. Zakažte identitu úloh v clusteru.

Přehled této funkce najdete v tématu Federace identit úloh v Kubernetes s podporou Azure Arc.

Návod

Tento článek popisuje kroky potřebné k nasazení a konfiguraci identity úloh v clusteru Kubernetes s podporou Arc. Informace o povolení identity úloh v jiných typech clusterů najdete v následujících článcích:

Požadavky

  • Identita úloh pro clustery Kubernetes s podporou Azure Arc se podporuje v následujících distribucích Kubernetes:
    • Cluster Ubuntu Linux se systémem K3s
    • Služba AKS povolená službou Azure Arc
    • Red Hat OpenShift
    • VMware Tanzu TKGm
    • AKS na Edge Essentials

Pokud chcete použít funkci identity úloh, musíte mít Azure CLI verze 2.64 nebo vyšší a az connectedk8s verzi 1.10.0 nebo vyšší. Před aktualizací verze az connectedk8s nezapomeňte aktualizovat verzi Azure CLI. Pokud používáte Azure Cloud Shell, nainstaluje se nejnovější verze Azure CLI.

Povolte identitu pracovního zatížení na vašem clusteru

Podle příslušných kroků povolte funkci identity úloh pro nový nebo stávající cluster Kubernetes s podporou Arc. V obou případech nezapomeňte nahradit název a skupinu prostředků hodnotami a podle potřeby nakonfigurovat parametry.

Parametr Popis Požadováno
--enable-oidc-issuer Generuje a hostuje adresu URL vystavitele OIDC, což je veřejně přístupná adresa URL, která serveru rozhraní API umožňuje najít veřejné podpisové klíče pro ověření tokenů.  Požadováno
--enable-workload-identity Nainstaluje měnící se vstupní webhook, který umístí podepsaný token účtu služby na známou cestu a na základě nastavení anotovaného účtu služby vloží do podů aplikace proměnné prostředí související s autentizací. Pokud u nového clusteru není tento parametr povolený, musíte připojit promítaný svazek na dobře známou cestu, aby se token podepsaného účtu služby stal dostupným na této cestě. Volitelné

Nastavení proměnných prostředí

Pro usnadnění používání se na proměnné prostředí definované níže odkazují v příkladech v tomto článku. Nahraďte tyto hodnoty vlastními hodnotami:

export RESOURCE_GROUP="myRG"
export LOCATION="eastus"
export CLUSTER_NAME="mycluster"
export SERVICE_ACCOUNT_NAMESPACE="myKubernetesnamespace"
export SERVICE_ACCOUNT_NAME="mysa"
export SUBSCRIPTION="$(az account show --query id --output tsv)"
export USER_ASSIGNED_IDENTITY_NAME="myIdentity"
export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity"

Pokud chcete vytvořit cluster s podporou Azure Arc s povolenou identitou úloh, použijte následující příkaz:

az connectedk8s connect --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer –-enable-workload-identity

Pokud chcete povolit identitu úloh v existujícím clusteru Kubernetes s podporou Arc, použijte update příkaz.

az connectedk8s update --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer --enable-workload-identity

Načíst adresu URL vystavitele OIDC

Načtěte adresu URL vystavitele OIDC a uložte ji do proměnné prostředí. Tato adresa URL vystavitele se použije v následujícím kroku.

export OIDC_ISSUER="$(az connectedk8s show --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" \ 
    --query "oidcIssuerProfile.issuerUrl" \  
    --output tsv)"

Pokud chcete zobrazit proměnnou prostředí, zadejte echo ${OIDC_ISSUER}. Proměnná prostředí by měla obsahovat adresu URL vystavitele, podobným způsobem jako v následujícím příkladu:

https://northamerica.oic.prod-arc.azure.com/00000000-0000-0000-0000-000000000000/12345678-1234-1234-1234-123456789123/

Ve výchozím nastavení je vystavitel nastaven na používání základní adresy URL https://{region}.oic.prod-arc.azure.com/{tenant_id}/{uuid}, kde hodnota {region} odpovídá umístění, kde byl vytvořen cluster Kubernetes s podporou Arc. Hodnota {uuid} představuje klíč OpenID Connect (OIDC), což je neměnný náhodně vygenerovaný identifikátor GUID pro každý cluster.

Vytvoření spravované identity

az identity create Pomocí příkazu vytvořte spravovanou identitu přiřazenou uživatelem. Pomocí identity úlohy se vytvoří vztah důvěry mezi tokenem uživatelské správcovské identity a tokenem účtu služby v clusteru Kubernetes.

az identity create \ 
    --name "${USER_ASSIGNED_IDENTITY_NAME}" \
    --resource-group "${RESOURCE_GROUP}" \
    --location "${LOCATION}" \
    --subscription "${SUBSCRIPTION}"

Načtěte klientské ID spravované identity a uložte ho do proměnné prostředí.

export USER_ASSIGNED_CLIENT_ID="$(az identity show \ 
    --resource-group "${RESOURCE_GROUP}" \
    --name "${USER_ASSIGNED_IDENTITY_NAME}" \
    --query 'clientId' \
    --output tsv)"

Vytvoření účtu služby Kubernetes

Vytvořte účet služby Kubernetes a označte ho ID klienta spravované identity vytvořené v předchozím kroku. Podepsané tokeny přidružené k účtu služby Kubernetes se po navázání vztahu důvěryhodnosti mezi těmito dvěma tokeny vymění za token ID Microsoft Entra.

Pomocí následujícího fragmentu kódu YAML vytvořte účet služby s přidanou poznámkou identity úlohy.

apiVersion: v1 
kind: ServiceAccount 
metadata: 
  annotations: 
    azure.workload.identity/client-id: "${USER_ASSIGNED_CLIENT_ID}" 
  name: "${SERVICE_ACCOUNT_NAME}" 
  namespace: "${SERVICE_ACCOUNT_NAMESPACE}" 

Vytvoření přihlašovacích údajů federované identity

az identity federated-credential create Pomocí příkazu vytvořte přihlašovací údaje federované identity mezi spravovanou identitou, vystavitelem účtu služby a předmětem. Tento krok vytvoří vztah důvěryhodnosti mezi clusterem Kubernetes a Microsoft Entra pro výměnu tokenů. Další informace o přihlašovacích údajích federované identity v Microsoft Entra najdete v tématu Přehled přihlašovacích údajů federované identity v Microsoft Entra ID.

az identity federated-credential create \ 
    --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} \ 
    --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \ 
    --resource-group "${RESOURCE_GROUP}" \ 
    --issuer "${OIDC_ISSUER}" \ 
    --subject system:serviceaccount:"${SERVICE_ACCOUNT_NAMESPACE}":"${SERVICE_ACCOUNT_NAME}" \ 
    --audience api://AzureADTokenExchange 

Poznámka:

Po přidání federálního identifikačního dokladu to trvá několik sekund, než se rozšíří. Pokud se žádost o token provede okamžitě po přidání přihlašovacích údajů federované identity, může požadavek selhat, dokud se mezipaměť neaktualizuje. Pokud se chcete tomuto problému vyhnout, přidejte do skriptů mírné zpoždění po přidání přihlašovacích údajů federované identity.

Konfigurace anotací účtů služby a popisků podů

Pro konfiguraci identity úloh na základě požadavků aplikace jsou k dispozici následující poznámky k účtu služby a podům. Popisek podu uvedený níže je povinný, pokud –-enable-workload-identity je nastaven na true.

Poznámky k účtu služby

Všechny poznámky k účtu služby jsou volitelné. Pokud není zadána poznámka, použije se výchozí hodnota.

Poznámka Popis Výchozí
azure.workload.identity/client-id ID klienta aplikace Microsoft Entra, které se má použít s podem.
azure.workload.identity/tenant-id ID tenanta Azure, ve kterém je zaregistrovaná aplikace Microsoft Entra. AZURE_TENANT_ID Proměnná prostředí extrahovaná z azure-wi-webhook-config objektu ConfigMap
azure.workload.identity/service-account-token-expiration expirationSeconds pole pro token účtu plánované služby. Nakonfigurujte, aby se zabránilo výpadkům způsobeným chybami během aktualizace tokenu účtu služby. Vypršení platnosti tokenu účtu služby Kubernetes neodpovídá tokenům Microsoft Entra. Platnost tokenů Microsoft Entra vyprší 24 hodin po jejich vystavení. 3600 (podporovaný rozsah je 3600–86400)

Popisky podů

Poznámka Popis Doporučená hodnota Požadováno
azure.workload.identity/use Požadováno ve specifikaci šablony podu. Pokud je hodnota –-enable-workload-identity nastavena na true, pouze pody s tímto štítkem jsou upravovány webovým hookem pro mutaci při přijetí, aby se vložily specifické proměnné prostředí Azure a objem tokenu účtu projektované služby. true Ano

Pod poznámky

Všechny poznámky k podům jsou volitelné. Pokud není zadána poznámka, použije se výchozí hodnota.

Poznámka Popis Výchozí
azure.workload.identity/service-account-token-expiration expirationSeconds pole pro token účtu plánované služby. Nakonfigurujte, aby se zabránilo výpadkům způsobeným chybami během aktualizace tokenu účtu služby. Vypršení platnosti tokenu účtu služby Kubernetes neodpovídá tokenům Microsoft Entra. Platnost tokenů Microsoft Entra vyprší 24 hodin po jejich vystavení. 3600 (podporovaný rozsah je 3600–86400)
azure.workload.identity/skip-containers Představuje seznam kontejnerů oddělených středníkem, které mají přeskočit přidání svazku s tokenem projektovaného účtu služby. Například: container1;container2. Ve výchozím nastavení se do všech kontejnerů přidá svazek tokenu služebního účtu, pokud je pod označený azure.workload.identity/use: true.

Konfigurace nastavení identity úloh v clusteru Kubernetes

Server rozhraní API v clusteru Kubernetes musí být nakonfigurovaný tak, aby vystavoval tokeny účtu služby, které obsahují veřejně přístupnou adresu URL vystavitele OIDC (aby Entra věděla, kde najít veřejné klíče pro ověření tokenu).

Pokud chcete nakonfigurovat nastavení identity úloh v různých distribucích Kubernetes, dokončete konfiguraci pomocí následujících kroků.

Clustery K3s

  1. Vytvořte konfigurační soubor k3s.

  2. Úpravou /etc/rancher/k3s/config.yaml přidáte tato nastavení:

       `kube-apiserver-arg:  
         - 'service-account-issuer=${OIDC_ISSUER}'
         - 'service-account-max-token-expiration=24h'`
    
  3. Uložte soubor config.yaml.

  4. Restartujte server rozhraní API k3s pomocí příkazu systemctl restart k3s.

    Klíče účtu služby doporučujeme často obměnět. Další informace najdete v tématu Rotace klíče vydavatele účtu služby.

Red Hat OpenShift clustery

  1. Upravte konfiguraci ověřování pro cluster:

    1. Otevřete konfiguraci ověřování pro cluster:

      kubectl edit authentications cluster
      
    2. Vyhledejte sekci pro hodnotu vystavitele a aktualizujte ji.

    3. Uložte soubor a ukončete editor.

  2. Restartujte příslušná nasazení v požadovaných oborech názvů:

    kubectl rollout restart deployment -n azure-arc
    kubectl rollout restart deployment -n arc-workload-identity
    
  3. Případně můžete pomocí příkazu patch použít změny, které aktualizují hodnotu vystavitele bez ručních úprav:

    kubectl patch authentication cluster \ 
    --type merge \ 
    -p '{"spec":{"serviceAccountIssuer":"<NEW_ISSUER_VALUE>"}}' \ 
    --kubeconfig /etc/kubernetes/admin.conf
    
  4. Potvrďte provedené změny:

    1. Ověřte hodnotu vydavatele:

      kubectl get authentications cluster
      
    2. Zkontrolujte stav restartovaných nasazení:

      kubectl get pods -n azure-arc
      kubectl get pods -n arc-workload-identity 
      

Clustery VMware Tanzu TKGm

  1. Připojení clusteru ke službě Azure Arc s povolenou identitou úloh:

    1. Povolte identitu úloh v rámci procesu připojení Arc.
    2. Po připojení načtěte adresu URL vystavitele OIDC.
  2. Úprava konfigurace clusteru úloh:

    1. Přepnutí kontextu do clusteru pro správu:

      kubectl config use-context mgmt-cluster-admin@mgmt-cluster 
      
    2. Zobrazení clusteru:

      kubectl get cluster
      
    3. Upravte konfiguraci cílového clusteru:

      1. Vyhledejte apiServerExtraArgs.
      2. Pokud hodnota existuje, aktualizujte ji tak, aby zahrnovala adresu URL vystavitele.
      3. Pokud neexistuje, přidejte ho do části spec:topology:variables , jak je znázorněno:
      name: apiServerExtraArgs
      value:
        - 'service-account-issuer=<OIDC_ISSUER_URL>'
      
  3. Přepněte kontext zpět do clusteru úloh:

    kubectl config use-context <WORKLOAD_CLUSTER_CONTEXT>
    
  4. Vytvoření účtu služby a testovacího tokenu:

    1. Vytvořte token pro účet služby:

      kubectl create token <SERVICE_ACCOUNT_NAME> -n <NAMESPACE>
      
    2. Ověřte, že vystavitel tokenu odpovídá očekávané adrese URL OIDC.

  5. Restartujte nasazení, aby se změny projevily:

    kubectl rollout restart deployment -n azure-arc
    

Zakázat identitu úloh

Pokud chcete zakázat funkci identity úloh v clusteru Kubernetes s podporou Azure Arc, spusťte následující příkaz:

az connectedk8s update
    --resource-group "${RESOURCE_GROUP}"
    --name "${CLUSTER_NAME}"
    --disable-workload-identity

Další kroky