Share via


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 接続サーバーです。

  1. 必要な変数を設定します。 プレースホルダーを、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)
    
  2. 使用可能なクラスター ノードの名前を取得します。

    az networkcloud kubernetescluster show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --subscription $SUBSCRIPTION_ID -o json | jq '.nodes[].name'
    
  3. サンプル出力:

    "mynexusk8scluster-0b32128d-agentpool1-md-7h9t4"
    "mynexusk8scluster-0b32128d-agentpool1-md-c6xbs"
    "mynexusk8scluster-0b32128d-control-plane-qq5jm"
    
  4. クラスター ノード名を VM_NAME 変数に設定します。

    VM_NAME="mynexusk8scluster-0b32128d-agentpool1-md-7h9t4"
    
  5. 次のコマンドを実行して、クラスター ノードに 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 を取得できます。

  1. CLUSTER_NAME 変数、RESOURCE_GROUP 変数、および SUBSCRIPTION_ID 変数を設定します。

    CLUSTER_NAME="myNexusK8sCluster"
    RESOURCE_GROUP="myResourceGroup"
    SUBSCRIPTION_ID=<set the correct subscription_id>
    
  2. 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)
    
  3. 次のコマンドは、指定された Nexus Kubernetes クラスターの Kubernetes API サーバーに接続できる connectedk8s プロキシを起動します。

    az connectedk8s proxy -n $CLUSTER_NAME  -g $MANAGED_RESOURCE_GROUP &
    
  4. kubectl を使用して、クラスターに要求を送信します。

    kubectl get pods -A
    

    これで、すべてのノードの一覧が含まれているクラスターからの応答が表示されます。

注意

"アクセス トークンをクライアント プロキシに投稿できませんでした。MSI に接続できませんでした" というエラー メッセージが表示された場合は、az login を実行して Azure で再認証する必要がある場合があります。

Azure Arc for Kubernetes 経由でクラスター ノードにアクセスする

Arc for Kubernetes 経由でクラスターに接続したら、kubectl debug コマンドを使って個々の Kubernetes ノードに接続し、ノードで特権コンテナーを実行できます。

  1. 以下のように 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
    
  2. 以下のようにノードで特権コンテナーを起動し、それに接続します。

    $> 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 を実行します。

  3. ポッドのデバッグが完了したら、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 の使用

  1. 環境に合わせて RESOURCE_GROUP、CLUSTER_NAME、および SUBSCRIPTION_ID 変数を設定します。

    RESOURCE_GROUP="myResourceGroup"
    CLUSTER_NAME="myNexusK8sCluster"
    SUBSCRIPTION_ID="<Subscription ID>"
    
  2. 次のコマンドを実行して、ノードの 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)}'
    
  3. コマンドの出力例を次に示します。

    {
      "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 アドレスを検索するには、次の手順に従います。

  1. [Azure portal] に移動し、ユーザー名とパスワードを使用してサインインします。
  2. 検索ボックスに「Kubernetes Cluster (Operator Nexus)」と入力し、結果の一覧から "Kubernetes Cluster" サービスを選択します。

Nexus Kubernetes サービスを参照しているスクリーンショット。

  1. 検索を使用するために必要な、特定の "Nexus Kubernetes クラスター" リソースを探します。

Nexus Kubernetes クラスターを参照しているスクリーンショット。

  1. 適切なリソースが見つかったら、その名前とクラスター名を一致させて、Kubernetes クラスターのホーム ページに移動するリソースを選択します。

Nexus Kubernetes クラスターのホーム ページのスクリーンショット。

  1. 適切なリソースが見つかったら、その名前とクラスター名を一致させて、左側のメニューの [Kubernetes クラスター ノード] セクションに移動します。

Nexus Kubernetes クラスター ノードを参照しているスクリーンショット。

  1. 目的の Kubernetes ノード名を選択して、その詳細を表示します。
  2. [接続されたネットワーク] タブで、CNI ネットワークとして使用されているノードの "レイヤー 3 ネットワーク" の IP アドレスを見つけます。

Nexus Kubernetes クラスター ノード ネットワークを参照しているスクリーンショット。

次のステップ

Azure Operator Nexus Kubernetes クラスターの詳細については、次の記事を参照してください。