Поделиться через


Доступ к API Kubernetes для кластера Концентратора Диспетчера флота Azure Kubernetes

Область применения: ✔️ Флит-менеджер с хаб-кластером

Если ресурс Azure Kubernetes Fleet Manager (Kubernetes Fleet) был создан с кластером концентратора, его можно использовать для централизованного управления сценариями распространения ресурсов Kubernetes. В этой статье вы узнаете, как получить доступ к API Kubernetes для кластера Концентратора Парка Kubernetes.

Перед тем как начать

Если ресурс Azure Kubernetes Fleet Manager (Kubernetes Fleet) был создан с кластером частного концентратора, его можно использовать для централизованного управления сценариями распространения ресурсов Kubernetes. В этой статье вы узнаете, как получить доступ к API Kubernetes для частного кластера Kubernetes Fleet Hub безопасно с помощью функции туннелирования собственного клиента Бастиона Azure.

Использование Бастиона Azure защищает кластер частного концентратора от предоставления конечных точек внешнему миру, обеспечивая безопасный доступ. Дополнительные сведения см. в статье "Что такое Бастион Azure"?

Перед тем как начать

Доступ к API Kubernetes

  1. Задайте следующие переменные среды для идентификатора подписки, группы ресурсов и ресурса Kubernetes Fleet:

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    
  2. Задайте подписку Azure по умолчанию с помощью az account set команды:

    az account set --subscription ${SUBSCRIPTION_ID}
    
  3. Получите файл kubeconfig кластера концентратора Kubernetes Fleet с помощью az fleet get-credentials команды:

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

    Результат должен выглядеть примерно следующим образом:

    Merged "hub" as current context in /home/fleet/.kube/config
    
  4. Задайте следующую переменную среды для FLEET_ID значения ресурса Kubernetes Fleet кластера концентратора:

    export FLEET_ID=/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${GROUP}/providers/Microsoft.ContainerService/fleets/${FLEET}
    
  5. Авторизуйте удостоверение для доступа к кластеру концентратора Kubernetes Fleet с помощью следующих команд.

    Для переменной ROLE среды в качестве значения можно использовать одно из следующих четырех встроенных определений ролей:

    • Средство чтения RBAC диспетчера флота Azure Kubernetes
    • Модуль записи RBAC диспетчера флота Azure Kubernetes
    • Администратор RBAC диспетчера парка Azure Kubernetes
    • Администратор кластера RBAC диспетчера парка Azure Kubernetes
    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}
    

    Результат должен выглядеть примерно следующим образом:

    {
      "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. Убедитесь, что вы можете получить доступ к серверу API с помощью kubectl get memberclusters команды:

    kubectl get memberclusters
    

    Если команда выполнена успешно, выходные данные должны выглядеть примерно так:

    NAME           JOINED   AGE
    aks-member-1   True     2m
    aks-member-2   True     2m
    aks-member-3   True     2m
    
  1. Откройте туннель к кластеру концентратора диспетчера частного флота.

    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. В новом окне терминала подключитесь к кластеру концентратора через туннель Бастиона и проверьте доступ к серверу API:

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

    Если команда выполнена успешно, выходные данные должны выглядеть примерно так:

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