Uso de Conexión de clúster para conectarse de manera segura a clústeres de Kubernetes habilitados para Azure Arc

Con Conexión de clústeres, puede conectarse de manera segura a los 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 apiserver del clúster de Kubernetes habilitado para Azure Arc habilita los siguientes escenarios:

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

Antes de comenzar, revise la información general conceptual de la característica de conexión del clúster.

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, actualícela 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 que se usan en este documento:

    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)
    
  • Además de cumplir los requisitos de red para Kubernetes habilitado para Arc, habilite estos puntos de conexión para el acceso saliente:

    Punto de conexión Port
    *.servicebus.windows.net 443
    guestnotificationservice.azure.com, *.guestnotificationservice.azure.com 443

    Nota:

    Para convertir el carácter comodín *.servicebus.windows.net en puntos de conexión específicos, use el comando \GET https://guestnotificationservice.azure.com/urls/allowlist?api-version=2020-01-01&location=<location>. En este comando se debe especificar la región del marcador de posición <location>.

Para obtener el segmento de región de un punto de conexión regional, quite todos los espacios del nombre de la región de Azure. Por ejemplo, en la región Este de EE. UU. 2, el nombre de la región es eastus2.

Por ejemplo: *.<region>.arcdataservices.com debe ser *.eastus2.arcdataservices.com en la región Este de EE. UU. 2.

Para ver una lista de todas las regiones, ejecute este comando:

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

Configuración de la autenticación

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

Opción de autenticación de Microsoft Entra

  1. Obtenga el objectId asociado a la entidad de Microsoft Entra.

    • Para una cuenta de usuario de Microsoft Entra:

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

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

    • Si usa los objetos ClusterRoleBinding o RoleBinding nativos de Kubernetes para las comprobaciones de autorización en el clúster y el archivo kubeconfig apunta al apiserver del clúster para el acceso directo, puede crear uno asignado a la entidad de Microsoft Entra (entidad de servicio o usuario) que necesita acceder a este clúster. Por ejemplo:

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

      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
      

Opción de autenticación de token de cuenta de servicio

  1. Con el archivo kubeconfig que apunta al 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. Obtención del token que se va a generar en la consola

    echo $TOKEN
    

Acceso al clúster desde un dispositivo cliente

Ahora puede acceder al clúster desde otro cliente. Ejecute los siguientes pasos en otro dispositivo cliente.

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

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

    • Si usa la autenticación de Microsoft Entra:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • Si usa la autenticación de token de cuenta de servicio:

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

      Nota:

      Este comando abrirá el proxy y bloqueará el shell actual.

  3. En otra sesión de shell, use kubectl para enviar solicitudes al clúster:

    kubectl get pods -A
    

Ahora debería mostrarse una respuesta del clúster que contiene la lista de todos los pods en el espacio de nombres default.

Limitaciones conocidas

Use az connectedk8s show para comprobar la versión del agente de Kubernetes habilitada para Arc.

Al realizar solicitudes al clúster de Kubernetes, si la entidad Microsoft Entra usada forma parte de más de 200 grupos, es posible que vea el siguiente error:

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.

Es una limitación conocida. Para eludir este error:

  1. Cree una entidad de servicio. Es menos probable que una de estas 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