使用 Azure Kubernetes 舰队管理器访问舰队资源的 Kubernetes API

如果创建 Azure Kubernetes 舰队管理器资源时启用了中心群集,则可将其用于集中控制 Kubernetes 资源传播等方案。 本文介绍如何访问由舰队资源管理的中心群集的 Kubernetes API。

先决条件

如果没有 Azure 试用版订阅,请在开始前创建一个试用版订阅

  • 必须具有包含一个中心群集和多个成员群集的舰队资源。 如果没有此资源,请按照快速入门:创建舰队资源并加入成员群集进行操作。
  • 使用的标识(用户或服务主体)需要在舰队资源上具有 Microsoft.ContainerService/fleets/listCredentials/action。

访问舰队资源群集的 Kubernetes API

  1. 为订阅 ID、资源组和舰队资源设置以下环境变量,并使用 az account set 命令设置要使用的默认 Azure 订阅。

    export SUBSCRIPTION_ID=<subscription-id>
    az account set --subscription ${SUBSCRIPTION_ID}
    
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    
  2. 使用 az fleet get-credentials 命令获取中心群集舰队资源的 kubeconfig 文件。

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

    输出应类似于以下示例输出:

    Merged "hub" as current context in /home/fleet/.kube/config
    
  3. 为中心群集舰队资源的 id 设置以下环境变量:

    export FLEET_ID=/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${GROUP}/providers/Microsoft.ContainerService/fleets/${FLEET}
    
  4. 使用以下命令将标识授权到中心群集舰队资源的 Kubernetes API 服务器:

    对于 ROLE 环境变量,可以使用以下四个内置角色定义之一作为值:

    • Azure Kubernetes 舰队管理器 RBAC 读者
    • Azure Kubernetes 舰队管理器 RBAC 编写者
    • Azure Kubernetes 舰队管理器 RBAC 管理员
    • Azure Kubernetes 舰队管理器 RBAC 群集管理员
    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"
    }
    
  5. 验证是否可以使用 kubectl get memberclusters 命令访问 API 服务器。

    kubectl get memberclusters
    

    如果成功,输出应类似于以下示例输出:

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

后续步骤

  • 查看所有舰队自定义资源的 API 规范
  • 查看我们的故障排除指南,以帮助解决与舰队 API 相关的常见问题。