本文說明如何在初始部署期間或稍後在 AKS 叢集或節點集區上設定 SSH 金鑰 (預覽版)。
AKS 支援下列設定選項來管理叢集節點上的 SSH 金鑰:
- 使用 SSH 金鑰建立叢集
- 更新現有 AKS 叢集上的 SSH 金鑰
- 停用並啟用 SSH 服務
重要事項
AKS 預覽功能可透過自助服務,以加入方式使用。 預覽會以「現狀」和「可供使用時」提供,其其不受服務等級協定和有限瑕疵擔保所保護。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:
重要事項
從 2025 年 11 月 30 日開始,AKS 將不再支援或提供 Azure Linux 2.0 的安全性更新。 從 2026 年 3 月 31 日開始,節點映像將會移除,而且您將無法調整節點集區。 將 節點集區升級 至支援的 Kubernetes 版本,或移轉至 osSku AzureLinux3,以升級至受支援的 Azure Linux 版本。 如需詳細資訊,請參閱 AKS 上的 [淘汰] Azure Linux 2.0 節點集區。
開始之前
- 您需要
aks-preview0.5.116 版或更新版本才能使用 [更新]。 - 您需要
aks-preview1.0.0b6 版或更新版本才能使用 [停用]。 - [建立] 和 [更新] SSH 功能支援現有叢集上的 Linux、Windows 和 Azure Linux 節點集區。
安裝 Azure CLI aks-preview 擴充功能
使用
az extension add命令安裝 aks-preview 延伸模組。az extension add --name aks-preview使用
az extension update命令,更新為最新版的延伸模組。az extension update --name aks-preview
註冊 DisableSSHPreview 功能旗標
若要使用 [停用] SSH 功能,請執行下列步驟,在您的訂用帳戶中註冊並加以啟用。
使用
DisableSSHPreview命令註冊az feature register功能旗標。az feature register --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"狀態需要幾分鐘的時間才會顯示「已註冊」。
使用
az feature show命令驗證註冊狀態。az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"當狀態反映「已註冊」時,使用 (部分機器翻譯) 命令,重新整理
az provider register資源提供者的註冊。az provider register --namespace Microsoft.ContainerService
搭配 SSH 金鑰建立 AKS 叢集
使用 az aks create 命令搭配 SSH 金鑰部署 AKS 叢集。 您可使用 --ssh-key-value 引數來指定金鑰或金鑰檔。
| SSH 參數 | 描述 | 預設值 |
|---|---|---|
--generate-ssh-key |
如果您沒有自己的 SSH 金鑰,請指定 --generate-ssh-key。 Azure CLI 會自動產生一組 SSH 金鑰,並將金鑰儲存在預設目錄 ~/.ssh/。 |
|
| --ssh-key-value | 用來在 SSH 存取的節點 VM 上安裝的金鑰路徑或金鑰內容。 例如: ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm。 |
~/.ssh/id_rsa.pub |
--no-ssh-key |
如果您不需要 SSH 金鑰,請指定此引數。 不過,AKS 會自動產生一組 SSH 金鑰,因為 Azure 虛擬機器資源相依性不支援空的 SSH 金鑰檔案。 因此,金鑰不會傳回,而且無法用來透過 SSH 連線到節點 VM。 私密金鑰會予以捨棄且未儲存。 |
附註
如果未指定任何參數,Azure CLI 預設會參考儲存在 ~/.ssh/id_rsa.pub 檔案中的 SSH 金鑰。 如果找不到金鑰,命令會傳回訊息 An RSA key file or key value must be supplied to SSH Key Value。
以下是此命令的範例:
若要建立叢集並使用預設產生的 SSH 金鑰:
az aks create --name myAKSCluster --resource-group MyResourceGroup --generate-ssh-key若要指定 SSH 金鑰檔案,請包含
--ssh-key-value引數:az aks create --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
更新現有 AKS 叢集上的 SSH 公開金鑰
使用 az aks update 命令來更新叢集上的 SSH 金鑰 (預覽版)。 此作業會更新全部節點集區上的金鑰。 您可使用 --ssh-key-value 引數來指定金鑰或金鑰檔。
附註
具有 AKS 叢集的 Azure 虛擬機器擴展集支援更新 SSH 金鑰。
以下是此命令的範例:
若要指定新的 SSH 金鑰值,請包含
--ssh-key-value引數:az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'若要指定 SSH 金鑰檔案,請使用
--ssh-key-value引數指定該檔案:az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value ~/.ssh/id_rsa.pub
重要事項
更新 SSH 金鑰之後,AKS 不會自動更新您的節點集區。 您可以隨時選擇執行 nodepool 更新作業。 更新 SSH 金鑰作業會在節點映像更新完成之後生效。 針對已啟用 節點自動布 建的叢集,可以將新的標籤套用至 Kubernetes NodePool 自定義資源,以執行節點映像更新。
停用 SSH 概觀
為了改善安全性和支援公司安全性需求或策略,AKS 支援在叢集和節點集區層級停用 SSH (預覽版)。 相較於唯一支援的解決方案,停用 SSH 引進簡化的方法,這需要在 AKS 子網/節點網路介面卡 (NIC) 上設定網路安全性群組規則。 停用 SSH 僅支援虛擬機器擴展集節點集區。
您在叢集建立時停用 SSH 時,這會在建立叢集之後生效。 不過,您在現有的叢集或節點集區上停用 SSH 時,AKS 不會自動停用 SSH。 您可以隨時選擇執行 nodepool 升級作業。 停用/啟用 SSH 金鑰作業會在節點映像更新完成之後生效。
附註
當您在叢集層級停用 SSH 時,它會套用至所有現有的節點集區中。 此作業之後所建立的任何節點集區預設都會啟用 SSH,您必須再次執行這些命令才能停用它。
| SSH 參數 | 描述 |
|---|---|
disabled |
SSH 服務已停用。 |
localuser |
已啟用 SSH 服務,且具有 SSH 金鑰的使用者可以安全地存取節點。 |
附註
kubectl 偵錯節點會在您停用 SSH 之後繼續運作,因為這不相依於 SSH 服務。
在新的叢集部署上停用 SSH
根據預設,AKS 叢集節點上的 SSH 服務可供叢集上執行的全部使用者和 Pod 使用。 如果 Pod 中的容器遭到入侵,您可以防止從任何網路直接透過 SSH 存取叢集節點,協助限制攻擊媒介。
使用 az aks create 命令來建立新的叢集,並在叢集建立期間包含 --ssh-access disabled 引數來停用全部節點集區上的 SSH (預覽版)。
重要事項
停用 SSH 服務之後,您無法透過 SSH 連線到叢集來執行系統管理工作或進行疑難排解。
附註
在新建立的叢集上,停用 SSH 只會設定第 1 個系統 nodepool。 所有其他節點集區都必須在 nodepool 層級設定。
az aks create --resource-group myResourceGroup --name myManagedCluster --ssh-access disabled
在幾分鐘之後,此命令就會完成,並以 JSON 格式傳回叢集的相關資訊。 下列範例與輸出和停用 SSH 相關的結果類似:
"securityProfile": {
"sshAccess": "Disabled"
},
停用新節點集區的 SSH
使用 az aks nodepool add 命令新增節點集區,並在節點集區建立期間包含要停用 SSH 的 --ssh-access disabled 引數。
az aks nodepool add --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled
在幾分鐘之後,此命令就會完成,並以 JSON 格式傳回叢集的相關資訊,指出已成功建立 mynodepool。 下列範例與輸出和停用 SSH 相關的結果類似:
"securityProfile": {
"sshAccess": "Disabled"
},
停用現有節點集區的 SSH
使用 [az aks nodepool update][az-aks-nodepool-update] command with the --ssh-access disabled` 引數來停用現有節點集區上的 SSH (預覽版)。
az aks nodepool update --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --ssh-access disabled
在幾分鐘之後,此命令就會完成,並以 JSON 格式傳回叢集的相關資訊,指出已成功建立 mynodepool。 下列範例與輸出和停用 SSH 相關的結果類似:
"securityProfile": {
"sshAccess": "Disabled"
},
若要讓變更生效,您必須使用 az aks nodepool upgrade 命令來重新安裝節點集區的映像。
az aks nodepool upgrade --cluster-name myManagedCluster --name mynodepool --resource-group myResourceGroup --node-image-only
重要事項
若要停用現有叢集上的 SSH,您必須停用此叢集上每個節點集區的 SSH。
重新啟用特定節點集區的 SSH
使用 az aks update 命令來更新特定的節點集區,並在叢集中的該節點集區中包含要重新啟用 SSH 的 --ssh-access localuser 引數 (預覽版)。 在下列範例中,nodepool1 是目標節點集區。
az aks nodepool update --cluster-name myManagedCluster --name nodepool1 --resource-group myResourceGroup --ssh-access localuser
執行流程時會傳回下列訊息:
Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect.
重要事項
在此作業期間,全部虛擬機器擴展集執行個體都會升級並重新建立映像,以使用新的 SSH 公開金鑰。
SSH 服務狀態
執行下列步驟,以便在一個節點上使用節點殼層,並使用 systemctl 檢查 SSH 服務狀態。
執行命令
kubectl node-shell <node>命令以取得標準 Bash 殼層。kubectl node-shell aks-nodepool1-20785627-vmss000001執行
systemctl命令來檢查 SSH 服務的狀態。systemctl status ssh
如果 SSH 已停用,下列範例輸出會顯示結果:
ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; disabled; vendor preset: enabled)
Active: inactive (dead) since Wed 2024-01-03 15:36:57 UTC; 20min ago
如果已啟用 SSH,下列範例輸出會顯示結果:
ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-01-03 15:40:20 UTC; 19min ago
後續步驟
若要協助針對叢集節點的 SSH 連線問題進行疑難排解,您可以檢視 kubelet 記錄或檢視 Kube 主要節點記錄。