Azure Operator Nexus Kubernetes クラスターに接続する
Azure Operator Nexus Kubernetes クラスターのライフサイクル全体を通じて、最終的にはクラスター ノードに直接アクセスする必要があります。 このアクセスは、メンテナンス、ログ収集、トラブルシューティング操作のためのアクセスである場合があります。 認証を通じてノードにアクセスします。認証方法は、お使いの接続方法によって異なります。 この記事で説明する 2 つのオプションを使って、クラスターに対して安全に認証します。 セキュリティ上の理由により、クラスター ノードはインターネットに公開されません。 代わりに、クラスター ノードに直接接続するには、kubectl debug
またはホストの IP アドレスをジャンプボックスから使う必要があります。
前提条件
- Azure サブスクリプションのリソース グループにデプロイされた Azure Operator Nexus Kubernetes クラスター。
- クラスター ノードの SSH 秘密キー。
- ノード IP アドレスを使って SSH を実行するには、クラスター ノードと同じコンテナー ネットワーク インターフェイス (CNI) ネットワーク上にジャンプボックス VM をデプロイする必要があります。
Azure Arc for servers 経由でクラスター ノードにアクセスする
az ssh arc
コマンドを使用すると、ユーザーは Azure Arc に接続されているクラスター VM にリモートでアクセスできます。コマンド ラインからクラスター ノードに直接 SSH 接続するには、この方法が安全であり、リモート管理のための迅速かつ効率的な手法です。
Note
Operator Nexus Kubernetes クラスター ノードは、既定では Arc 接続サーバーです。
必要な変数を設定します。 プレースホルダーを、Azure 環境と Nexus Kubernetes クラスターに関連する実際の値に置き換えます。
RESOURCE_GROUP="myResourceGroup" # Resource group where the Nexus Kubernetes cluster is deployed CLUSTER_NAME="myNexusK8sCluster" # Name of the Nexus Kubernetes cluster SUBSCRIPTION_ID="<Subscription ID>" # Azure subscription ID ADMIN_USERNAME="azureuser" # Username for the cluster administrator (--admin-username parameter value used during cluster creation) SSH_PRIVATE_KEY_FILE="<vm_ssh_id_rsa>" # Path to the SSH private key file MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID --output tsv --query managedResourceGroupConfiguration.name)
使用可能なクラスター ノードの名前を取得します。
az networkcloud kubernetescluster show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID -o json | jq '.nodes[].name'
サンプル出力:
"mynexusk8scluster-0b32128d-agentpool1-md-7h9t4" "mynexusk8scluster-0b32128d-agentpool1-md-c6xbs" "mynexusk8scluster-0b32128d-control-plane-qq5jm"
クラスター ノード名を VM_NAME 変数に設定します。
VM_NAME="mynexusk8scluster-0b32128d-agentpool1-md-7h9t4"
次のコマンドを実行して、クラスター ノードに SSH 接続します。
az ssh arc --subscription $SUBSCRIPTION_ID \ --resource-group $MANAGED_RESOURCE_GROUP \ --name $VM_NAME \ --local-user $ADMIN_USERNAME \ --private-key-file $SSH_PRIVATE_KEY_FILE
Kubernetes API を使用してノードにアクセスする
この方法では kubectl debug
コマンドを使用する必要があります。 この方法はコンテナーに限定されており、完全なノード アクセスと制御を提供する ('az ssh arc' または直接 IP を使う) SSH とは異なり、より広範なシステムの問題を見逃す可能性があります。
Azure Arc for Kubernetes 経由で Kubernetes API にアクセスする
Note
Nexus Kubernetes クラスターを作成すると、Nexus によってクラスター リソースの格納専用の管理対象リソース グループが自動的に作成され、このグループ内に Arc 接続クラスター リソースが確立されます。
クラスターにアクセスするには、クラスター接続 kubeconfig
を設定する必要があります。 関連する Microsoft Entra エンティティを使用して Azure CLI にログインした後、それを囲むファイアウォールの外側であっても、どこからでもクラスターと通信するために必要な kubeconfig
を取得できます。
CLUSTER_NAME
変数、RESOURCE_GROUP
変数、およびSUBSCRIPTION_ID
変数を設定します。CLUSTER_NAME="myNexusK8sCluster" RESOURCE_GROUP="myResourceGroup" SUBSCRIPTION_ID=<set the correct subscription_id>
az
を使用して管理対象リソース グループにクエリを実行し、MANAGED_RESOURCE_GROUP
に格納しますaz account set -s $SUBSCRIPTION_ID MANAGED_RESOURCE_GROUP=$(az networkcloud kubernetescluster show -n $CLUSTER_NAME -g $RESOURCE_GROUP --output tsv --query managedResourceGroupConfiguration.name)
次のコマンドは、指定された Nexus Kubernetes クラスターの Kubernetes API サーバーに接続できる connectedk8s プロキシを起動します。
az connectedk8s proxy -n $CLUSTER_NAME -g $MANAGED_RESOURCE_GROUP &
kubectl
を使用して、クラスターに要求を送信します。kubectl get pods -A
これで、すべてのノードの一覧が含まれているクラスターからの応答が表示されます。
注意
"アクセス トークンをクライアント プロキシに投稿できませんでした。MSI に接続できませんでした" というエラー メッセージが表示された場合は、az login
を実行して Azure で再認証する必要がある場合があります。
Azure Arc for Kubernetes 経由でクラスター ノードにアクセスする
Arc for Kubernetes 経由でクラスターに接続したら、kubectl debug
コマンドを使って個々の Kubernetes ノードに接続し、ノードで特権コンテナーを実行できます。
以下のように Nexus Kubernetes クラスター内のノードを一覧表示します。
$> kubectl get nodes NAME STATUS ROLES AGE VERSION mynexusk8scluster-0b32128d-agentpool1-md-7h9t4 Ready <none> 125m v1.24.9 mynexusk8scluster-0b32128d-agentpool1-md-c6xbs Ready <none> 125m v1.24.9 mynexusk8scluster-0b32128d-control-plane-qq5jm Ready <none> 124m v1.24.9
以下のようにノードで特権コンテナーを起動し、それに接続します。
$> kubectl debug node/mynexusk8scluster-0b32128d-agentpool1-md-7h9t4 -it --image=mcr.microsoft.com/cbl-mariner/base/core:2.0 Creating debugging pod node-debugger-mynexusk8scluster-0b32128d-agentpool1-md-7h9t4-694gg with container debugger on node mynexusk8scluster-0b32128d-agentpool1-md-7h9t4. If you don't see a command prompt, try pressing enter. root [ / ]#
この特権コンテナーにより、ノードへのアクセスが提供されます。 クラスター ノード上でコマンドを実行するには、コマンド ラインで
chroot /host
を実行します。ポッドのデバッグが完了したら、
exit
コマンドを入力して対話型シェル セッションを終了します。 シェルを終了したら、以下のようにポッドを必ず削除してください。kubectl delete pod node-debugger-mynexusk8scluster-0b32128d-agentpool1-md-7h9t4-694gg
IP アドレスを使用してノードへの対話型シェル接続を作成する
Azure ジャンプボックスからクラスター ノードに接続する
Azure Operator Nexus Kubernetes クラスター ノードに安全に接続するためのもう 1 つのオプションは、Azure ジャンプボックス VM からクラスターの CNI ネットワークへの直接アクセスを設定することです。 このアプローチを使うと、クラスター ノードに SSH で接続できます。また、kubeconfig
ファイルを使ってクラスターに対して kubectl
コマンドを実行することもできます。
ネットワーク管理者に連絡して、Azure ジャンプボックス VM からクラスターの CNI ネットワークへの直接接続を設定します。
オンプレミスのジャンプボックスからクラスター ノードに接続する
オンプレミスのジャンプボックス内からクラスターの CNI (コンテナー ネットワーク インターフェイス) への直接アクセスを確立します。 この直接アクセスにより、クラスター ノードに SSH 接続でき、 kubeconfig
ファイルを使用して kubectl
コマンドを実行できます。
ネットワーク管理者に連絡して、クラスターの CNI ネットワークへの直接接続を設定します。
クラスター モードの IP アドレス
クラスター ノードに接続する前に、ノードの IP アドレスを見つける必要があります。 ノードの IP アドレスは、Azure portal または Azure CLI を使用して確認できます。
Azure CLI の使用
環境に合わせて RESOURCE_GROUP、CLUSTER_NAME、および SUBSCRIPTION_ID 変数を設定します。
RESOURCE_GROUP="myResourceGroup" CLUSTER_NAME="myNexusK8sCluster" SUBSCRIPTION_ID="<Subscription ID>"
次のコマンドを実行して、ノードの IP アドレスを取得します。
az networkcloud kubernetescluster show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID -o json | jq '.nodes[] | select(any(.networkAttachments[]; .networkAttachmentName == "defaultcni")) | {name: .name, ipv4Address: (.networkAttachments[] | select(.networkAttachmentName == "defaultcni").ipv4Address)}'
コマンドの出力例を次に示します。
{ "name": "mynexusk8scluster-0b32128d-agentpool1-md-7h9t4", "ipv4Address": "10.5.54.47" } { "name": "mynexusk8scluster-0b32128d-agentpool1-md-c6xbs", "ipv4Address": "10.5.54.48" } { "name": "mynexusk8scluster-0b32128d-control-plane-qq5jm", "ipv4Address": "10.5.54.46" }
Azure portal を使用する
SSH 用 VM の IP アドレスを検索するには、次の手順に従います。
- [Azure portal] に移動し、ユーザー名とパスワードを使用してサインインします。
- 検索ボックスに「Kubernetes Cluster (Operator Nexus)」と入力し、結果の一覧から "Kubernetes Cluster" サービスを選択します。
- 検索を使用するために必要な、特定の "Nexus Kubernetes クラスター" リソースを探します。
- 適切なリソースが見つかったら、その名前とクラスター名を一致させて、Kubernetes クラスターのホーム ページに移動するリソースを選択します。
- 適切なリソースが見つかったら、その名前とクラスター名を一致させて、左側のメニューの [Kubernetes クラスター ノード] セクションに移動します。
- 目的の Kubernetes ノード名を選択して、その詳細を表示します。
- [接続されたネットワーク] タブで、CNI ネットワークとして使用されているノードの "レイヤー 3 ネットワーク" の IP アドレスを見つけます。
次のステップ
Azure Operator Nexus Kubernetes クラスターの詳細については、次の記事を参照してください。