管理 SSH 以便安全存取 Azure Kubernetes Service (AKS) 節點
本文說明如何在初始部署期間或稍後在 AKS 叢集或節點集區上設定 SSH 金鑰 (預覽版)。
AKS 支援下列設定選項來管理叢集節點上的 SSH 金鑰:
- 使用 SSH 金鑰建立叢集
- 更新現有 AKS 叢集上的 SSH 金鑰
- 停用並啟用 SSH 服務
重要
AKS 預覽功能可透過自助服務,以加入方式使用。 預覽會以「現狀」和「可供使用時」提供,其其不受服務等級協定和有限瑕疵擔保所保護。 客戶支援部門會盡最大努力,部分支援 AKS 預覽。 因此,這些功能不適合實際執行用途。 如需詳細資訊,請參閱下列支援文章:
開始之前
- 您需要
aks-preview
0.5.116 版或更新版本才能使用 [更新]。 - 您需要
aks-preview
1.0.0b6 版或更新版本才能使用 [停用]。 - [建立] 和 [更新] SSH 功能支援現有叢集上的 Linux、Windows 和 Azure Linux 節點集區。
- 在執行 Windows Server 作業系統的節點集區上,此預覽不支援 [停用] SSH 功能。
安裝 aks-preview
Azure CLI 延伸模組
使用
az extension add
命令安裝 aks-preview 延伸模組。az extension add --name aks-preview
使用
az extension update
命令,以更新為延伸模組最新版。az extension update --name aks-preview
註冊 DisableSSHPreview
功能旗標
若要使用 [停用] SSH 功能,請執行下列步驟,在您的訂用帳戶中註冊並加以啟用。
使用
az feature register
命令註冊DisableSSHPreview
功能旗標。az feature register --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
狀態需要幾分鐘的時間才會顯示「已註冊」。
使用
az feature show
命令確認註冊狀態。az feature show --namespace "Microsoft.ContainerService" --name "DisableSSHPreview"
當狀態顯示為 [已註冊] 時,請使用
az provider register
命令來重新整理 Microsoft.ContainerService 資源提供者的註冊。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 金鑰作業會在節點映像更新完成之後生效。
停用 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 個系統節點集區。 所有其他節點集區都必須在節點集區層級設定。
az aks create --resource-group myResourceGroup --name myManagedCluster --ssh-access disabled
幾分鐘後,命令會完成並傳回關於叢集的 JSON 格式資訊。 下列範例與輸出和停用 SSH 相關的結果類似:
"securityProfile": {
"sshAccess": "Disabled"
},
停用現有叢集上的 SSH
使用 az aks update
命令來更新現有的叢集,並包含 --ssh-access disabled
引數以在叢集中的全部節點集區中停用 SSH (預覽版)。
az aks update --resource-group myResourceGroup --name myManagedCluster --ssh-access disabled
幾分鐘後,命令會完成並傳回關於叢集的 JSON 格式資訊。 下列範例與輸出和停用 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
使用 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
使用 az aks update
命令來更新現有的叢集,並包含 --ssh-access localuser
引數以在叢集中的全部節點集區中包含要重新啟用 SSH (預覽版)。
az aks update --resource-group myResourceGroup --name myManagedCluster --ssh-access localuser
執行流程時會傳回下列訊息:
Only after all the nodes are reimaged, does the disable/enable SSH Access operation take effect."
重新啟用 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 主要節點記錄。