Partilhar via


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

Com a conexão de cluster, você pode se conectar com segurança a clusters Kubernetes habilitados para Azure Arc de qualquer lugar sem exigir que nenhuma porta de entrada seja habilitada no firewall.

O apiserver acesso ao cluster do Kubernetes habilitado para Azure Arc habilita 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, revise a visão geral conceitual do recurso de conexão de cluster.

Pré-requisitos

  • Uma conta do Azure com uma subscrição ativa. Crie uma conta gratuitamente.

  • Um cluster conectado ao Kubernetes habilitado para Azure Arc existente.

  • Habilite os requisitos de rede para Kubernetes habilitado para Arc

  • Habilite estes pontos de extremidade para acesso de saída:

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

    Nota

    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 deve ser especificada para o <location> espaço reservado.

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
  • Instale ou atualize a CLI do Azure para a versão mais recente.

  • Instale a versão mais recente da extensão CLI do connectedk8s Azure:

    az extension add --name connectedk8s
    

    Se já tiver instalado a connectedk8s extensão, atualize-a 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)
    

Configurar a autenticação

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

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

  1. Obtenha o objectId associado à sua entidade Microsoft Entra. Se você estiver usando uma única conta de usuário, obtenha o nome principal do usuário (UPN) associado à sua entidade do Microsoft Entra.

    • Para uma conta de grupo do Microsoft Entra:
     AAD_ENTITY_ID=$(az ad signed-in-user show --query id -o tsv)
    
    • Para uma conta de usuário único do Microsoft Entra:

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

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

    • Se você estiver usando ClusterRoleBinding ou RoleBinding nativo do Kubernetes para verificações de autorização no cluster, com o kubeconfig arquivo apontando para o apiserver do cluster para acesso direto, poderá criar um mapeado para a entidade 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_ID
      
    • Se você estiver usando o RBAC do Azure para verificações de autorização no cluster, poderá criar uma atribuição de função do Azure aplicável mapeada para a entidade Microsoft Entra. Por exemplo:

      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
      

Opção de autenticação de token de conta de serviço

  1. Com o kubeconfig arquivo apontando para o apiserver 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 esta 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. Crie um token de 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 saída para o console

    echo $TOKEN
    

Aceder ao cluster a partir de um dispositivo cliente

Agora você pode acessar o cluster de um cliente diferente. Execute as seguintes etapas em outro dispositivo cliente.

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

  2. Obtenha a conexão kubeconfig de cluster necessária para se comunicar com o cluster de qualquer lugar (mesmo fora do firewall ao redor 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 de conta de serviço:

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

      Nota

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

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

    kubectl get pods -A
    

Agora você deve ver uma resposta do cluster contendo a lista de todos os pods sob o default namespace.

Limitações conhecidas

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

Ao fazer solicitações para o cluster Kubernetes, se a entidade 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.

Esta é uma limitação conhecida. Para ultrapassar este erro:

  1. Crie uma entidade de serviço, que tem menos probabilidade de ser membro de mais de 200 grupos.
  2. Entre na CLI do Azure com a entidade de serviço antes de executar o az connectedk8s proxy comando.

Próximos passos