この記事では、Nexus Kubernetes エージェント プールとコントロール プレーン ノードで SSH キーを構成および管理する方法について説明します。 SSH キーを使用すると、クラスター内のこれらのノードに安全にアクセスできます。
[前提条件]
このハウツー ガイドに進む前に、次の操作を行うことをお勧めします。
- 関連する包括的な概要と手順については、Operator Nexus Kubernetes クラスター クイック スタート ガイド を参照してください。
- ガイドの円滑な実装を確実に行うために、クイック スタートで概説されている前提条件を満たしていることを確認します。
注
このガイドでは、クイックスタート ガイドを使用して作成された既存の Operator Nexus Kubernetes クラスターが既にあり、SSH キーを更新するためにクイックスタートで使用した CLI、ARM テンプレート、または Bicep にアクセスできるものとします。
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
-
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のkubernetes-deploy-parameters.jsonパラメーターを新しい 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 コマンドを参照してください。 初期エージェント プールがクラスター全体のキーで作成され、初期エージェント プールのキーを更新する場合は、クラスター全体のキーを更新できます。
-
agentPoolSshKeysのkubernetes-nodepool-parameters.jsonパラメーターを新しい SSH キーで更新します。
"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
-
controlPlaneSshKeysのkubernetes-deploy-parameters.jsonパラメーターを新しい 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
次のステップ
Operator Nexus Kubernetes クラスター ノードで SSH キーを構成および管理する方法を理解することで、クラスターがセキュリティで保護され、問題のトラブルシューティングが必要なときにノードにアクセスできることを確認できます。