你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于: ✔️具有中心群集的 Fleet Manager
如果你的 Azure Kubernetes 舰队管理器(Kubernetes 舰队)资源是使用中心群集创建的,那么你可将其用于集中控制 Kubernetes 资源传播等方案。 在本文中,你将了解如何访问 Kubernetes 舰队中心群集的 Kubernetes API。
在您开始之前
- 如果没有 Azure 帐户,请在开始前创建一个免费帐户。
- 你需要有包括中心群集和成员群集的 Kubernetes 舰队资源。 如果没有,请参阅使用 Azure CLI 创建 Azure Kubernetes 舰队管理器资源并加入成员群集。
- 使用的标识(用户或服务主体)需要在 Kubernetes 舰队资源上具有 Microsoft.ContainerService/fleets/listCredentials/action 权限。
如果 Azure Kubernetes Fleet Manager (Kubernetes Fleet) 资源是使用专用中心群集创建的,则可以使用它集中控制 Kubernetes 资源传播等方案。 本文介绍如何使用 Azure Bastion 的本机客户端隧道功能安全地访问专用 Kubernetes 机群中心群集的 Kubernetes API。
使用 Azure Bastion 可保护专用枢纽群集,防止向外部公开端点,同时仍提供安全访问。 有关详细信息,请参阅 什么是 Azure Bastion?
在您开始之前
- 如果没有 Azure 帐户,请在开始前创建一个免费帐户。
- 你需要有包括中心群集和成员群集的 Kubernetes 舰队资源。 如果没有,请参阅使用 Azure CLI 创建 Azure Kubernetes 舰队管理器资源并加入成员群集。
- 需要一个已经安装了 Bastion 主机的虚拟网络。
- 确保已为舰队管理器所在的虚拟网络设置 Azure Bastion 主机。 若要设置 Azure Bastion 主机,请参阅 快速入门:使用默认设置部署 Bastion。
- Bastion 必须是标准或高级 SKU,并在配置设置下启用本机客户端支持。
- 使用的身份(用户或服务主体)需要具备以下内容:
- 针对 Kubernetes Fleet 资源的 Microsoft.ContainerService/fleets/listCredentials/action 权限。
- 针对 Bastion 资源的 Microsoft.Network/bastionHosts/read。
- 针对专用中心群集的虚拟网络的 Microsoft.Network/virtualNetworks/read。
访问 Kubernetes API
为订阅 ID、资源组和 Kubernetes 舰队资源设置以下环境变量:
export SUBSCRIPTION_ID=<subscription-id> export GROUP=<resource-group-name> export FLEET=<fleet-name>使用
az account set命令设置默认 Azure 订阅:az account set --subscription ${SUBSCRIPTION_ID}使用
az fleet get-credentials命令获取 Kubernetes 舰队中心群集的 kubeconfig 文件:az fleet get-credentials --resource-group ${GROUP} --name ${FLEET}输出应类似于以下示例:
Merged "hub" as current context in /home/fleet/.kube/config为中心群集的 Kubernetes 舰队资源的
FLEET_ID值设置以下环境变量:export FLEET_ID=/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${GROUP}/providers/Microsoft.ContainerService/fleets/${FLEET}使用以下命令授权标识访问 Kubernetes 舰队中心群集。
对于
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" }
验证是否可以使用
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
打开专用舰队管理器中心群集的隧道:
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>在新终端窗口中,通过 Bastion 隧道连接到中心群集并验证 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