Implementar y configurar la federación de identidades de carga de trabajo en Kubernetes habilitado para Azure Arc (versión preliminar)
Puede habilitar la característica de identidad de carga de trabajo en un clúster de Kubernetes habilitado para Azure Arc mediante la CLI de Azure. El proceso sigue estos pasos generales:
- Habilite la característica de identidad de carga de trabajo en un clúster de Kubernetes habilitado para Arc nuevo o existente.
- Cree una identidad administrada (o un registro de aplicaciones) y una cuenta de servicio de Kubernetes.
- Configure la identidad administrada para la federación de tokens.
- Configure las anotaciones de cuenta de servicio y las etiquetas de pod de aplicación para usar la identidad de carga de trabajo.
- Configure las opciones de identidad de carga de trabajo en el clúster de Kubernetes.
- Deshabilite la identidad de carga de trabajo en el clúster.
Para obtener información general sobre esta característica, consulte Federación de identidades de carga de trabajo en Kubernetes habilitado para Azure Arc (versión preliminar).
Importante
La característica de federación de identidades de carga de trabajo de Azure Arc está actualmente en versión preliminar. Consulte Términos de uso complementarios para las versiones preliminares de Microsoft Azure para conocer los términos legales que se aplican a las características de Azure que se encuentran en la versión beta, en versión preliminar o que todavía no se han publicado para que estén disponibles con carácter general.
Sugerencia
En este artículo se describen los pasos necesarios para implementar y configurar la identidad de carga de trabajo en un clúster de Kubernetes habilitado para Arc. Para obtener información sobre cómo habilitar la identidad de carga de trabajo en otros tipos de clústeres, consulte los siguientes artículos:
Requisitos previos
- La identidad de carga de trabajo para clústeres de Kubernetes habilitados para Azure Arc (versión preliminar) se admite en las siguientes distribuciones de Kubernetes:
- Clúster de Ubuntu Linux que ejecuta K3s
- AKS en Edge Essentials
- AKS en HCI 23H2
Para usar la característica de identidad de carga de trabajo, debe tener la versión 2.64 o posterior de la CLI de Azure y az connectedk8s
versión 1.10.0 o posterior. Asegúrese de actualizar la versión de la CLI de Azure antes de actualizar la versión de az connectedk8s
. Si usa Azure Cloud Shell, la versión más reciente de la CLI de Azure ya está instalada.
Habilitación de la identidad de carga de trabajo en el clúster
Siga los pasos adecuados para habilitar la característica de identidad de carga de trabajo para un nuevo clúster de Kubernetes habilitado para Arc o uno existente. En ambos casos, asegúrese de reemplazar el nombre y el grupo de recursos por los valores y configure los parámetros según sea necesario.
Parámetro | Descripción | Obligatorio |
---|---|---|
--enable-oidc-issuer |
Genera y hospeda la dirección URL del emisor de OIDC, que es una dirección URL accesible públicamente que permite al servidor de API buscar claves de firma públicas para comprobar los tokens. | Obligatorio |
--enable-workload-identity |
Instala un webhook de admisión de mutación que proyecta un token de cuenta de servicio firmado en una ruta de acceso conocida e inserta variables de entorno relacionadas con la autenticación en los pods de aplicación en función de la configuración de la cuenta de servicio anotada. Para un nuevo clúster, si este parámetro no está habilitado, debe montar un volumen proyectado en una ruta de acceso conocida que exponga el token de cuenta de servicio firmado a la ruta de acceso. | Opcionales |
Establecimiento de variables de entorno
Para mayor comodidad, se hace referencia a las variables de entorno definidas a continuación en los ejemplos de este artículo. Reemplace estos valores por los suyos propios:
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"
Para crear un clúster habilitado para Azure Arc con la identidad de carga de trabajo habilitada, use el siguiente comando:
az connectedk8s connect --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer –-enable-workload-identity
Para habilitar la identidad de carga de trabajo en un clúster de Kubernetes habilitado para Arc existente, use el comando update
.
az connectedk8s update --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" --enable-oidc-issuer --enable-workload-identity
Recuperación de la dirección URL del emisor de OIDC
Recupere la dirección URL del emisor de OIDC y guárdela en una variable de entorno. Esta dirección URL del emisor se usará en el paso siguiente.
export OIDC_ISSUER="$(az connectk8s show --name "${CLUSTER_NAME}" --resource-group "${RESOURCE_GROUP}" \
--query "oidcIssuerProfile.issuerUrl" \
--output tsv)"
Para ver la variable de entorno, escriba echo ${OIDC_ISSUER}
. La variable de entorno debe contener una dirección URL del emisor similar al ejemplo siguiente:
https://northamerica.oic.prod-arc.azure.com/00000000-0000-0000-0000-000000000000/12345678-1234-1234-1234-123456789123/
De forma predeterminada, el emisor se establece para usar la dirección URL base https://{region}.oic.prod-arc.azure.com/{tenant_id}/{uuid}
, donde el valor de {region}
coincide con la ubicación donde se crea el clúster de Kubernetes habilitado para Arc. El valor {uuid}
representa la clave OpenID Connect (OIDC), que es un guid inmutable generado aleatoriamente para cada clúster.
Creación de una entidad administrada
Use el comando az identity create
para crear una identidad administrada asignada por el usuario. Con la identidad de carga de trabajo, se establece una relación de confianza entre el token de la identidad de administración asignada por el usuario y el token de cuenta de servicio del clúster de Kubernetes.
az identity create \
--name "${USER_ASSIGNED_IDENTITY_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--location "${LOCATION}" \
--subscription "${SUBSCRIPTION}"
Capture el identificador de cliente de la identidad administrada y almacénelo en una variable de entorno.
export USER_ASSIGNED_CLIENT_ID="$(az identity show \
--resource-group "${RESOURCE_GROUP}" \
--name "${USER_ASSIGNED_IDENTITY_NAME}" \
--query 'clientId' \
--output tsv)"
Creación de una cuenta de servicio de Kubernetes
Cree una cuenta de servicio de Kubernetes y anote en ella el identificador de cliente de la identidad administrada creada en el paso anterior. Los tokens firmados asociados a la cuenta de servicio de Kubernetes se intercambiarán por un token de Microsoft Entra ID después de establecer la relación de confianza entre los dos.
Aplique el siguiente fragmento de código YAML para crear una cuenta de servicio con la anotación de identidad de carga de trabajo agregada.
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
azure.workload.identity/client-id: "${USER_ASSIGNED_CLIENT_ID}"
name: "${SERVICE_ACCOUNT_NAME}"
namespace: "${SERVICE_ACCOUNT_NAMESPACE}"
Creación de la credencial de identidad federada
Use el comando az identity federated-credential create
para crear la credencial de identidad federada entre la identidad administrada, el emisor de la cuenta de servicio y el asunto. Este paso establece la relación de confianza entre el clúster de Kubernetes y Microsoft Entra para intercambiar tokens. Para más información sobre las credenciales de identidad federada en Microsoft Entra, consulte Introducción a las credenciales de identidad federada en 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
Nota:
Una vez agregada la credencial de identidad federada, se tarda unos segundos en propagarse. Si se realiza una solicitud de token inmediatamente después de agregar la credencial de identidad federada, es posible que se produzca un error en la solicitud hasta que se actualice la memoria caché. Para evitar este problema, agregue un ligero retraso en los scripts después de agregar la credencial de identidad federada.
Configuración de anotaciones de cuenta de servicio y etiquetas de pod
Las siguientes anotaciones de pod y cuenta de servicio están disponibles para configurar la identidad de carga de trabajo en función de los requisitos de la aplicación. La etiqueta de pod especificada a continuación es obligatoria si –-enable-workload-identity
está establecido en true
.
Anotaciones de cuenta de servicio
Todas las anotaciones de cuenta de servicio son opcionales. Si no se especifica una anotación, se usará el valor predeterminado.
Annotation | Descripción | Valor predeterminado |
---|---|---|
azure.workload.identity/client-id |
El identificador de cliente de la aplicación Microsoft Entra que se va a usar con el pod. | |
azure.workload.identity/tenant-id |
El identificador de inquilino de Azure donde se registra la aplicación Microsoft Entra. | Variable de entorno AZURE_TENANT_ID extraída de ConfigMap (azure-wi-webhook-config ). |
azure.workload.identity/service-account-token-expiration |
Campo expirationSeconds para el token de cuenta de servicio proyectado. Se configura para evitar el tiempo de espera provocado por errores durante la actualización del token de cuenta de servicio. La expiración del token de la cuenta de servicio de Kubernetes no está correlacionada con los tokens de Microsoft Entra. Los tokens de Microsoft Entra expiran 24 horas después de su emisión. |
3600 (el intervalo admitido es de 3600 a 86400) |
Etiquetas de pod
Annotation | Descripción | Valor recomendado | Obligatorio |
---|---|---|---|
azure.workload.identity/use |
Necesario en la especificación de plantilla de pod. Si –-enable-workload-identity se establece en true , solo los pods con esta etiqueta se mutan mediante el webhook de admisión de mutación para insertar las variables de entorno específicas de Azure y el volumen de tokens de cuenta de servicio proyectado. |
true |
Sí |
Anotaciones de pod
Todas las anotaciones de pod son opcionales. Si no se especifica una anotación, se usará el valor predeterminado.
Annotation | Descripción | Valor predeterminado |
---|---|---|
azure.workload.identity/service-account-token-expiration |
Campo expirationSeconds para el token de cuenta de servicio proyectado. Se configura para evitar el tiempo de espera provocado por errores durante la actualización del token de cuenta de servicio. La expiración del token de la cuenta de servicio de Kubernetes no está correlacionada con los tokens de Microsoft Entra. Los tokens de Microsoft Entra expiran 24 horas después de su emisión. |
3600 (el intervalo admitido es de 3600 a 86400) |
azure.workload.identity/skip-containers |
Representa una lista separada por punto y coma de contenedores para omitir la adición de un volumen de token de cuenta de servicio proyectado. Por ejemplo: container1;container2 . |
De manera predeterminada, el volumen de token de cuenta de servicio proyectado se agrega a todos los contenedores si el pod está etiquetado con azure.workload.identity/use: true . |
Configurar las opciones de identidad de carga de trabajo en el clúster de Kubernetes
El servidor de API del clúster de Kubernetes debe configurarse para emitir tokens de cuenta de servicio que incluyan la dirección URL del emisor OIDC accesible públicamente (de modo que Entra sepa dónde encontrar las claves públicas para validar el token).
Para configurar las opciones de identidad de carga de trabajo en Ubuntu Linux con K3s, siga estos pasos para completar la configuración:
Cree el archivo de configuración de K3s.
Edite
/etc/rancher/k3s/config.yaml
para agregar esta configuración:`kube-apiserver-arg: - 'service-account-issuer=${OIDC_ISSUER}' - 'service-account-max-token-expiration=24h'`
Guarde el archivo config.yaml.
Reinicie el servidor de API de K3s mediante el comando
systemctl restart k3s
.Se recomienda rotar las claves de cuenta de servicio con frecuencia. Para obtener más información, consulte Rotación de claves del emisor de cuentas de servicio.
Deshabilitación de la identidad de la carga de trabajo
Para deshabilitar la característica de identidad de carga de trabajo en un clúster de Kubernetes habilitado para Azure Arc, ejecute el siguiente comando:
az connectedk8s update
--resource-group "${RESOURCE_GROUP}"
--name "${CLUSTER_NAME}"
--disable-workload-identity