分享方式:


使用叢集連線以安全地連線到已啟用 Azure Arc 的 Kubernetes 叢集

使用叢集連線,您可以從任何地方安全地連線至已啟用 Azure Arc 的 Kubernetes 叢集,而無須在防火牆上啟用任何輸入連接埠。

存取已啟用 Azure Arc 的 Kubernetes 叢集的 apiserver,可啟用下列案例:

  • 互動式偵錯與疑難排解。
  • 針對自訂位置和在其頂端建立的其他資源進行 Azure 服務的叢集存取。

開始之前,請檢閱叢集連線功能的概念概觀

必要條件

  • 安裝 Azure CLI 或將其更新至最新版本。

  • 安裝最新版的 connectedk8s Azure CLI 延伸模組:

    az extension add --name connectedk8s
    

    如果您已安裝 connectedk8s 延伸模組,請將此延伸模組更新至最新版本:

    az extension update --name connectedk8s
    
  • 取代預留位置,並執行下列命令來設定本文件中使用的環境變數:

    CLUSTER_NAME=<cluster-name>
    RESOURCE_GROUP=<resource-group-name>
    ARM_ID_CLUSTER=$(az connectedk8s show -n $CLUSTER_NAME -g $RESOURCE_GROUP --query id -o tsv)
    
  • 除了符合已啟用 Arc 的 Kubernetes 網路需求之外,請啟用這些端點以進行輸出存取:

    端點 連接埠
    *.servicebus.windows.net 443
    guestnotificationservice.azure.com, *.guestnotificationservice.azure.com 443

    注意

    若要將 *.servicebus.windows.net 萬用字元轉譯為特定端點,請使用命令 \GET https://guestnotificationservice.azure.com/urls/allowlist?api-version=2020-01-01&location=<location>。 在此命令內,必須指定 <location> 預留位置的區域。

若要取得區域端點的區域區段,請移除 Azure 區域名稱中的所有空格。 例如,美國東部 2 區域,區域名稱為 eastus2

例如:在美國東部 2 區域中,*.<region>.arcdataservices.com 應為 *.eastus2.arcdataservices.com

若要查看所有區域的清單,請執行此命令:

az account list-locations -o table
Get-AzLocation | Format-Table

設定驗證

在已啟用 Arc 的現有叢集上,使用 Microsoft Entra 驗證或服務帳戶令牌來建立 ClusterRoleBinding。

Microsoft Entra 驗證選項

  1. 取得與您的 Microsoft Entra 實體相關聯的 objectId。 如果您使用單一使用者帳戶,請取得與您的 Microsoft Entra 實體相關聯的用戶主體名稱 (UPN)。

    • 針對Microsoft Entra 群組帳戶:
     AAD_ENTITY_ID=$(az ad signed-in-user show --query id -o tsv)
    
    • 針對 Microsoft Entra 單一用戶帳戶:

      AAD_ENTITY_ID=$(az ad signed-in-user show --query userPrincipalName -o tsv)
      
    • 針對 Microsoft Entra 應用程式:

      AAD_ENTITY_ID=$(az ad sp show --id <id> --query id -o tsv)
      
  2. 授與實體適當的權限。

    • 如果您是使用 Kubernetes 原生 ClusterRoleBinding 或 RoleBinding,對叢集進行授權檢查,而 kubeconfig 檔案指向叢集的 apiserver 以進行直接存取,則您可以建立一個角色,對應至需要存取此叢集的 Microsoft Entra 實體 (服務主體或使用者)。 例如:

      kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_ID
      
    • 如果您使用 Azure RBAC 在叢集上進行授權檢查,您可以建立對應至 Microsoft Entra 實體的適用 Azure 角色指派。 例如:

      az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee $AAD_ENTITY_ID --scope $ARM_ID_CLUSTER
      az role assignment create --role "Azure Arc Enabled Kubernetes Cluster User Role" --assignee $AAD_ENTITY_ID --scope $ARM_ID_CLUSTER
      

服務帳戶權杖驗證選項

  1. 使用指向 Kubernetes 叢集 apiserverkubeconfig 檔案,執行此命令來建立服務帳戶。 此範例會在預設命名空間中建立服務帳戶,但您可以將任何其他命名空間取代為 default

    kubectl create serviceaccount demo-user -n default
    
  2. 建立 ClusterRoleBinding,以將叢集的適當權限授與此服務帳戶。 如果您在第一個指令中使用不同的命名空間,請將其取代為 default

    kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
    
  3. 建立服務帳戶權杖:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: Secret
    metadata:
      name: demo-user-secret
      annotations:
        kubernetes.io/service-account.name: demo-user
    type: kubernetes.io/service-account-token
    EOF
    
    TOKEN=$(kubectl get secret demo-user-secret -o jsonpath='{$.data.token}' | base64 -d | sed 's/$/\n/g')
    
  4. 取得權杖以輸出至主控台

    echo $TOKEN
    

從用戶端裝置存取您的叢集

現在,您可以從不同的用戶端存取叢集。 在另一個用戶端裝置上執行下列步驟。

  1. 使用 Microsoft Entra 驗證或服務帳戶權杖驗證登入。

  2. 根據使用的驗證選項,取得叢集連線 kubeconfig 需要從任何地方與叢集通訊 (從叢集周圍的防火牆外部) 進行通訊:

    • 如果使用 Microsoft Entra 驗證:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • 如果使用服務帳戶權杖驗證:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP --token $TOKEN
      

      注意

      此命令會開啟 Proxy 並封鎖目前的殼層。

  3. 在不同的殼層工作階段中,使用 kubectl 將要求傳送至叢集:

    kubectl get pods -A
    

您現在應該會看到叢集的回應,其中包含 default 命名空間下所有 Pod 的清單。

已知的限制

使用 az connectedk8s show 來檢查已啟用 Arc 的 Kubernetes 代理程式版本。

對 Kubernetes 叢集提出要求時,如果使用的 Microsoft Entra 實體是超過 200 個群組的一部分,您可能會看到下列錯誤:

You must be logged in to the server (Error:Error while retrieving group info. Error:Overage claim (users with more than 200 group membership) is currently not supported.

這是已知限制。 若要結束此錯誤:

  1. 建立服務主體,其不太可能成為超過 200 個群組的成員。
  2. 在執行 az connectedk8s proxy 命令之前,請先使用服務主體登入 Azure CLI。

下一步