Usar o Cluster Connect para se conectar a clusters Kubernetes habilitados para o Azure Arc

Com o Cluster Connect, você pode se conectar com segurança aos clusters do Kubernetes habilitados para o Azure Arc sem exigir que nenhuma porta de entrada seja habilitada no firewall.

O acesso ao apiserver do cluster Kubernetes habilitado para o Azure Arc possibilita os seguintes cenários:

  • Depuração interativa e solução de problemas.
  • Acesso de cluster aos serviços do Azure para locais personalizados e outros recursos criados sobre ele.

Uma visão geral conceitual desse recurso está disponível em Conexões de cluster – Kubernetes habilitado para Azure Arc.

Pré-requisitos

  • Uma conta do Azure com uma assinatura ativa. Crie uma conta gratuitamente.

  • Instale ou atualize a CLI do Azure para a versão >= 2.16.0.

  • Instale a extensão connectedk8s da CLI do Azure, com versão >= 1.2.5:

    az extension add --name connectedk8s
    

    Se você já tiver instalado a connectedk8s extensão, atualize a extensão para a versão mais recente:

    az extension update --name connectedk8s
    
  • Um cluster conectado do Kubernetes habilitado para Azure Arc.

  • Os pontos de extremidade a seguir precisam ser habilitados para acesso de saída além daqueles mencionados em conectando um cluster Kubernetes ao Azure Arc:

    Ponto de extremidade Porta
    *.servicebus.windows.net 443
    guestnotificationservice.azure.com, *.guestnotificationservice.azure.com 443
  • Substitua os espaços reservados e execute o comando abaixo para definir as variáveis de ambiente usadas neste 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)
    

Habilitar o recurso Cluster Connect

Você pode habilitar o Cluster Connect em qualquer cluster Kubernetes habilitado para o Azure Arc executando o seguinte comando em um computador em que o arquivo kubeconfig é apontado para o cluster de interesse:

az connectedk8s enable-features --features cluster-connect -n $CLUSTER_NAME -g $RESOURCE_GROUP

Opção de autenticação do Azure Active Directory

  1. Obtenha o objectId associado à sua entidade do Azure AD.

    • Para uma conta de usuário do Azure AD:

      AAD_ENTITY_OBJECT_ID=$(az ad signed-in-user show --query objectId -o tsv)
      
    • Para um aplicativo do AD do Azure:

      AAD_ENTITY_OBJECT_ID=$(az ad sp show --id <id> --query objectId -o tsv)
      
  2. Autorize a entidade com as devidas permissões.

    • Se você estiver usando o ClusterRoleBinding ou RoleBinding nativo do Kubernetes para verificações de autorização no cluster, com o arquivo kubeconfig apontando para o apiserver de seu cluster para acesso direto, você poderá criar um mapeamento para a entidade do Azure AD (entidade de serviço ou usuário) que precisa acessar esse cluster. Exemplo:

      kubectl create clusterrolebinding admin-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_OBJECT_ID
      
    • Se estiver usando o RBAC do Azure para verificações de autorização no cluster, você poderá criar uma atribuição de função do Azure mapeada para a entidade do Azure AD. Exemplo:

      az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee $AAD_ENTITY_OBJECT_ID --scope $ARM_ID_CLUSTER
      

opção de autenticação de token da conta de serviço

  1. Com o kubeconfig arquivo apontando para o apiserver do seu cluster Kubernetes, crie uma conta de serviço em qualquer namespace (o comando a seguir a cria no namespace padrão):

    kubectl create serviceaccount admin-user
    
  2. Crie o ClusterRoleBinding ou RoleBinding para conceder a essa conta de serviço as permissões apropriadas no cluster. Exemplo:

    kubectl create clusterrolebinding admin-user-binding --clusterrole cluster-admin --serviceaccount default:admin-user
    
  3. Obtenha o token da conta de serviço usando os seguintes 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')
    

Acessar o cluster

  1. Configure o kubeconfig baseado no Cluster Connect necessário para acessar o cluster com base na opção de autenticação usada:

    • Se estiver usando a opção de autenticação do Azure Active Directory, depois de fazer logon na CLI do Azure usando a entidade de interesse do Azure AD, obtenha o kubeconfig do Cluster Connect necessário para se comunicar com o cluster em qualquer lugar (até mesmo de fora do firewall que protege o cluster):

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • Se estiver usando a opção de autenticação de conta de serviço, obtenha o kubeconfig do Cluster Connect necessário para se comunicar com o cluster em qualquer lugar:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP --token $TOKEN
      
  2. Use kubectl para enviar solicitações ao cluster:

    kubectl get pods
    

Agora você deve ver uma resposta do cluster que contém a lista de todos os pods no default namespace.

Limitações conhecidas

Ao fazer solicitações ao cluster Kubernetes, se a entidade do Azure AD usada for parte de mais de 200 grupos, o seguinte erro será observado, pois essa é uma limitação conhecida:

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 passar por esse erro:

  1. Crie uma entidade de serviço, que é menos provável que seja membro de mais de 200 grupos.
  2. Entre na CLI do Azure com a entidade de serviço antes de executar o comando az connectedk8s proxy.

Próximas etapas