Partilhar via


Acessar a API do Kubernetes para um cluster de hub do Kubernetes Fleet Manager do Azure

Aplica-se a: ✔️ Fleet Manager com cluster de hub

Se o recurso do Azure Kubernetes Fleet Manager (Kubernetes Fleet) foi criado com um cluster de hub, você pode usá-lo para controlar centralmente cenários como a propagação de recursos do Kubernetes. Neste artigo, você aprenderá a acessar a API do Kubernetes para um cluster de hub do Kubernetes Fleet.

Antes de começar

Se seu recurso do Azure Kubernetes Fleet Manager (Kubernetes Fleet) foi criado com um cluster de hub privado, você pode usá-lo para controlar centralmente cenários como a propagação de recursos do Kubernetes. Neste artigo, você aprenderá a acessar a API do Kubernetes para um cluster de hub privado do Kubernetes Fleet com segurança usando o recurso de encapsulamento de cliente nativo do Azure Bastion.

Usar o Azure Bastion protege seu cluster de hub privado contra a exposição de pontos de extremidade ao mundo exterior, enquanto ainda fornece acesso seguro. Para obter mais informações, consulte O que é o Azure Bastion?

Antes de começar

  • Se não tiver uma conta do Azure, crie uma conta gratuita antes de começar.
  • Você precisa de um recurso da Frota do Kubernetes com um cluster de hub e clusters de membros. Se você não tiver um, consulte Criar um recurso do Azure Kubernetes Fleet Manager e ingressar em clusters de membros usando a CLI do Azure.
  • Você precisa de uma rede virtual com o host Bastion já instalado.
    • Certifique-se de ter configurado um host do Azure Bastion para a rede virtual na qual o Fleet Manager está localizado. Para configurar um host do Azure Bastion, consulte Guia de início rápido: implantar o Bastion com configurações padrão.
    • O Bastion deve ser Standard ou Premium SKU e ter o suporte nativo ao cliente habilitado nas definições de configuração.
  • A identidade (usuário ou entidade de serviço) que você está usando precisa ter:
    • Permissões Microsoft.ContainerService/fleets/listCredentials/action no recurso Kubernetes Fleet.
    • Microsoft.Network/bastionHosts/read no recurso Bastion.
    • Microsoft.Network/virtualNetworks/read na rede virtual do cluster de hub privado.

Acesse a API do Kubernetes

  1. Defina as seguintes variáveis de ambiente para sua ID de assinatura, grupo de recursos e recurso de frota do Kubernetes:

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    
  2. Defina a assinatura padrão do Azure usando o az account set comando:

    az account set --subscription ${SUBSCRIPTION_ID}
    
  3. Obtenha o arquivo kubeconfig do cluster de hub do Kubernetes Fleet usando o az fleet get-credentials comando:

    az fleet get-credentials --resource-group ${GROUP} --name ${FLEET}
    

    O resultado deverá ter um aspeto semelhante ao seguinte exemplo:

    Merged "hub" as current context in /home/fleet/.kube/config
    
  4. Defina a seguinte variável de ambiente para o FLEET_ID valor do recurso Kubernetes Fleet do cluster de hub:

    export FLEET_ID=/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${GROUP}/providers/Microsoft.ContainerService/fleets/${FLEET}
    
  5. Autorize sua identidade para acessar o cluster de hub do Kubernetes Fleet usando os comandos a seguir.

    Para a ROLE variável de ambiente, você pode usar uma das quatro definições de função internas a seguir como o valor:

    • Azure Kubernetes Fleet Manager RBAC Reader
    • Azure Kubernetes Fleet Manager RBAC Escritor
    • Azure Kubernetes Fleet Manager RBAC Admin
    • Gerente de Frota do Azure Kubernetes RBAC Administrador de Cluster
    export IDENTITY=$(az ad signed-in-user show --query "id" --output tsv)
    export ROLE="Azure Kubernetes Fleet Manager RBAC Cluster Admin"
    az role assignment create --role "${ROLE}" --assignee ${IDENTITY} --scope ${FLEET_ID}
    

    O resultado deverá ter um aspeto semelhante ao seguinte exemplo:

    {
      "canDelegate": null,
      "condition": null,
      "conditionVersion": null,
      "description": null,
      "id": "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<GROUP>/providers/Microsoft.ContainerService/fleets/<FLEET>/providers/Microsoft.Authorization/roleAssignments/<assignment>",
      "name": "<name>",
      "principalId": "<id>",
      "principalType": "User",
      "resourceGroup": "<GROUP>",
      "roleDefinitionId": "/subscriptions/<SUBSCRIPTION_ID>/providers/Microsoft.Authorization/roleDefinitions/18ab4d3d-a1bf-4477-8ad9-8359bc988f69",
      "scope": "/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<GROUP>/providers/Microsoft.ContainerService/fleets/<FLEET>",
      "type": "Microsoft.Authorization/roleAssignments"
    }
    
  1. Verifique se você pode acessar o servidor de API usando o kubectl get memberclusters comando:

    kubectl get memberclusters
    

    Se o comando for bem-sucedido, sua saída deverá ser semelhante ao exemplo a seguir:

    NAME           JOINED   AGE
    aks-member-1   True     2m
    aks-member-2   True     2m
    aks-member-3   True     2m
    
  1. Abra o túnel para o cluster de hub do seu Gestor de Frota Privada:

    export HUB_CLUSTER_ID=<hub-cluster-id-in-FL_resourceGroup>
    az network bastion tunnel --name <BastionName> --resource-group ${GROUP} --target-resource-id ${HUB_CLUSTER_ID}$ --resource-port 443 --port <LocalMachinePort>
    
  2. Em uma nova janela de terminal, conecte-se ao cluster de hub através do túnel Bastion e verifique o acesso ao servidor de API:

    kubectl get memberclusters --server=https://localhost:<LocalMachinePort>
    

    Se o comando for bem-sucedido, sua saída deverá ser semelhante ao exemplo a seguir:

    NAME           JOINED   AGE
    aks-member-1   True     2m
    aks-member-2   True     2m
    aks-member-3   True     2m