Azure Operator Nexus Kubernetes クラスター ノード上の SSH キーの構成と管理
この記事では、Nexus Kubernetes エージェント プールとコントロール プレーンのノード上の SSH キーを構成および管理する方法について説明します。 SSH キーは、クラスター内のこれらのノードに安全にアクセスするための手段となります。
前提条件
この攻略ガイドを読み進む前に、次のことをお勧めします。
- Operator Nexus Kubernetes クラスターのクイックスタート ガイドを参照して、包括的な概要と必要な手順を理解します。
- ガイドの実装を円滑に行うために、クイックスタートに記載されている前提条件を満たしていることを確認してください。
Note
このガイドでは、クイックスタート ガイドを使用して作成された 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 キーを更新するには、次に示すコマンドを使用します。 既存のキーは新しいキーで置き換えられます。
Note
これが機能するのは、そのクラスターがクラスター全体用キーを指定して作成された場合のみです。 エージェント プールまたはコントロール プレーンのキーを指定してクラスターが作成された場合は、この操作の効果はありません。 エージェント プールまたはコントロール プレーンのキーを更新するには、次のセクションを参照してください。
Azure CLI でのクラスター全体用 SSH キーの更新
- 新しい SSH キーを指定して
SSH_PUBLIC_KEY
変数を設定します。
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 キーの更新
- 新しい SSH キーを指定して
kubernetes-deploy-parameters.json
内のsshPublicKeys
パラメーターを更新します。
"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 キーを更新するには、次に示すコマンドを使用します。
- そのエージェント プール内のすべてのノードが新しいキーで更新されます。
- そのエージェント プールがキー付きで作成されたものである場合は、新しいキーによって既存のキーが置き換えられます。
- そのエージェント プールがキーなしで作成されたものである場合は、新しいキーが追加されます。
- そのエージェント プールがクラスター全体用のキー付きで作成されたものである場合は、新しいキーによって既存のキーが置き換えられます。
- キーなしで作成されたクラスターのキーの更新を試みた場合は、新しいキーが追加されますが、そのキーを削除することはできません。
- 空の配列を指定してエージェント プールのキーの更新を試みた場合は、この操作は成功し、クラスター全体用のキーが代わりに使用されます。
Azure CLI でのエージェント プール用 SSH キーの更新
- 新しい SSH キーを指定して
AGENT_POOL_KEY
変数を設定します。
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 キーの更新
Note
エージェント プールの初期構成を通して作成されたノード プールは、独立したエージェント プール テンプレートとパラメーター ファイルがないため、この方法では更新できません。 この方法を使用して更新できるのは、クラスター作成後に作成されたプールのエージェント プール キーのみです。 初期エージェント プールのキーを更新するには、前のセクションに示した 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 キーを更新するには、次に示すコマンドを使用します。
- そのコントロール プレーン内のすべてのノードが新しいキーで更新されます。
- そのコントロール プレーンがキー付きで作成されたものである場合は、新しいキーによって既存のキーが置き換えられます。
- そのコントロール プレーンがキーなしで作成されたものである場合は、新しいキーが追加されます。
- そのコントロール プレーンがクラスター全体用のキー付きで作成されたものである場合は、新しいキーによって既存のキーが置き換えられます。
- キーなしで作成されたクラスターのキーの更新を試みた場合は、新しいキーが追加されますが、そのキーを削除することはできません。
- 空の配列を指定してコントロール プレーンのキーの更新を試みた場合は、この操作は成功し、クラスター全体用のキーが代わりに使用されます。
Note
コントロール プレーンはクラスターの一部であるため、コントロール プレーンのキーの更新は初期展開テンプレートとパラメーター ファイルを使用して行うことができます。 ただし、エージェント プールはサブリソースであるため、同じ方法でエージェント プールのキーを更新することはできません (エージェント プールがクラスター全体用のキーを使用する場合を除きます)。
Azure CLI でのコントロール プレーン用 SSH キーの更新
- 新しい SSH キーを指定して
CONTROL_PLANE_SSH_PUBLIC_KEY
変数を設定します。
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 キーの更新
- 新しい SSH キーを指定して
kubernetes-deploy-parameters.json
内のcontrolPlaneSshKeys
パラメーターを更新します。
"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 キーの構成と管理の方法を理解することで、クラスターを確実にセキュリティで保護するとともに、問題のトラブルシューティングが必要なときに確実にノードにアクセスできるようになります。