Usar a conexão de cluster para se conectar com segurança a clusters do Kubernetes habilitados para o Azure Arc

Com a conexão de cluster, você pode se conectar com segurança aos clusters do Kubernetes habilitados para Azure Arc de qualquer lugar sem precisar habilitar as portas de entrada 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.

Antes de começar, examine a visão geral conceitual do recurso de conexão de cluster.

Pré-requisitos

  • Instale ou atualize a CLI do Azure para a última versão.

  • Instale a última versão da extensão connectedk8s da CLI do Azure:

    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
    
  • 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)
    
  • Além de atender aos requisitos de rede para o Kubernetes habilitado para Arc, habilite esses pontos de extremidade para acesso de saída:

    Ponto de extremidade Porta
    *.servicebus.windows.net 443
    guestnotificationservice.azure.com, *.guestnotificationservice.azure.com 443

    Observação

    Para traduzir o curinga *.servicebus.windows.net em pontos de extremidade específicos, use o comando \GET https://guestnotificationservice.azure.com/urls/allowlist?api-version=2020-01-01&location=<location>. Dentro desse comando, a região precisa ser especificada para o espaço reservado <location>.

Para obter o segmento de região de um ponto de extremidade regional, remova todos os espaços do nome da região do Azure. Por exemplo, região Leste dos EUA 2, o nome da região é eastus2.

Por exemplo: *.<region>.arcdataservices.com deve estar *.eastus2.arcdataservices.com na região Leste dos EUA 2.

Para ver uma lista de todas as regiões, execute este comando:

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

Configurar a autenticação

No cluster habilitado para Arc existente, crie o ClusterRoleBinding com a autenticação do Microsoft Entra ou um token de conta de serviço.

Opção de autenticação do Microsoft Entra

  1. Obtenha o objectId associado à sua entidade do Microsoft Entra.

    • Para uma conta de usuário do Microsoft Entra:

      AAD_ENTITY_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
      
    • Para um aplicativo do Microsoft Entra:

      AAD_ENTITY_OBJECT_ID=$(az ad sp show --id <id> --query id -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 do cluster para acesso direto, você poderá criar um mapeado para a entidade do Microsoft Entra (entidade de serviço ou usuário) que precisa acessar esse cluster. Por exemplo:

      kubectl create clusterrolebinding demo-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 Microsoft Entra. Por exemplo:

      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
      

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

  1. Com o arquivo kubeconfig apontando para o apiserver do cluster do Kubernetes, execute este comando para criar uma conta de serviço. Este exemplo cria a conta de serviço no namespace padrão, mas você pode substituir qualquer outro namespace por default.

    kubectl create serviceaccount demo-user -n default
    
  2. Crie ClusterRoleBinding para conceder a essa conta de serviço as permissões apropriadas no cluster. Se você usou um namespace diferente no primeiro comando, substitua-o aqui por default.

    kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
    
  3. Criar token da conta de serviço:

    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. Obter o token para encaminhar a saída para o console

    echo $TOKEN
    

Acessar seu cluster de um dispositivo cliente

Agora você pode acessar o cluster por meio de um cliente diferente. Execute as etapas a seguir em outro dispositivo cliente.

  1. Entre usando a autenticação do Microsoft Entra ou a autenticação de token da conta de serviço.

  2. Obtenha a conexão de cluster kubeconfig necessária para se comunicar com o cluster de qualquer lugar (até mesmo de fora do firewall em torno do cluster), com base na opção de autenticação usada:

    • Se estiver usando a autenticação do Microsoft Entra:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • Se estiver usando a autenticação de token da conta de serviço:

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

      Observação

      Esse comando abrirá o proxy e bloqueará o shell atual.

  3. Em uma sessão de shell diferente, use kubectl para enviar solicitações ao cluster:

    kubectl get pods -A
    

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

Limitações conhecidas

Use az connectedk8s show para verificar a versão do agente de Kubernetes habilitado para Arc.

Ao fazer solicitações ao cluster do Kubernetes, se a entidade do Microsoft Entra usada fizer parte de mais de 200 grupos, você poderá ver o seguinte erro:

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.

Essa é uma limitação conhecida. 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