你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure Operator Nexus Kubernetes 群集节点上配置和管理 SSH 密钥

本文介绍如何在 Nexus Kubernetes 代理池和控制平面节点上配置和管理 SSH 密钥。 SSH 密钥提供一种安全的方法来访问群集中的这些节点。

先决条件

在继续执行本操作指南之前,建议:

  • 有关全面概述和步骤,请参阅 Operator Nexus Kubernetes 群集快速入门指南
  • 确保满足快速入门中概述的先决条件,以确保指南的顺利实施。

注意

本指南假定你已有的 Operator Nexus Kubernetes 群集是使用快速入门指南创建的,并且你有权访问快速入门中使用的 CLI、ARM 模板或 Bicep 来更新 SSH 密钥。

配置 Operator Nexus Kubernetes 群集节点 SSH 密钥

配置 Operator 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}"

管理 Operator Nexus Kubernetes 群集节点 SSH 密钥

可以在创建群集后管理 Operator Nexus Kubernetes 群集中节点的 SSH 密钥。 可以更新 SSH 密钥,但不能从群集节点中移除所有 SSH 密钥。 相反,提供的任何新密钥都将替换所有现有密钥。

若要更新 SSH 密钥,可以在初始部署期间使用的相同 Bicep/ARM 配置中使用新密钥,也可以使用 CLI 进行更新。

限制

  • 无法从群集节点中移除 SSH 密钥。 只能使用新密钥更新它们。
  • 如果尝试使用空数组更新群集范围密钥,操作会成功,但现有密钥保持不变。
  • 如果尝试使用空数组更新代理池密钥或控制平面,操作会成功,并改用群集范围密钥。
  • 如果对创建时就没有任何密钥的群集尝试更新密钥,则会添加新密钥,但无法将其删除。

开始之前

  • 确保具有更新群集配置所需的权限。
  • 具有要用于群集节点的新 SSH 密钥。
  • 具有在初始部署期间使用的参数文件或 CLI 命令中使用的变量。
  • 若要使用本指南,必须具有使用快速入门指南创建的现有 Operator Nexus Kubernetes 群集。

更新群集范围的 SSH 密钥

使用以下命令更新群集范围的 SSH 密钥,这些密钥用于群集中的所有节点。 现有密钥将替换为新密钥。

注意

这仅适用于创建的群集使用群集范围密钥这种情况。 如果创建的群集使用代理池或控制平面密钥,则此操作不起作用。 请参阅下一部分来更新代理池或控制平面密钥。

用于更新群集范围的 SSH 密钥的 Azure CLI

  1. 使用新的 SSH 密钥设置 SSH_PUBLIC_KEY 变量。
SSH_PUBLIC_KEY="ssh-rsa CCCCC...."
  1. 使用以下命令更新群集范围的 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

  1. 使用新的 SSH 密钥更新 kubernetes-deploy-parameters.json 中的 sshPublicKeys 参数。
    "sshPublicKeys": {
      "value": [
        {
          "keyData": "ssh-rsa CCCCC...."
        }
      ]
    }
  1. 重新部署模板。

对于 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

  1. 使用新的 SSH 密钥设置 AGENT_POOL_KEY 变量。
AGENT_POOL_KEY="ssh-rsa DDDDD...."
  1. 使用以下命令更新代理池 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 命令。 如果创建的初始代理池使用群集范围密钥,并且你想要更新初始代理池的密钥,则可以更新群集范围密钥。

  1. 使用新的 SSH 密钥更新 kubernetes-nodepool-parameters.json 中的 agentPoolSshKeys 参数。
    "agentPoolSshKeys": {
      "value": [
        {
          "keyData": "ssh-rsa DDDDD...."
        }
      ]
    }
  1. 重新部署模板。

对于 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

  1. 使用新的 SSH 密钥设置 CONTROL_PLANE_SSH_PUBLIC_KEY 变量。
CONTROL_PLANE_SSH_PUBLIC_KEY="ssh-rsa EEEEE...."
  1. 使用以下命令更新控制平面 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

  1. 使用新的 SSH 密钥更新 kubernetes-deploy-parameters.json 中的 controlPlaneSshKeys 参数。
    "controlPlaneSshKeys": {
      "value": [
        {
          "keyData": "ssh-rsa EEEEE...."
        }
      ]
    }
  1. 重新部署模板。

对于 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

后续步骤

通过了解如何在 Operator Nexus Kubernetes 群集节点上配置和管理 SSH 密钥,可以确保群集是安全的,并且在需要解决问题时可以访问节点。