Uso de Conexión de clúster para conectarse 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 sin necesidad de habilitar ningún puerto de entrada en el firewall. El acceso al apiserver del clúster de Kubernetes habilitado para Arc habilita los siguientes escenarios:

  • Habilita la depuración interactiva y la solución de problemas.
  • Proporciona acceso de clúster a los servicios de Azure para ubicaciones personalizadas y otros recursos creados en él.

Puede encontrar información general y algunos conceptos sobre esta característica en el artículo Conexión de clúster: Kubernetes habilitado para Azure Arc.

Importante

Las características en versión preliminar de Kubernetes habilitadas para Azure Arc están disponibles en autoservicio y de manera opcional. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y la garantía limitada. Las versiones preliminares de Kubernetes habilitadas para Azure Arc reciben cobertura parcial del soporte al cliente en la medida de lo posible.

Requisitos previos

  • Instale o actualice la CLI de Azure a la versión 2.16.0 o posteriores.

  • Instale la extensión connectedk8s de la CLI de Azure, versión 1.1.0 o posteriores.

    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
    
  • Un clúster conectado de Kubernetes habilitado para Azure Arc.

  • Habilite la Conexión de clúster en cualquier clúster de Kubernetes habilitado para Azure Arc; para ello, ejecute el siguiente comando en una máquina en la que el archivo kubeconfig apunte al clúster correspondiente:

    az connectedk8s enable-features --features cluster-connect -n <clusterName> -g <resourceGroupName>
    
  • Habilite los siguientes puntos de conexión, además de los que se mencionan en Conexión de un clúster de Kubernetes a Azure Arc:

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

Uso

Se admiten dos opciones de autenticación con la característica Conexión de clúster:

  • Azure Active Directory (Azure AD)
  • Token de cuenta de servicio

Opción 1: Uso de Azure Active Directory

  1. Con el archivo kubeconfig que apunta al apiserver de su clúster de Kubernetes, cree un ClusterRoleBinding o un RoleBinding para la entidad de Azure AD (entidad de servicio o usuario) que requiere acceso:

    Para el usuario:

    kubectl create clusterrolebinding admin-user-binding --clusterrole cluster-admin --user=<testuser>@<mytenant.onmicrosoft.com>
    

    Para la aplicación de Azure AD:

    1. Obtenga el objectId asociado a la aplicación de Azure AD:

      az ad sp show --id <id> --query objectId -o tsv
      
    2. Cree un ClusterRoleBinding o RoleBinding para la entidad de Azure AD (entidad de servicio o usuario) que necesita acceder a este clúster:

      kubectl create clusterrolebinding admin-user-binding --clusterrole cluster-admin --user=<objectId>
      
  2. Después de iniciar sesión en la CLI de Azure con la entidad de Azure AD correspondiente, obtenga el archivo kubeconfig de Conexión de clúster necesario para comunicarse con el clúster desde cualquier lugar (incluso desde fuera del firewall que protege al clúster):

    az connectedk8s proxy -n <cluster-name> -g <resource-group-name>
    
  3. Use kubectl para enviar solicitudes al clúster:

    kubectl get pods
    

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

Opción 2: Token de portador de la cuenta de servicio

  1. Con el archivo kubeconfig que apunta al apiserver del clúster de Kubernetes, cree una cuenta de servicio en cualquier espacio de nombres (el siguiente comando la crea en el espacio de nombres predeterminado):

    kubectl create serviceaccount admin-user
    
  2. Cree un ClusterRoleBinding o un RoleBinding para conceder a esta cuenta de servicio los permisos adecuados en el clúster:

    kubectl create clusterrolebinding admin-user-binding --clusterrole cluster-admin --serviceaccount default:admin-user
    
  3. Obtenga el token de la cuenta de servicio con los siguientes comandos.

    SECRET_NAME=$(kubectl get serviceaccount admin-user -o jsonpath='{$.secrets[0].name}')
    
    TOKEN=$(kubectl get secret ${SECRET_NAME} -o jsonpath='{$.data.token}' | base64 -d | sed $'s/$/\\\n/g')
    
  4. 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):

    az connectedk8s proxy -n <cluster-name> -g <resource-group-name> --token $TOKEN
    
  5. Use kubectl para enviar solicitudes al clúster:

    kubectl get pods
    

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

Restricciones conocidas

Cuando envíe solicitudes al clúster de Kubernetes, si la entidad Azure AD utilizada forma parte de más de 200 grupos, se presentará el siguiente error, ya que se trata de una limitación conocida:

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. 

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

Configuración de Azure AD RBAC en los clústeres