使用叢集連線安全地連線到已啟用 Azure Arc 的 Kubernetes 叢集
透過叢集連線,您可以從任何地方安全地連線到已啟用 Azure Arc 的 Kubernetes 叢集,而不需要在防火牆上啟用任何輸入埠。
apiserver
存取已啟用 Azure Arc 的 Kubernetes 叢集可啟用下列案例:
- 互動式偵錯和疑難解答。
- 叢集存取 Azure 服務,以取得 自定義位置 及其上建立的其他資源。
開始之前,請先檢閱 叢集連線功能的概念概觀。
必要條件
具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶。
已啟用 Azure Arc 的現有 Kubernetes 連線叢集。
將 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 驗證選項
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)
使用適當的許可權授權實體。
如果您使用 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
服務帳戶令牌驗證選項
使用
kubeconfig
指向apiserver
Kubernetes 叢集 的 檔案,執行此命令以建立服務帳戶。 這個範例會在預設命名空間中建立服務帳戶,但您可以將任何其他命名空間取代為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 。
- 部署和管理 叢集擴充功能。