共用方式為


存取適用於 Azure Kubernetes 機群管理員中樞叢集的 Kubernetes API

適用於: ✔️ 使用中樞叢集的車隊管理器

如果您的 Azure Kubernetes 機群管理員 (Kubernetes 機群) 資源是使用中樞叢集建立的,您可以使用它集中控制 Kubernetes 資源傳播等案例。 在本文中,您將了解如何存取適用於 Kubernetes 機群中樞叢集的 Kubernetes API。

開始之前

如果您的 Azure Kubernetes 叢集管理員 (Kubernetes 叢集) 資源是使用私人中樞叢集建立,您可以使用它來集中控制 Kubernetes 資源傳播等案例。 在本文中,您將瞭解如何使用 Azure Bastion 的原生用戶端通道功能,安全地存取私人 Kubernetes 叢集中樞叢集的 Kubernetes API。

使用 Azure Bastion 可保護您的私人中樞叢集免於將端點公開給外部世界,同時仍提供安全存取。 如需詳細資訊,請參閱 什麼是 Azure Bastion?

開始之前

  • 如果您沒有 Azure 帳戶,請在開始之前建立 免費帳戶
  • 您需要具有中樞叢集和成員叢集的 Kubernetes 機群資源。 如果沒有,請參閱使用 Azure CLI 建立 Azure Kubernetes 機群管理員資源並加入成員叢集
  • 您需要已安裝堡壘主機(Bastion Host)的虛擬網路。
    • 請確定您已為叢集管理員所在的虛擬網路設定 Azure 堡壘主機。 若要設定 Azure 堡壘主機,請參閱 快速入門:使用預設設定部署堡壘主機
    • Bastion 主機必須是標準或進階 SKU,並已在組態設定下啟用原生用戶端支援。
  • 您使用的身分識別 (使用者或服務主體) 必須具有:
    • Kubernetes 機群資源上的 Microsoft.ContainerService/fleets/listCredentials/action 權限。
    • Bastion 資源上的 Microsoft.Network/bastionHosts/read。
    • 私人中樞叢集之虛擬網路上的 Microsoft.Network/virtualNetworks/read。

存取 Kubernetes API

  1. 為您的訂用帳戶識別碼、資源群組和 Kubernetes 機群資源設定下列環境變數:

    export SUBSCRIPTION_ID=<subscription-id>
    export GROUP=<resource-group-name>
    export FLEET=<fleet-name>
    
  2. 使用 az account set 命令 (部分機器翻譯) 設定預設 Azure 訂用帳戶:

    az account set --subscription ${SUBSCRIPTION_ID}
    
  3. 使用 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
    
  4. 針對中樞叢集 Kubernetes 機群資源的 FLEET_ID 值設定下列環境變數:

    export FLEET_ID=/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${GROUP}/providers/Microsoft.ContainerService/fleets/${FLEET}
    
  5. 使用下列命令授權您的身分識別以存取 Kubernetes 機群中樞叢集。

    針對 ROLE 環境變數,您可以使用下列四個內建角色定義之一做為值:

    • Azure Kubernetes 機群管理員 RBAC 讀取者
    • Azure Kubernetes 機群管理員 RBAC 編寫器
    • Azure Kubernetes 機群管理員 RBAC 管理員
    • Azure Kubernetes 機群管理員 RBAC 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}
    

    輸出看起來應類似下列範例:

    {
      "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. 使用 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
    
  1. 開啟通往 Private Fleet Manager 中樞叢集的通道:

    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