使用叢集連線以安全地連線到已啟用 Azure Arc 的 Kubernetes 叢集
使用叢集連線,您可以從任何地方安全地連線至已啟用 Azure Arc 的 Kubernetes 叢集,而無須在防火牆上啟用任何輸入連接埠。
存取已啟用 Azure Arc 的 Kubernetes 叢集的 apiserver
,可啟用下列案例:
- 互動式偵錯與疑難排解。
- 針對自訂位置和在其頂端建立的其他資源進行 Azure 服務的叢集存取。
開始之前,請檢閱叢集連線功能的概念概觀。
必要條件
具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
現有已啟用 Azure Arc 的 Kubernetes 連線叢集。
讓這些端點能夠進行輸出存取:
端點 連接埠 *.servicebus.windows.net
443 % 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
安裝最新版的
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 的現有叢集上,使用 Microsoft Entra 驗證或服務帳戶權杖建立 ClusterRoleBinding。
Microsoft Entra 驗證選項
取得與您的 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)
授與實體適當的權限。
如果您是使用 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
服務帳戶權杖驗證選項
使用指向 Kubernetes 叢集
apiserver
的kubeconfig
檔案,執行此命令來建立服務帳戶。 此範例會在預設命名空間中建立服務帳戶,但您可以將任何其他命名空間取代為default
。kubectl create serviceaccount demo-user -n default
建立 ClusterRoleBinding,以將叢集的適當權限授與此服務帳戶。 如果您在第一個指令中使用不同的命名空間,請將其取代為
default
。kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
建立服務帳戶權杖:
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')
取得權杖以輸出至主控台
echo $TOKEN
從用戶端裝置存取您的叢集
現在,您可以從不同的用戶端存取叢集。 在另一個用戶端裝置上執行下列步驟。
使用 Microsoft Entra 驗證或服務帳戶權杖驗證登入。
根據使用的驗證選項,取得叢集連線
kubeconfig
需要從任何地方與叢集通訊 (從叢集周圍的防火牆外部) 進行通訊:如果使用 Microsoft Entra 驗證:
az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
如果使用服務帳戶權杖驗證:
az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP --token $TOKEN
注意
此命令會開啟 Proxy 並封鎖目前的殼層。
在不同的殼層工作階段中,使用
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.
這是已知限制。 若要結束此錯誤:
下一步
- 在叢集上設定 Microsoft Entra RBAC。
- 部署和管理叢集延伸模組。