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

透過叢集連線,您可以從任何地方安全地連線到已啟用 Azure Arc 的 Kubernetes 叢集,而不需要在防火牆上啟用任何輸入埠。

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

  • 互動式偵錯和疑難解答。
  • 叢集存取 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. objectId取得與您的 Microsoft Entra 實體相關聯的 。

    • 針對 Microsoft Entra 用戶帳戶:

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

      AAD_ENTITY_OBJECT_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_OBJECT_ID
      
    • 如果您使用 Azure RBAC 在叢集上進行授權檢查,您可以建立對應至 Microsoft Entra 實體的適用 Azure 角色指派 。 例如:

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

服務帳戶令牌驗證選項

  1. 使用 kubeconfig 指向 apiserver Kubernetes 叢集 的 檔案,執行此命令以建立服務帳戶。 這個範例會在預設命名空間中建立服務帳戶,但您可以將任何其他命名空間取代為 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. 先使用服務主體登入 Azure CLI,再執行 az connectedk8s proxy 命令。

下一步