本文介绍如何在 Nexus Kubernetes 代理池和控制平面节点上配置和管理 SSH 密钥。 SSH 密钥提供访问群集中这些节点的安全方法。
先决条件
在继续这个操作指南之前,建议您:
- 有关涉及的全面概述和步骤,请参阅操作员 Nexus Kubernetes 群集 快速入门指南 。
- 确保满足快速入门中概述的先决条件,以确保指南的顺利实施。
注释
本指南假定你已有使用快速入门指南创建的操作员 Nexus Kubernetes 群集,并且你有权访问快速入门中使用的 CLI、ARM 模板或 Bicep 来更新 SSH 密钥。
配置 Operator 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"
用于更新整个群集 SSH 密钥的 Azure 资源管理器(ARM)和 Bicep
- 在
kubernetes-deploy-parameters.json中将sshPublicKeys参数更新为新的 SSH 密钥。
"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"
用于更新代理池 SSH 密钥的 Azure ARM 模板和 Bicep 技术
注释
此方法无法更新通过初始代理池配置创建的节点池,因为没有单独的代理池模板和参数文件。 只有群集创建后创建的池的代理池密钥才能使用此方法进行更新。 若要更新初始代理池的密钥,请参阅上一部分提供的 CLI 命令。 如果初始代理池是使用群集范围的密钥创建的,并且想要更新初始代理池的密钥,则可以更新群集范围密钥。
- 将新的 SSH 密钥更新到
kubernetes-nodepool-parameters.json中的agentPoolSshKeys参数中。
"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']"
用于更新控制平面 SSH 密钥的 Azure ARM 模板和 Bicep
- 在
kubernetes-deploy-parameters.json中的controlPlaneSshKeys参数更新为新的 SSH 密钥。
"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 密钥,可以确保群集是安全的,并且当需要解决问题时可以访问节点。