Uso de la conexión de clúster para conectarse de forma segura a clústeres de Kubernetes habilitados para Azure Arc

Con la conexión de clúster, puede conectarse de forma segura a clústeres de Kubernetes habilitados para Azure Arc desde cualquier lugar sin necesidad de habilitar ningún puerto de entrada en el firewall.

El acceso al servidor de API del clúster de Kubernetes habilitado para Azure Arc permite los escenarios siguientes:

  • Depuración interactiva y solución de problemas.
  • Acceso del clúster a los servicios de Azure para ubicaciones personalizadas y otros recursos creados en el clúster.

Antes de empezar, revise la información general conceptual de la característica de conexión de clústeres.

Requisitos previos

  • Instale o actualice la CLI de Azure para tener la versión más reciente.

  • Instale la versión más reciente de la extensión de la CLI de Azure connectedk8s:

    az extension add --name connectedk8s
    

    Si ya ha instalado la extensión connectedk8s, actualice la extensión a la versión más reciente:

    az extension update --name connectedk8s
    
  • Reemplace los marcadores de posición y ejecute el siguiente comando para establecer las variables de entorno:

    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)
    

Configuración de la autenticación

En el clúster existente habilitado para Arc, cree el ClusterRoleBinding mediante autenticación de Microsoft Entra ID o un token de la cuenta de servicio.

Autenticación de Microsoft Entra ID

  1. Obtenga el objectId asociado con su entidad de Microsoft Entra ID. Para las cuentas de usuario únicas, obtenga el nombre principal de usuario (UPN) asociado a la entidad Microsoft Entra ID.

    • Para una cuenta de grupo de Microsoft Entra:

      AAD_ENTITY_ID=$(az ad group show --group <group-name> --query id -o tsv)
      
    • Para una cuenta de usuario única de Microsoft Entra:

      AAD_ENTITY_ID=$(az ad signed-in-user show --query userPrincipalName -o tsv)
      
    • Para una aplicación de Microsoft Entra:

      AAD_ENTITY_ID=$(az ad sp show --id <id> --query id -o tsv)
      
  2. Autorice la entidad con los permisos adecuados.

    • Si usa un ClusterRoleBinding nativo de Kubernetes o un RoleBinding para realizar comprobaciones de autorización en el clúster, con el archivo kubeconfig que apunta al servidor de la API de Kubernetes (kube-apiserver) de su clúster para acceder directamente, puede crear uno vinculado a la entidad de Microsoft Entra ID que necesite acceder a este clúster. Por ejemplo:

      kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_ID
      
    • Si usa Azure RBAC para las comprobaciones de autorización en el clúster, puede crear una asignación de roles de Azure aplicable asociada a la entidad de Microsoft Entra ID. Por ejemplo:

      az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee $AAD_ENTITY_ID --scope $ARM_ID_CLUSTER
      az role assignment create --role "Azure Arc Enabled Kubernetes Cluster User Role" --assignee $AAD_ENTITY_ID --scope $ARM_ID_CLUSTER
      

Autenticación de token de cuenta de servicio

Nota

Los comandos de esta pestaña asumen un shell compatible con Bash (Linux, macOS o Subsistema de Windows para Linux). Para Windows PowerShell, use la pestaña Azure PowerShell.

  1. Con el kubeconfig archivo que apunta al servidor de API de Kubernetes (kube-apiserver) del clúster de Kubernetes, ejecute este comando para crear una cuenta de servicio. En este ejemplo se crea la cuenta de servicio en el espacio de nombres predeterminado, pero puede sustituir cualquier otro espacio de nombres por default.

    kubectl create serviceaccount demo-user -n default
    
  2. Cree un ClusterRoleBinding para conceder a esta cuenta de servicio los permisos adecuados en el clúster. Si usó un espacio de nombres diferente en el primer comando, sustituya aquí por default.

    kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
    
  3. Cree un token de cuenta de servicio:

    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. Genera el token en la consola:

    echo $TOKEN
    

Acceso al clúster desde un dispositivo cliente

Después de configurar la autenticación en el clúster, siga estos pasos desde cualquier dispositivo cliente para abrir un proxy de conexión de clúster y ejecutar comandos kubectl en el clúster de Kubernetes habilitado para Azure Arc.

  1. Inicie sesión mediante la autenticación de Microsoft Entra ID o la autenticación mediante token de cuenta de servicio.

  2. Obtenga la conexión kubeconfig del clúster que usa para comunicarse con el clúster desde cualquier lugar (incluso fuera del firewall), en función de la opción de autenticación:

    • Para la autenticación de Microsoft Entra ID:

      # Microsoft Entra ID authentication
      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • Para la autenticación de token de cuenta de servicio:

      # Service account token authentication
      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP --token $TOKEN
      

      Nota

      Este comando abre el proxy y bloquea el shell actual.

  3. En otra sesión de shell, use kubectl para enviar solicitudes al clúster. Por ejemplo, ejecute el siguiente comando:

    kubectl get pods -n default
    

Si la conexión funciona correctamente, la respuesta enumera todos los pods del default espacio de nombres.

Restricciones conocidas

La siguiente limitación se aplica cuando se usa la conexión de clúster para acceder a un clúster de Kubernetes habilitado para Azure Arc.

Si inicia sesión en CLI de Azure con una entidad de servicio de Microsoft Entra ID antes de ejecutar az connectedk8s proxy y esa entidad de servicio es miembro de más de 200 grupos, es posible que vea el siguiente error:

Overage claim (users with more than 200 group membership) for SPN is currently not supported. For troubleshooting, please refer to aka.ms/overageclaimtroubleshoot

Para solucionar esta limitación:

  1. Cree una entidad de servicio, que es menos probable que sea miembro de más de 200 grupos.
  2. Inicie sesión en la CLI de Azure con la entidad de servicio antes de ejecutar el comando az connectedk8s proxy.

Pasos siguientes