根据你作为群集操作员或开发人员的角色,你可以在 AKS 桌面中为开发人员提供环境(Project),以便开发人员部署、迁移或管理应用程序,或者允许他们在专用 AKS 群集上自行部署和管理应用程序。 或者,你可能希望向更多开发人员授予对应用程序进行管理、观察和故障排除的权限。
默认情况下,在 AKS 桌面中创建项目时,可以与组织中的其他人共享此项目,并为你设置权限。 但是,可能需要随时间推移维护权限,或者通过设置适当的权限来自动执行权限或定义操作模型。
本文介绍如何管理 RBAC 权限,使团队成员能够使用 AKS 桌面版。
注释
AKS 桌面当前不提供 UI 选项,用于在创建后修改项目权限。 若要在创建项目后更新权限或授予对其他用户的访问权限,请使用本文中所述的 Azure 门户或 Azure CLI。
注释
在 AKS 桌面中创建项目时, AKS 托管命名空间 在群集所在的资源组中创建。
先决条件
- 一份 Azure 订阅。 如果没有 Azure 订阅,可以创建免费的 Azure 帐户。
- 安装并配置 Azure CLI 2.64.0 或更高版本。 使用
az --version命令查看版本。 若要安装或升级,请参阅安装 Azure CLI。 - 这是
aks-previewAzure CLI 扩展。 使用az extension add --name aks-preview命令安装它。 - 基本了解 Azure 基于角色的访问控制( RBAC),请参阅什么是 Azure RBAC? 和 Azure 内置角色。
- 一个 Azure 资源组,其中包含 AKS 群集和通过 AKS 桌面创建的任何 AKS 托管项目。
- 满足 AKS 桌面要求的 AKS 标准群集 ,即运行应用程序的 Kubernetes 群集。
- 用于存储用于部署的容器映像的 Azure 容器注册表(ACR )。
群集操作员职责
作为群集操作员,你负责预配和配置基础基础结构,使开发团队能够生成和部署应用程序。 你的职责包括:
- 创建所需的 Azure 基础结构(资源组、AKS 群集、ACR)。
- 配置 ACR 与 AKS 群集的集成。
- 为用户分配创建 Projects 的权限。
- (可选)将权限管理委派给 Project 创建者。
创建基础结构和资源
若要创建基础结构资源,需要有权在 Azure 中创建资源。 如果未分配 “所有者 RBAC”角色,则需要 “参与者” 角色来创建资源和 “用户访问管理员 ”角色以向其他用户分配权限。 向用户分配权限,以便他们可以使用以下步骤在资源组中创建资源:
为资源组和群集名称设置环境变量。 请确保将占位符替换为实际的资源组和集群名称。
export RESOURCE_GROUP=<infra-resource-group> export CLUSTER_NAME=<cluster-name> export SUBSCRIPTION_ID=$(az account show --query id --output tsv) export ACR_NAME=<acr-name>分配必要的角色,以使用
az role assignment create命令在资源组中创建资源。 确保将<user-id>替换为相应的用户或服务主体 ID。az role assignment create --role "Contributor" \ --assignee <user-id> \ --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP
将 ACR 与 AKS 群集集成
使用 az aks update 命令将 Azure 容器注册表附加到 AKS 群集。
az aks update \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--attach-acr $ACR_NAME
选择项目创建模型
作为群集操作员,有两个选项可用于开发人员如何在 AKS 桌面中使用 Projects:
- 自助服务模型:开发人员创建和管理自己的项目。 此方法为开发人员提供完全自治,但需要向他们授予 Azure Kubernetes 服务命名空间参与者 角色。 当开发人员创建自己的项目时,他们会自动在托管命名空间上接收 “所有者” 角色,并且可以立即开始部署应用程序。
- 托管模型:为开发人员创建项目并向其授予访问权限。 目前,可以在创建项目期间配置此配置。 此方法可更好地控制项目创建,但如果需要将更多团队成员分配到 Project 创建后,需要使用 Azure 门户或 Azure CLI 为其分配必要的权限,如后续部分所述。
自助服务模型:允许开发人员创建自己的项目
若要允许开发人员创建自己的项目,请在 AKS 群集上为其分配 Azure Kubernetes 服务命名空间参与者 角色。 AKS 桌面项目在后台创建 AKS 托管命名空间 ,此角色授予必要的权限。
使用命令为开发人员分配 az role assignment create角色。 请确保将占位符替换为相应的用户或服务主体 ID。
az role assignment create \
--role "Azure Kubernetes Service Namespace Contributor" \
--assignee <developer-user-id> \
--scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedClusters/$CLUSTER_NAME
托管模型:为开发人员创建项目并分配访问权限
如果希望代表开发人员创建项目,则必须分配三个基本角色,使其能够访问群集并在分配的命名空间内工作:
-
Azure Kubernetes 服务群集用户角色:允许开发人员使用
az aks get-credentials命令下载群集凭据。 - Azure Kubernetes 服务命名空间用户:授予对托管命名空间的访问权限。
- Kubernetes RBAC 角色之一(读者、 写者或 管理员):控制他们可以在命名空间中执行的操作。
开发人员需要这三个角色才能在 AKS 桌面中成功访问和使用其项目。 如果没有 Azure Kubernetes 服务群集用户角色,开发人员无法下载连接到群集所需的 kubeconfig 文件。
分配群集访问权限
分配 Azure Kubernetes 服务群集用户角色 ,以使用 az role assignment create 命令启用 kubeconfig 下载。 请确保将占位符替换为相应的用户或服务主体 ID。
az role assignment create \
--role "Azure Kubernetes Service Cluster User Role" \
--assignee <developer-user-id> \
--scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedClusters/$CLUSTER_NAME
分配命名空间访问权限
使用命令为特定 Project/namespace 分配 az role assignment create角色。 请确保将占位符替换为相应的用户或服务主体 ID。
export NAMESPACE_NAME=<namespace-or-project-name>
az role assignment create \
--role "Azure Kubernetes Service Namespace User" \
--assignee <developer-user-id> \
--scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedClusters/$CLUSTER_NAME/namespaces/$NAMESPACE_NAME
分配 Kubernetes RBAC 角色
根据开发人员需要执行的操作分配适当的 Kubernetes RBAC 角色:
- 用于只读访问的 Azure Kubernetes 服务 RBAC 读取者角色。
- 用于部署应用程序的 Azure Kubernetes 服务 RBAC 编写器。
- 用于完全管理控制的 Azure Kubernetes 服务 RBAC 管理员角色。
使用
az aks show命令获取 AKS 群集 ID。AKS_ID=$(az aks show \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --query id \ --output tsv)使用
az role assignment create命令分配相应的 Kubernetes RBAC 角色。 请确保将占位符替换为相应的用户或服务主体 ID。 以下示例分配 Azure Kubernetes 服务 RBAC 写入者角色:az role assignment create \ --role "Azure Kubernetes Service RBAC Writer" \ --assignee <developer-user-id> \ --scope $AKS_ID/namespaces/$NAMESPACE_NAME
允许项目创建者分配访问权限(可选)
如果希望 Project 创建者能够向其他用户分配访问权限,请向他们授予 “用户访问管理员 ”角色。 此权限允许用户设置对基础结构资源组中的任何资源的权限。
使用命令分配az role assignment create角色。 请确保将占位符替换为相应的用户或服务主体 ID。
az role assignment create \
--role "User Access Administrator" \
--assignee <user-id> \
--scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP
开发人员职责
作为开发人员,可以在现有的 AKS 桌面环境中部署应用程序、管理项目和监视工作负荷。 群集操作员授予执行这些任务所需的权限。 你的职责包括:
- 将应用程序部署到 Projects 中。
- 查看和管理已部署的应用程序。
- 监视应用程序指标和日志。
- 修改项目访问权限(如果需要)。
开发人员所需的用户角色
若要以开发人员身份使用 AKS 桌面,群集操作员必须分配三个基本角色:
Azure Kubernetes 服务群集用户角色:允许使用
az aks get-credentials命令下载群集凭据,这是从本地计算机或通过 AKS 桌面连接到群集的要求。Azure Kubernetes 服务命名空间用户:授予对分配的托管命名空间/项目的访问权限。
Kubernetes RBAC 角色之一(读取者、写入者或管理员):
- 用于只读访问的 Azure Kubernetes 服务 RBAC 读取者角色。
- 用于部署应用程序的 Azure Kubernetes 服务 RBAC 编写器。
- 用于完全管理控制的 Azure Kubernetes 服务 RBAC 管理员角色。
如何分配权限
根据如何在 AKS 桌面中创建项目来分配权限:
项目创建者:自动接收托管命名空间上的 所有者 角色以及部署应用程序所需的所有权限。
其他用户:必须由群集操作员或 Project 创建者授予访问权限。 他们会收到:
- 群集上的 Azure Kubernetes 服务群集用户角色 。
- 命名空间中的 Azure Kubernetes 服务命名空间用户 角色。
- Kubernetes RBAC 角色之一(读取者、 编写者或 管理员)。
若要部署应用程序,需要 “编写者 ”或 “管理员 ”角色。 有关详细信息,请参阅托管命名空间内置角色。
查看应用程序指标
注释
部署应用程序后,指标最多可能需要 10 分钟才能填充。
在 Project 主屏幕中,可以查看应用程序的指标,例如 CPU、内存和网络使用情况。 这些指标由 Azure Monitor 工作区支持的托管 Prometheus 终结点提供。
若要查看指标,需要在 Azure Monitor 工作区上具有 “监视数据读取者 ”角色。 此角色授予对群集的所有指标的访问权限,而不仅仅是特定项目。
群集操作员可以使用以下步骤分配此权限:
使用
az alerts-management prometheus-rule-group list命令标识群集使用的 Azure Monitor 工作区。export WORKSPACE_ACC_FOR_PROM_RULES=$(az alerts-management prometheus-rule-group list \ --resource-group "$RESOURCE_GROUP" \ --query "[?clusterName=='$CLUSTER_NAME'] | [0].scopes[0]" \ --output tsv)使用命令分配
az role assignment create角色。 请确保将占位符替换为相应的用户或服务主体 ID。az role assignment create \ --role "Monitoring Data Reader" \ --assignee <user-id> \ --scope $WORKSPACE_ACC_FOR_PROM_RULES
修改项目访问权限
目前,AKS 桌面不提供在创建后修改项目权限的 UI 选项。 如果需要更新权限或授予对其他人的访问权限,请与群集操作员合作,使用 Azure 门户或 Azure CLI 更新权限。 以下步骤概述了如何使用 Azure CLI 分配必要的角色:
分配群集访问权限
分配 Azure Kubernetes 服务群集用户角色 ,以使用 az role assignment create 命令启用 kubeconfig 下载。 请确保将占位符替换为相应的用户或服务主体 ID。
az role assignment create \
--role "Azure Kubernetes Service Cluster User Role" \
--assignee <developer-user-id> \
--scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedClusters/$CLUSTER_NAME
分配命名空间访问权限
使用命令为特定 Project/namespace 分配 az role assignment create角色。 请确保将占位符替换为相应的用户或服务主体 ID。
export NAMESPACE_NAME=<namespace-or-project-name>
az role assignment create \
--role "Azure Kubernetes Service Namespace User" \
--assignee <developer-user-id> \
--scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.ContainerService/managedClusters/$CLUSTER_NAME/namespaces/$NAMESPACE_NAME
分配 Kubernetes RBAC 角色
根据开发人员需要执行的操作分配适当的 Kubernetes RBAC 角色:
- 用于只读访问的 Azure Kubernetes 服务 RBAC 读取者角色。
- 用于部署应用程序的 Azure Kubernetes 服务 RBAC 编写器。
- 用于完全管理控制的 Azure Kubernetes 服务 RBAC 管理员角色。
使用
az aks show命令获取 AKS 群集 ID。AKS_ID=$(az aks show \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --query id \ --output tsv)使用
az role assignment create命令分配相应的 Kubernetes RBAC 角色。 请确保将占位符替换为相应的用户或服务主体 ID。 以下示例分配 Azure Kubernetes 服务 RBAC 写入者角色:az role assignment create \ --role "Azure Kubernetes Service RBAC Writer" \ --assignee <developer-user-id> \ --scope $AKS_ID/namespaces/$NAMESPACE_NAME
授予查看指标的权限(可选)
若要授予查看指标的权限,请按照 “查看应用程序指标 ”部分中的步骤作。