在 Azure 操作員 Nexus Kubernetes 叢集節點上設定和管理 SSH 金鑰
本文說明如何在 Nexus Kubernetes 代理程式集區和控制平面節點上設定和管理 SSH 金鑰。 SSH 金鑰提供安全的方法,可讓您存取叢集中的這些節點。
必要條件
在繼續進行本操作指南之前,建議您:
- 如需相關的完整概觀和步驟,請參閱操作員 Nexus Kubernetes 叢集 快速入門指南 。
- 請確定您符合快速入門中概述的必要條件,以確保指南的順利實作。
注意
本指南假設您已經有使用快速入門指南建立的現有操作員 Nexus Kubernetes 叢集,而且您可以存取快速入門中用來更新 SSH 密鑰的 CLI、ARM 範本或 Bicep。
設定操作員 Nexus Kubernetes 叢集節點 SSH 金鑰
設定操作員 Nexus Kubernetes 叢集時,您必須為叢集中的節點提供 SSH 金鑰。 SSH 金鑰提供安全的方法,可讓您存取叢集中的這些節點。
有幾種不同的方式可為叢集節點提供 SSH 金鑰。
- 如果您要針對叢集中的所有節點使用相同的 SSH 金鑰,您可以在建立叢集時提供公鑰陣。 這些索引鍵會插入所有代理程式集區節點和控制平面節點。
- 如果您要針對不同的代理程式集區或控制平面節點使用不同的SSH 金鑰,您可以為每個集區提供唯一的公鑰,讓您更細微地管理 SSH 存取,這會覆寫整個叢集的金鑰。 任何新的代理程式集區稍後都會新增至叢集,而不使用索引鍵,如果叢集具有密鑰,則會使用提供的密鑰。
- 如果您在建立叢集時未提供任何 SSH 金鑰,則不會將 SSH 金鑰插入節點中。 這表示用戶無法透過 SSH 連線到節點。 您稍後可以藉由更新叢集組態來新增 SSH 金鑰,但無法移除新增這些金鑰。
以下是您需要設定的變數,以及可用於特定變數的 快速入門指南 預設值。
SSH_PUBLIC_KEY
- 針對叢集寬金鑰。 使用叢集寬密鑰搭配代理程式集區和控制平面密鑰並沒有任何作用,因為使用控制平面和代理程式集區索引鍵,而不是叢集寬密鑰。CONTROL_PLANE_SSH_PUBLIC_KEY
- 針對控制平面,您可以提供插入控制平面節點的公鑰。INITIAL_AGENT_POOL_SSH_PUBLIC_KEY
- 針對每個代理程式集區,您可以提供插入該集區中節點的公鑰。
az networkcloud kubernetescluster create \
--name "${CLUSTER_NAME}" \
--resource-group "${RESOURCE_GROUP}" \
--subscription "${SUBSCRIPTION_ID}" \
--extended-location name="${CUSTOM_LOCATION}" type=CustomLocation \
--location "${LOCATION}" \
--kubernetes-version "${K8S_VERSION}" \
--aad-configuration admin-group-object-ids="[${AAD_ADMIN_GROUP_OBJECT_ID}]" \
--admin-username "${ADMIN_USERNAME}" \
--ssh-key-values "${SSH_PUBLIC_KEY}" \
--control-plane-node-configuration \
count="${CONTROL_PLANE_COUNT}" \
vm-sku-name="${CONTROL_PLANE_VM_SIZE}" \
ssh-key-values='["${CONTROL_PLANE_SSH_PUBLIC_KEY}"]' \
--initial-agent-pool-configurations "[{count:${INITIAL_AGENT_POOL_COUNT},mode:System,name:${INITIAL_AGENT_POOL_NAME},vm-sku-name:${INITIAL_AGENT_POOL_VM_SIZE},ssh-key-values:['${INITIAL_AGENT_POOL_SSH_PUBLIC_KEY}']}]"\
--network-configuration \
cloud-services-network-id="${CSN_ARM_ID}" \
cni-network-id="${CNI_ARM_ID}" \
pod-cidrs="[${POD_CIDR}]" \
service-cidrs="[${SERVICE_CIDR}]" \
dns-service-ip="${DNS_SERVICE_IP}"
管理操作員 Nexus Kubernetes 叢集節點 SSH 金鑰
您可以在建立叢集之後,管理操作員 Nexus Kubernetes 叢集中節點的 SSH 金鑰。 可以更新 SSH 金鑰,但從叢集節點移除所有 SSH 金鑰不是選項。 相反地,提供的任何新金鑰都會取代所有現有的金鑰。
若要更新 SSH 金鑰,您可以使用新的金鑰,套用初始部署期間所使用的相同 Bicep/ARM 組態,或使用 CLI。
限制
- 您無法從叢集節點移除 SSH 金鑰。 您只能使用新的金鑰來更新它們。
- 如果您嘗試以空陣語更新叢集寬密鑰,作業會成功,但現有的密鑰會保持不變。
- 如果您嘗試使用空陣列來更新代理程式集區索引鍵或控制平面,作業會成功,而且會改用叢集寬密鑰。
- 如果您嘗試更新在沒有任何金鑰的情況下建立之叢集的金鑰,則會新增新的金鑰,但無法移除它。
開始之前
- 請確定您具有更新叢集組態的必要許可權。
- 您有想要用於叢集節點的新 SSH 金鑰。
- 您在初始部署期間使用參數檔案,或 CLI 命令中使用的變數。
- 若要使用本指南,您必須具有使用快速入門指南建立的現有操作員 Nexus Kubernetes 叢集。
更新整個叢集的 SSH 金鑰
使用下列命令來更新叢集範圍 SSH 金鑰,這些金鑰用於叢集中的所有節點。 現有的索引鍵會取代為新的索引鍵。
注意
只有當叢集是以全叢集索引鍵建立時,才能運作。 如果叢集是使用代理程式集區或控制平面索引鍵建立的,此作業就沒有作用。 請參閱下一節來更新代理程式集區或控制平面密鑰。
用來更新叢集寬 SSH 金鑰的 Azure CLI
SSH_PUBLIC_KEY
使用新的 SSH 金鑰設定變數。
SSH_PUBLIC_KEY="ssh-rsa CCCCC...."
- 使用下列命令來更新整個叢集的 SSH 金鑰。
az networkcloud kubernetescluster update --name "$CLUSTER_NAME" --resource-group "$RESOURCE_GROUP" --subscription "$SUBSCRIPTION_ID" --ssh-key-values "$SSH_PUBLIC_KEY"
Azure Resource Manager (ARM) 和 Bicep 更新叢集寬 SSH 密鑰
sshPublicKeys
使用新的 SSH 金鑰更新 中的kubernetes-deploy-parameters.json
參數。
"sshPublicKeys": {
"value": [
{
"keyData": "ssh-rsa CCCCC...."
}
]
}
- 重新部署範本。
針對 ARM 範本:
az deployment group create --resource-group myResourceGroup --template-file kubernetes-deploy.json --parameters @kubernetes-deploy-parameters.json
針對 Bicep:
az deployment group create --resource-group myResourceGroup --template-file kubernetes-deploy.bicep --parameters @kubernetes-deploy-parameters.json
更新代理程式集區 SSH 金鑰
使用下列命令來更新特定代理程式集區的 SSH 金鑰。
- 代理程式集區中的所有節點都會以新的金鑰更新。
- 如果代理程式集區是使用索引鍵建立的,新的金鑰會取代現有的密鑰。
- 如果代理程式集區建立時沒有索引鍵,則會新增新的密鑰。
- 如果代理程式集區是使用叢集寬密鑰建立的,新的金鑰會取代現有的密鑰。
- 如果您嘗試更新在沒有任何金鑰的情況下建立之叢集的金鑰,則會新增新的金鑰,但無法移除它。
- 如果您嘗試使用空陣列來更新代理程式集區密鑰,作業會成功,而會改用叢集寬密鑰。
用來更新代理程式集區 SSH 金鑰的 Azure CLI
AGENT_POOL_KEY
使用新的 SSH 金鑰設定變數。
AGENT_POOL_KEY="ssh-rsa DDDDD...."
- 使用下列命令來更新代理程式集區 SSH 金鑰。
az networkcloud kubernetescluster agentpool update --agent-pool-name "${CLUSTER_NAME}-nodepool-2" --kubernetes-cluster-name "$CLUSTER_NAME" --resource-group "$RESOURCE_GROUP" --subscription "$SUBSCRIPTION_ID" --ssh-key-values "$AGENT_POOL_KEY"
Azure ARM 樣本和 Bicep 以更新代理程式集區 SSH 金鑰
注意
使用此方法無法更新透過初始代理程式集區組態建立的節點集區,因為沒有個別的代理程式集區範本和參數檔案。 只有叢集建立之後所建立集區的代理程式集區密鑰,才能使用此方法更新。 若要更新初始代理程式集區的金鑰,請參閱上一節中提供的 CLI 命令。 如果初始代理程式集區是使用叢集寬密鑰建立的,而且如果您想要更新初始代理程式集區的金鑰,則可以更新整個叢集的密鑰。
agentPoolSshKeys
使用新的 SSH 金鑰更新 中的kubernetes-nodepool-parameters.json
參數。
"agentPoolSshKeys": {
"value": [
{
"keyData": "ssh-rsa DDDDD...."
}
]
}
- 重新部署範本。
針對 ARM 範本:
az deployment group create --resource-group myResourceGroup --template-file kubernetes-add-agentpool.json --parameters @kubernetes-nodepool-parameters.json
針對 Bicep:
az deployment group create --resource-group myResourceGroup --template-file kubernetes-add-agentpool.bicep --parameters @kubernetes-nodepool-parameters.json
更新控制平面 SSH 金鑰
使用下列命令來更新控制平面的 SSH 金鑰。
- 控制平面中的所有節點都會以新的索引鍵更新。
- 如果使用索引鍵建立控制平面,新的索引鍵會取代現有的索引鍵。
- 如果控制平面未建立索引鍵,則會新增新的索引鍵。
- 如果使用叢集寬鍵建立控制平面,新的索引鍵會取代現有的索引鍵。
- 如果您嘗試更新在沒有任何金鑰的情況下建立之叢集的金鑰,則會新增新的金鑰,但無法移除它。
- 如果您嘗試使用空陣列來更新控制平面索引鍵,作業會成功,並改用叢集寬鍵。
注意
控制平面索引鍵可以使用初始部署範本和參數檔案來更新,因為控制平面是叢集的一部分。 不過,代理程式集區密鑰無法以相同方式更新,因為代理程式集區是子資源,除非代理程式集區使用叢集寬密鑰。
用來更新控制平面 SSH 金鑰的 Azure CLI
CONTROL_PLANE_SSH_PUBLIC_KEY
使用新的 SSH 金鑰設定變數。
CONTROL_PLANE_SSH_PUBLIC_KEY="ssh-rsa EEEEE...."
- 使用下列命令來更新控制平面 SSH 金鑰。
az networkcloud kubernetescluster update --name "$CLUSTER_NAME" --resource-group "$RESOURCE_GROUP" --subscription "$SUBSCRIPTION_ID" --control-plane-node-configuration ssh-key-values="['$CONTROL_PLANE_SSH_PUBLIC_KEY']"
Azure ARM 樣本和 Bicep 以更新控制平面 SSH 金鑰
controlPlaneSshKeys
使用新的 SSH 金鑰更新 中的kubernetes-deploy-parameters.json
參數。
"controlPlaneSshKeys": {
"value": [
{
"keyData": "ssh-rsa EEEEE...."
}
]
}
- 重新部署範本。
針對 ARM 範本:
az deployment group create --resource-group myResourceGroup --template-file kubernetes-deploy.json --parameters @kubernetes-deploy-parameters.json
針對 Bicep:
az deployment group create --resource-group myResourceGroup --template-file kubernetes-deploy.bicep --parameters @kubernetes-deploy-parameters.json
下一步
藉由瞭解如何在操作員 Nexus Kubernetes 叢集節點上設定和管理 SSH 金鑰,您可以確定叢集是安全的,而且您可以在需要疑難解答問題時存取節點。