検索

7.5. 仮想マシンへの SSH アクセスの設定

download PDF

次の方法を使用して、仮想マシンへの SSH アクセスを設定できます。

  • virtctl ssh コマンド

    SSH キーペアを作成し、公開キーを仮想マシンに追加し、秘密キーを使用して virtctl ssh コマンドを実行して仮想マシンに接続します。

    cloud-init データソースを使用して設定できるゲストオペレーティングシステムを使用して、実行時または最初の起動時に Red Hat Enterprise Linux (RHEL) 9 仮想マシンに公開 SSH キーを追加できます。

  • virtctl port-forward コマンド

    virtctl port-foward コマンドを .ssh/config ファイルに追加し、OpenSSH を使用して仮想マシンに接続します。

  • サービス

    サービスを作成し、そのサービスを仮想マシンに関連付け、サービスによって公開されている IP アドレスとポートに接続します。

  • セカンダリーネットワーク

    セカンダリーネットワークを設定し、仮想マシンをセカンダリーネットワークインターフェイスに接続し、DHCP によって割り当てられた IP アドレスに接続します。

7.5.1. アクセス設定の考慮事項

仮想マシンへのアクセスを設定する各方法には、トラフィックの負荷とクライアントの要件に応じて利点と制限があります。

サービスは優れたパフォーマンスを提供するため、クラスターの外部からアクセスされるアプリケーションに推奨されます。

内部クラスターネットワークがトラフィック負荷を処理できない場合は、セカンダリーネットワークを設定できます。

virtctl ssh および virtctl port-forwarding コマンド
  • 設定が簡単。
  • 仮想マシンのトラブルシューティングに推奨されます。
  • Ansible を使用した仮想マシンの自動設定には、virtctl port-forwarding が推奨されます。
  • 動的公開 SSH キーを使用して、Ansible で仮想マシンをプロビジョニングできます。
  • API サーバーに負担がかかるため、Rsync やリモートデスクトッププロトコルなどの高トラフィックのアプリケーションには推奨されません。
  • API サーバーはトラフィック負荷を処理できる必要があります。
  • クライアントは API サーバーにアクセスできる必要があります。
  • クライアントはクラスターへのアクセス認証情報を持っている必要があります。
クラスター IP サービス
  • 内部クラスターネットワークはトラフィック負荷を処理できる必要があります。
  • クライアントは内部クラスター IP アドレスにアクセスできる必要があります。
ノードポートサービス
  • 内部クラスターネットワークはトラフィック負荷を処理できる必要があります。
  • クライアントは少なくとも 1 つのノードにアクセスできる必要があります。
ロードバランサーサービス
  • ロードバランサーを設定する必要があります。
  • 各ノードは、1 つ以上のロードバランサーサービスのトラフィック負荷を処理できなければなりません。
セカンダリーネットワーク
  • トラフィックが内部クラスターネットワークを経由しないため、優れたパフォーマンスが得られます。
  • ネットワークトポロジーへの柔軟なアプローチを可能にします。
  • 仮想マシンはセカンダリーネットワークに直接公開されるため、ゲストオペレーティングシステムは適切なセキュリティーを備えて設定する必要があります。仮想マシンが侵害されると、侵入者がセカンダリーネットワークにアクセスする可能性があります。

7.5.2. virtctl ssh の使用

virtctl ssh コマンドを実行することで、公開 SSH キーを仮想マシンに追加し、仮想マシンに接続できます。

この方法の設定は簡単です。ただし、API サーバーに負担がかかるため、トラフィック負荷が高い場合には推奨されません。

7.5.2.1. 静的および動的 SSH キー管理について

公開 SSH キーは、最初の起動時に静的に、または実行時に動的に仮想マシンに追加できます。

注記

Red Hat Enterprise Linux (RHEL) 9 のみが動的キーインジェクションをサポートしています。

静的 SSH キー管理

cloud-init データソースを使用して、設定をサポートするゲストオペレーティングシステムを備えた仮想マシンに静的に管理された SSH キーを追加できます。キーは、最初の起動時に仮想マシンに追加されます。

次のいずれかの方法を使用してキーを追加できます。

  • Web コンソールまたはコマンドラインを使用して単一の仮想マシンを作成する場合は、その仮想マシンにキーを追加します。
  • Web コンソールを使用してプロジェクトにキーを追加します。その後、このプロジェクトで作成した仮想マシンにキーが自動的に追加されます。

ユースケース

  • 仮想マシン所有者は、新しく作成したすべての仮想マシンを 1 つのキーでプロビジョニングできます。
動的な SSH キー管理

Red Hat Enterprise Linux (RHEL) 9 がインストールされている仮想マシンに対して動的 SSH キー管理を有効にすることができます。その後、実行時にキーを更新できます。キーは、Red Hat ブートソースとともにインストールされる QEMU ゲストエージェントによって追加されます。

セキュリティー上の理由から、動的キー管理を無効にできます。その後、仮想マシンは作成元のイメージのキー管理設定を継承します。

ユースケース

  • 仮想マシンへのアクセスの付与または取り消し: クラスター管理者は、namespace 内のすべての仮想マシンに適用される Secret オブジェクトに個々のユーザーのキーを追加または削除することで、リモート仮想マシンアクセスを付与または取り消すことができます。
  • ユーザーアクセス: 作成および管理するすべての仮想マシンにアクセス認証情報を追加できます。
  • Ansible プロビジョニング:

    • 運用チームのメンバーは、Ansible プロビジョニングに使用されるすべてのキーを含む 1 つのシークレットを作成できます。
    • 仮想マシン所有者は、仮想マシンを作成し、Ansible プロビジョニングに使用されるキーをアタッチできます。
  • キーのローテーション:

    • クラスター管理者は、namespace 内の仮想マシンによって使用される Ansible プロビジョナーキーをローテーションできます。
    • ワークロード所有者は、管理する仮想マシンのキーをローテーションできます。

7.5.2.2. 静的キー管理

OpenShift Container Platform Web コンソールまたはコマンドラインを使用して仮想マシンを作成するときに、静的に管理される公開 SSH キーを追加できます。このキーは、仮想マシンが初めて起動するときに、cloud-init データソースとして追加されます。

Web コンソールを使用して仮想マシンを作成するときに、公開 SSH 鍵をプロジェクトに追加することもできます。鍵はシークレットとして保存され、作成するすべての仮想マシンに自動的に追加されます。

注記

シークレットは namespace リソースであるため、シークレットをプロジェクトに追加し、その後仮想マシンを削除しても、シークレットは保持されます。シークレットは、手動で削除する必要があります。

7.5.2.2.1. テンプレートから仮想マシンを作成するときにキーを追加する

OpenShift Container Platform Web コンソールを使用して仮想マシンを作成するときに、静的に管理される公開 SSH キーを追加できます。キーは、最初の起動時に cloud-init データソースとして仮想マシンに追加されます。このメソッドは、cloud-init ユーザーデータには影響しません。

オプション: プロジェクトにキーを追加できます。その後、このキーはプロジェクトで作成した仮想マシンに自動的に追加されます。

前提条件

  • ssh-keygen コマンドを実行して、SSH 鍵ペアを生成しました。

手順

  1. Web コンソールで Virtualization Catalog に移動します。
  2. テンプレートタイルをクリックします。

    ゲストオペレーティングシステムは、cloud-init データソースからの設定をサポートする必要があります。

  3. Customize VirtualMachine をクリックします。
  4. Next をクリックします。
  5. Scripts タブをクリックします。
  6. 公開 SSH キーをまだプロジェクトに追加していない場合は、Authorized SSH key の横にある編集アイコンをクリックし、次のオプションのいずれかを選択します。

    • Use existing: シークレットリストからシークレットを選択します。
    • Add new:

      1. SSH キーファイルを参照するか、ファイルをキーフィールドに貼り付けます。
      2. シークレット名を入力します。
      3. オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
  7. Save をクリックします。
  8. Create VirtualMachine をクリックします。

    VirtualMachine details ページには、仮想マシン作成の進行状況が表示されます。

検証

  • Configuration タブの Scripts タブをクリックします。

    シークレット名は Authorized SSH key セクションに表示されます。

7.5.2.2.2. Web コンソールを使用してインスタンスタイプから仮想マシンを作成するときにキーを追加する

OpenShift Container Platform Web コンソールを使用して、インスタンスタイプから仮想マシンを作成できます。Web コンソールを使用して、既存のスナップショットをコピーするか仮想マシンを複製して、仮想マシンを作成することもできます。

使用可能な起動可能なボリュームのリストから仮想マシンを作成できます。Linux ベースまたは Windows ベースのボリュームをリストに追加できます。

OpenShift Container Platform Web コンソールを使用してインスタンスタイプから仮想マシンを作成するときに、静的に管理される SSH キーを追加できます。キーは、最初の起動時に cloud-init データソースとして仮想マシンに追加されます。このメソッドは、cloud-init ユーザーデータには影響しません。

手順

  1. Web コンソールで、Virtualization Catalog に移動します。

    InstanceTypes タブがデフォルトで開きます。

  2. 次のオプションのいずれかを選択します。

    • リストから適切な起動可能なボリュームを選択します。リストが切り捨てられている場合は、Show all ボタンをクリックしてリスト全体を表示します。

      注記

      ブート可能ボリュームテーブルには、openshift-virtualization-os-images namespace 内の instancetype.kubevirt.io/default-preference ラベルを持つボリュームのみリストされます。

      • オプション: 星アイコンをクリックして、ブート可能ボリュームをお気に入りとして指定します。星付きのブート可能ボリュームは、ボリュームリストの最初に表示されます。
    • 新しいボリュームをアップロードするか、既存の永続ボリューム要求 (PVC)、ボリュームスナップショット、または containerDisk ボリュームを使用するには Add volume をクリックします。Save をクリックします。

      クラスターで使用できないオペレーティングシステムのロゴは、リストの下部に表示されます。Add volume リンクをクリックすると、必要なオペレーティングシステムのボリュームを追加できます。

      さらに、Create a Windows boot source クイックスタートへのリンクもあります。Select volume to boot from の横にある疑問符アイコンの上にポインターを置くと、ポップオーバーに同じリンクが表示されます。

      環境をインストールした直後、または環境が切断された直後は、起動元のボリュームのリストは空になります。その場合、Windows、RHEL、Linux の 3 つのオペレーティングシステムのロゴが表示されます。Add volume ボタンをクリックすると、要件を満たす新しいボリュームを追加できます。

  3. インスタンスタイプのタイルをクリックし、ワークロードに適したリソースサイズを選択します。
  4. オプション: 起動元のボリュームに適用される仮想マシンの詳細 (仮想マシンの名前を含む) を選択します。

    • Linux ベースのボリュームの場合は、次の手順に従って SSH を設定します。

      1. 公開 SSH キーをまだプロジェクトに追加していない場合は、VirtualMachine details セクションの Authorized SSH key の横にある編集アイコンをクリックします。
      2. 以下のオプションのいずれかを選択します。

        • Use existing: シークレットリストからシークレットを選択します。
        • Add new: 以下の手順に従ってください。

          1. 公開 SSH キーファイルを参照するか、ファイルをキーフィールドに貼り付けます。
          2. シークレット名を入力します。
          3. オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
      3. Save をクリックします。
    • Windows ボリュームの場合は、次のいずれかの手順に従って sysprep オプションを設定します。

      • Windows ボリュームに sysprep オプションをまだ追加していない場合は、次の手順に従います。

        1. VirtualMachine details セクションの Sysprep の横にある編集アイコンをクリックします。
        2. Autoattend.xml アンサーファイルを追加します。
        3. Unattend.xml アンサーファイルを追加します。
        4. Save をクリックします。
      • Windows ボリュームに既存の sysprep オプションを使用する場合は、次の手順に従います。

        1. 既存の sysprep を添付 をクリックします。
        2. 既存の sysprep Unattend.xml アンサーファイルの名前を入力します。
        3. Save をクリックします。
  5. オプション: Windows 仮想マシンを作成する場合は、Windows ドライバーディスクをマウントできます。

    1. Customize VirtualMachine ボタンをクリックします。
    2. VirtualMachine details ページで、Storage をクリックします。
    3. Mount Windows drivers disk チェックボックスを選択します。
  6. オプション: View YAML & CLI をクリックして YAML ファイルを表示します。CLI をクリックして CLI コマンドを表示します。YAML ファイルの内容または CLI コマンドをダウンロードまたはコピーすることもできます。
  7. Create VirtualMachine をクリックします。

仮想マシンの作成後、VirtualMachine details ページでステータスを監視できます。

7.5.2.2.3. コマンドラインを使用して仮想マシンを作成するときにキーを追加する

コマンドラインを使用して仮想マシンを作成するときに、静的に管理される公開 SSH キーを追加できます。キーは最初の起動時に仮想マシンに追加されます。

キーは、cloud-init データソースとして仮想マシンに追加されます。このメソッドは、cloud-init ユーザーデータ内のアプリケーションデータからアクセス認証情報を分離します。このメソッドは、cloud-init ユーザーデータには影響しません。

前提条件

  • ssh-keygen コマンドを実行して、SSH 鍵ペアを生成しました。

手順

  1. VirtualMachine オブジェクトと Secret オブジェクトのマニフェストファイルを作成します。

    マニフェストの例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
      namespace: example-namespace
    spec:
      dataVolumeTemplates:
        - metadata:
            name: example-vm-volume
          spec:
            sourceRef:
              kind: DataSource
              name: rhel9
              namespace: openshift-virtualization-os-images
            storage:
              resources: {}
      instancetype:
        name: u1.medium
      preference:
        name: rhel.9
      running: true
      template:
        spec:
          domain:
            devices: {}
          volumes:
            - dataVolume:
                name: example-vm-volume
              name: rootdisk
            - cloudInitNoCloud: 1
                userData: |-
                  #cloud-config
                  user: cloud-user
              name: cloudinitdisk
          accessCredentials:
            - sshPublicKey:
                propagationMethod:
                  noCloud: {}
                source:
                  secret:
                    secretName: authorized-keys 2
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: authorized-keys
    data:
      key: c3NoLXJzYSB... 3

    1
    cloudInitNoCloud データソースを指定します。
    2
    Secret オブジェクト名を指定します。
    3
    公開 SSH キーを貼り付けます。
  2. 次のコマンドを実行して、VirtualMachine オブジェクトと Secret オブジェクトを作成します。

    $ oc create -f <manifest_file>.yaml
  3. 次のコマンドを実行して VM を起動します。

    $ virtctl start vm example-vm -n example-namespace

検証

  • 仮想マシン設定を取得します。

    $ oc describe vm example-vm -n example-namespace

    出力例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
      namespace: example-namespace
    spec:
      template:
        spec:
          accessCredentials:
            - sshPublicKey:
                propagationMethod:
                  noCloud: {}
                source:
                  secret:
                    secretName: authorized-keys
    # ...

7.5.2.3. 動的なキー管理

OpenShift Container Platform Web コンソールまたはコマンドラインを使用して、仮想マシンの動的キーインジェクションを有効にできます。その後、実行時にキーを更新できます。

注記

Red Hat Enterprise Linux (RHEL) 9 のみが動的キーインジェクションをサポートしています。

動的キーインジェクションを無効にすると、仮想マシンは作成元のイメージのキー管理方法を継承します。

7.5.2.3.1. テンプレートから仮想マシンを作成するときに動的キーインジェクションを有効にする

OpenShift Container Platform Web コンソールを使用してテンプレートから仮想マシンを作成するときに、動的パブリック SSH キーインジェクションを有効にすることができます。その後、実行時にキーを更新できます。

注記

Red Hat Enterprise Linux (RHEL) 9 のみが動的キーインジェクションをサポートしています。

キーは、RHEL 9 とともにインストールされる QEMU ゲストエージェントによって仮想マシンに追加されます。

前提条件

  • ssh-keygen コマンドを実行して、SSH 鍵ペアを生成しました。

手順

  1. Web コンソールで Virtualization Catalog に移動します。
  2. Red Hat Enterprise Linux 9 VM タイルをクリックします。
  3. Customize VirtualMachine をクリックします。
  4. Next をクリックします。
  5. Scripts タブをクリックします。
  6. 公開 SSH キーをまだプロジェクトに追加していない場合は、Authorized SSH key の横にある編集アイコンをクリックし、次のオプションのいずれかを選択します。

    • Use existing: シークレットリストからシークレットを選択します。
    • Add new:

      1. SSH キーファイルを参照するか、ファイルをキーフィールドに貼り付けます。
      2. シークレット名を入力します。
      3. オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
  7. Dynamic SSH key injection をオンに設定します。
  8. Save をクリックします。
  9. Create VirtualMachine をクリックします。

    VirtualMachine details ページには、仮想マシン作成の進行状況が表示されます。

検証

  • Configuration タブの Scripts タブをクリックします。

    シークレット名は Authorized SSH key セクションに表示されます。

7.5.2.3.2. Web コンソールを使用してインスタンスタイプから仮想マシンを作成するときに動的キーインジェクションを有効にする

OpenShift Container Platform Web コンソールを使用して、インスタンスタイプから仮想マシンを作成できます。Web コンソールを使用して、既存のスナップショットをコピーするか仮想マシンを複製して、仮想マシンを作成することもできます。

使用可能な起動可能なボリュームのリストから仮想マシンを作成できます。Linux ベースまたは Windows ベースのボリュームをリストに追加できます。

OpenShift Container Platform Web コンソールを使用してインスタンスタイプから仮想マシンを作成するときに、動的 SSH キーインジェクションを有効にできます。その後、実行時にキーを追加または取り消すことができます。

注記

Red Hat Enterprise Linux (RHEL) 9 のみが動的キーインジェクションをサポートしています。

キーは、RHEL 9 とともにインストールされる QEMU ゲストエージェントによって仮想マシンに追加されます。

手順

  1. Web コンソールで、Virtualization Catalog に移動します。

    InstanceTypes タブがデフォルトで開きます。

  2. 次のオプションのいずれかを選択します。

    • リストから適切な起動可能なボリュームを選択します。リストが切り捨てられている場合は、Show all ボタンをクリックしてリスト全体を表示します。

      注記

      ブート可能ボリュームテーブルには、openshift-virtualization-os-images namespace 内の instancetype.kubevirt.io/default-preference ラベルを持つボリュームのみリストされます。

      • オプション: 星アイコンをクリックして、ブート可能ボリュームをお気に入りとして指定します。星付きのブート可能ボリュームは、ボリュームリストの最初に表示されます。
    • 新しいボリュームをアップロードするか、既存の永続ボリューム要求 (PVC)、ボリュームスナップショット、または containerDisk ボリュームを使用するには Add volume をクリックします。Save をクリックします。

      クラスターで使用できないオペレーティングシステムのロゴは、リストの下部に表示されます。Add volume リンクをクリックすると、必要なオペレーティングシステムのボリュームを追加できます。

      さらに、Create a Windows boot source クイックスタートへのリンクもあります。Select volume to boot from の横にある疑問符アイコンの上にポインターを置くと、ポップオーバーに同じリンクが表示されます。

      環境をインストールした直後、または環境が切断された直後は、起動元のボリュームのリストは空になります。その場合、Windows、RHEL、Linux の 3 つのオペレーティングシステムのロゴが表示されます。Add volume ボタンをクリックすると、要件を満たす新しいボリュームを追加できます。

  3. インスタンスタイプのタイルをクリックし、ワークロードに適したリソースサイズを選択します。
  4. Red Hat Enterprise Linux 9 VM タイルをクリックします。
  5. オプション: 起動元のボリュームに適用される仮想マシンの詳細 (仮想マシンの名前を含む) を選択します。

    • Linux ベースのボリュームの場合は、次の手順に従って SSH を設定します。

      1. 公開 SSH キーをまだプロジェクトに追加していない場合は、VirtualMachine details セクションの Authorized SSH key の横にある編集アイコンをクリックします。
      2. 以下のオプションのいずれかを選択します。

        • Use existing: シークレットリストからシークレットを選択します。
        • Add new: 以下の手順に従ってください。

          1. 公開 SSH キーファイルを参照するか、ファイルをキーフィールドに貼り付けます。
          2. シークレット名を入力します。
          3. オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
      3. Save をクリックします。
    • Windows ボリュームの場合は、次のいずれかの手順に従って sysprep オプションを設定します。

      • Windows ボリュームに sysprep オプションをまだ追加していない場合は、次の手順に従います。

        1. VirtualMachine details セクションの Sysprep の横にある編集アイコンをクリックします。
        2. Autoattend.xml アンサーファイルを追加します。
        3. Unattend.xml アンサーファイルを追加します。
        4. Save をクリックします。
      • Windows ボリュームに既存の sysprep オプションを使用する場合は、次の手順に従います。

        1. 既存の sysprep を添付 をクリックします。
        2. 既存の sysprep Unattend.xml アンサーファイルの名前を入力します。
        3. Save をクリックします。
  6. VirtualMachine details セクションで Dynamic SSH key injection をオンに設定します。
  7. オプション: Windows 仮想マシンを作成する場合は、Windows ドライバーディスクをマウントできます。

    1. Customize VirtualMachine ボタンをクリックします。
    2. VirtualMachine details ページで、Storage をクリックします。
    3. Mount Windows drivers disk チェックボックスを選択します。
  8. オプション: View YAML & CLI をクリックして YAML ファイルを表示します。CLI をクリックして CLI コマンドを表示します。YAML ファイルの内容または CLI コマンドをダウンロードまたはコピーすることもできます。
  9. Create VirtualMachine をクリックします。

仮想マシンの作成後、VirtualMachine details ページでステータスを監視できます。

7.5.2.3.3. Web コンソールを使用した動的 SSH キーインジェクションの有効化

OpenShift Container Platform Web コンソールを使用して、仮想マシンの動的キーインジェクションを有効にできます。その後、実行時に公開 SSH キーを更新できます。

キーは、Red Hat Enterprise Linux (RHEL) 9 とともにインストールされる QEMU ゲストエージェントによって仮想マシンに追加されます。

前提条件

  • ゲスト OS は RHEL 9 です。

手順

  1. Web コンソールで Virtualization VirtualMachines に移動します。
  2. 仮想マシンを選択して、VirtualMachine details ページを開きます。
  3. Configuration タブで、Scripts をクリックします。
  4. 公開 SSH キーをまだプロジェクトに追加していない場合は、Authorized SSH key の横にある編集アイコンをクリックし、次のオプションのいずれかを選択します。

    • Use existing: シークレットリストからシークレットを選択します。
    • Add new:

      1. SSH キーファイルを参照するか、ファイルをキーフィールドに貼り付けます。
      2. シークレット名を入力します。
      3. オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
  5. Dynamic SSH key injection をオンに設定します。
  6. Save をクリックします。
7.5.2.3.4. コマンドラインを使用して動的キーインジェクションを有効にする

コマンドラインを使用して、仮想マシンの動的キーインジェクションを有効にすることができます。その後、実行時に公開 SSH キーを更新できます。

注記

Red Hat Enterprise Linux (RHEL) 9 のみが動的キーインジェクションをサポートしています。

キーは QEMU ゲストエージェントによって仮想マシンに追加され、RHEL 9 とともに自動的にインストールされます。

前提条件

  • ssh-keygen コマンドを実行して、SSH 鍵ペアを生成しました。

手順

  1. VirtualMachine オブジェクトと Secret オブジェクトのマニフェストファイルを作成します。

    マニフェストの例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
      namespace: example-namespace
    spec:
      dataVolumeTemplates:
        - metadata:
            name: example-vm-volume
          spec:
            sourceRef:
              kind: DataSource
              name: rhel9
              namespace: openshift-virtualization-os-images
            storage:
              resources: {}
      instancetype:
        name: u1.medium
      preference:
        name: rhel.9
      running: true
      template:
        spec:
          domain:
            devices: {}
          volumes:
            - dataVolume:
                name: example-vm-volume
              name: rootdisk
            - cloudInitNoCloud: 1
                userData: |-
                  #cloud-config
                  runcmd:
                  - [ setsebool, -P, virt_qemu_ga_manage_ssh, on ]
              name: cloudinitdisk
          accessCredentials:
            - sshPublicKey:
                propagationMethod:
                  qemuGuestAgent:
                    users: ["cloud-user"]
                source:
                  secret:
                    secretName: authorized-keys 2
    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: authorized-keys
    data:
      key: c3NoLXJzYSB... 3

    1
    cloudInitNoCloud データソースを指定します。
    2
    Secret オブジェクト名を指定します。
    3
    公開 SSH キーを貼り付けます。
  2. 次のコマンドを実行して、VirtualMachine オブジェクトと Secret オブジェクトを作成します。

    $ oc create -f <manifest_file>.yaml
  3. 次のコマンドを実行して VM を起動します。

    $ virtctl start vm example-vm -n example-namespace

検証

  • 仮想マシン設定を取得します。

    $ oc describe vm example-vm -n example-namespace

    出力例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
      namespace: example-namespace
    spec:
      template:
        spec:
          accessCredentials:
            - sshPublicKey:
                propagationMethod:
                  qemuGuestAgent:
                    users: ["cloud-user"]
                source:
                  secret:
                    secretName: authorized-keys
    # ...

7.5.2.4. virtctl ssh コマンドの使用

virtcl ssh コマンドを使用して、実行中の仮想マシンにアクセスできます。

前提条件

  • virtctl コマンドラインツールがインストールされました。
  • 公開 SSH キーを仮想マシンに追加しました。
  • SSH クライアントがインストールされています。
  • virtctl ツールがインストールされている環境には、仮想マシンへのアクセスに必要なクラスターパーミッションがある。たとえば、oc login を実行するか、KUBECONFIG 環境変数を設定します。

手順

  • virtctl ssh コマンドを実行します。

    $ virtctl -n <namespace> ssh <username>@example-vm -i <ssh_key> 1
    1
    namespace、ユーザー名、SSH 秘密キーを指定します。デフォルトの SSH キーの場所は /home/user/.ssh です。キーを別の場所に保存する場合は、パスを指定する必要があります。

    $ virtctl -n my-namespace ssh cloud-user@example-vm -i my-key

ヒント

VirtualMachines ページの仮想マシンの横にあるオプション kebab メニューから、Copy SSH command を選択すると、Web コンソールで virtctl ssh コマンドをコピーできます。

7.5.3. virtctl port-forward コマンドの使用

ローカルの OpenSSH クライアントと virtctl port-forward コマンドを使用して、実行中の仮想マシン (VM) に接続できます。Ansible でこの方法を使用すると、VM の設定を自動化できます。

ポート転送トラフィックはコントロールプレーン経由で送信されるため、この方法はトラフィックの少ないアプリケーションに推奨されます。ただし、API サーバーに負荷が大きいため、Rsync や Remote Desktop Protocol などのトラフィックの高いアプリケーションには推奨されません。

前提条件

  • virtctl クライアントをインストールしている。
  • アクセスする仮想マシンが実行されている。
  • virtctl ツールがインストールされている環境には、仮想マシンへのアクセスに必要なクラスターパーミッションがある。たとえば、oc login を実行するか、KUBECONFIG 環境変数を設定します。

手順

  1. 以下のテキストをクライアントマシンの ~/.ssh/config ファイルに追加します。

    Host vm/*
      ProxyCommand virtctl port-forward --stdio=true %h %p
  2. 次のコマンドを実行して、仮想マシンに接続します。

    $ ssh <user>@vm/<vm_name>.<namespace>

7.5.4. SSH アクセス用のサービスを使用する

仮想マシンのサービスを作成し、サービスによって公開される IP アドレスとポートに接続できます。

サービスは優れたパフォーマンスを提供するため、クラスターの外部またはクラスター内からアクセスされるアプリケーションに推奨されます。受信トラフィックはファイアウォールによって保護されます。

クラスターネットワークがトラフィック負荷を処理できない場合は、仮想マシンアクセスにセカンダリーネットワークを使用することを検討してください。

7.5.4.1. サービスについて

Kubernetes サービスは一連の Pod で実行されているアプリケーションへのクライアントのネットワークアクセスを公開します。サービスは抽象化、負荷分散を提供し、タイプ NodePortLoadBalancer の場合は外部世界への露出を提供します。

ClusterIP
内部 IP アドレスでサービスを公開し、クラスター内の他のアプリケーションに DNS 名として公開します。1 つのサービスを複数の仮想マシンにマッピングできます。クライアントがサービスに接続しようとすると、クライアントのリクエストは使用可能なバックエンド間で負荷分散されます。ClusterIP はデフォルトのサービスタイプです。
NodePort
クラスター内の選択した各ノードの同じポートでサービスを公開します。NodePort は、ノード自体がクライアントから外部にアクセスできる限り、クラスターの外部からポートにアクセスできるようにします。
LoadBalancer
現在のクラウド(サポートされている場合)に外部ロードバランサーを作成し、固定の外部 IP アドレスをサービスに割り当てます。
注記

オンプレミスクラスターの場合、MetalLB Operator をデプロイすることで負荷分散サービスを設定できます。

7.5.4.2. サービスの作成

OpenShift Container Platform Web コンソール、virtctl コマンドラインツール、または YAML ファイルを使用して、仮想マシンを公開するサービスを作成できます。

7.5.4.2.1. Web コンソールを使用したロードバランサーサービスの作成の有効化

OpenShift Container Platform Web コンソールを使用して、仮想マシン (VM) のロードバランサーサービスの作成を有効にすることができます。

前提条件

  • クラスターのロードバランサーが設定されました。
  • cluster-admin ロールを持つユーザーとしてログインしている。

手順

  1. Virtualization Overview に移動します。
  2. Settings タブで、Cluster をクリックします。
  3. Expand General settingsSSH configuration を展開します。
  4. SSH over LoadBalancer service をオンに設定します。
7.5.4.2.2. Web コンソールを使用したサービスの作成

OpenShift Container Platform Web コンソールを使用して、仮想マシンのノードポートまたはロードバランサーサービスを作成できます。

前提条件

  • ロードバランサーまたはノードポートをサポートするようにクラスターネットワークが設定されている。
  • ロードバランサーサービスを作成するためにロードバランサーサービスの作成が有効化されている。

手順

  1. VirtualMachines に移動し、仮想マシンを選択して、VirtualMachine details ページを表示します。
  2. Details タブで、SSH service type リストから SSH over LoadBalancer を選択します。
  3. オプション: コピーアイコンをクリックして、SSH コマンドをクリップボードにコピーします。

検証

  • Details タブの Services ペインをチェックして、新しいサービスを表示します。
7.5.4.2.3. virtctl を使用したサービスの作成

virtctl コマンドラインツールを使用して、仮想マシンのサービスを作成できます。

前提条件

  • virtctl コマンドラインツールがインストールされました。
  • サービスをサポートするようにクラスターネットワークを設定しました。
  • virtctl をインストールした環境には、仮想マシンにアクセスするために必要なクラスター権限があります。たとえば、oc login を実行するか、KUBECONFIG 環境変数を設定します。

手順

  • 次のコマンドを実行してサービスを作成します。

    $ virtctl expose vm <vm_name> --name <service_name> --type <service_type> --port <port> 1
    1
    ClusterIPNodePort、または LoadBalancer サービスタイプを指定します。

    $ virtctl expose vm example-vm --name example-service --type NodePort --port 22

検証

  • 以下のコマンドを実行してサービスを確認します。

    $ oc get service

次のステップ

virtctl を使用してサービスを作成した後、VirtualMachine マニフェストの spec.template.metadata.labels スタンザに special: key を追加する必要があります。コマンドラインを使用したサービスの作成 を参照してください。

7.5.4.2.4. コマンドラインを使用したサービスの作成

コマンドラインを使用して、サービスを作成し、それを仮想マシンに関連付けることができます。

前提条件

  • サービスをサポートするようにクラスターネットワークを設定しました。

手順

  1. VirtualMachine マニフェストを編集して、サービス作成のラベルを追加します。

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
      namespace: example-namespace
    spec:
      running: false
      template:
        metadata:
          labels:
            special: key 1
    # ...
    1
    special: keyspec.template.metadata.labels スタンザに追加します。
    注記

    仮想マシンのラベルは Pod に渡されます。special: キー ラベルは、Service マニフェストの spec.selector 属性のラベルと一致する必要があります。

  2. VirtualMachine マニフェストファイルを保存して変更を適用します。
  3. 仮想マシンを公開するための Service マニフェストを作成します。

    apiVersion: v1
    kind: Service
    metadata:
      name: example-service
      namespace: example-namespace
    spec:
    # ...
      selector:
        special: key 1
      type: NodePort 2
      ports: 3
        protocol: TCP
        port: 80
        targetPort: 9376
        nodePort: 30000
    1
    VirtualMachine マニフェストの spec.template.metadata.labels スタンザに追加したラベルを指定します。
    2
    ClusterIPNodePort、または LoadBalancer を指定します。
    3
    仮想マシンから公開するネットワークポートとプロトコルのコレクションを指定します。
  4. サービス マニフェストファイルを保存します。
  5. 以下のコマンドを実行してサービスを作成します。

    $ oc create -f example-service.yaml
  6. 仮想マシンを再起動して変更を適用します。

検証

  • Service オブジェクトをクエリーし、これが利用可能であることを確認します。

    $ oc get service -n example-namespace

7.5.4.3. SSH を使用してサービスによって公開される仮想マシンに接続する

SSH を使用して、サービスによって公開されている仮想マシンに接続できます。

前提条件

  • 仮想マシンを公開するサービスを作成しました。
  • SSH クライアントがインストールされています。
  • クラスターにログインしている。

手順

  • 次のコマンドを実行して仮想マシンにアクセスします。

    $ ssh <user_name>@<ip_address> -p <port> 1
    1
    クラスター IP サービスの場合はクラスター IP、ノードポートサービスの場合はノード IP、またはロードバランサーサービスの場合は外部 IP アドレスを指定します。

7.5.5. SSH アクセスにセカンダリーネットワークを使用する

SSH を使用して、セカンダリーネットワークを設定し、仮想マシンをセカンダリーネットワークインターフェイスに接続し、DHCP によって割り当てられた IP アドレスに接続できます。

重要

セカンダリーネットワークは、トラフィックがクラスターネットワークスタックによって処理されないため、優れたパフォーマンスを提供します。ただし、仮想マシンはセカンダリーネットワークに直接公開されており、ファイアウォールによって保護されません。仮想マシンが侵害されると、侵入者がセカンダリーネットワークにアクセスする可能性があります。この方法を使用する場合は、仮想マシンのオペレーティングシステム内で適切なセキュリティーを設定する必要があります。

ネットワークオプションの詳細はOpenShift Virtualization Tuning & Scaling GuideMultus および SR-IOV ドキュメントを参照してください。

前提条件

7.5.5.1. Web コンソールを使用した仮想マシンネットワークインターフェイスの設定

OpenShift Container Platform Web コンソールを使用して、仮想マシンのネットワークインターフェイスを設定できます。

前提条件

  • ネットワークのネットワーク接続定義を作成しました。

手順

  1. Virtualization VirtualMachines に移動します。
  2. 仮想マシンをクリックして、VirtualMachine details ページを表示します。
  3. Configuration タブで、Network interfaces タブをクリックします。
  4. Add network interface をクリックします。
  5. インターフェイス名を入力し、Network リストからネットワーク接続定義を選択します。
  6. Save をクリックします。
  7. 仮想マシンを再起動して変更を適用します。

7.5.5.2. SSH を使用したセカンダリーネットワークに接続された仮想マシンへの接続

SSH を使用して、セカンダリーネットワークに接続されている仮想マシンに接続できます。

前提条件

  • DHCP サーバーを使用して仮想マシンをセカンダリーネットワークに接続しました。
  • SSH クライアントがインストールされています。

手順

  1. 次のコマンドを実行して、仮想マシンの IP アドレスを取得します。

    $ oc describe vm <vm_name> -n <namespace>

    出力例

    # ...
    Interfaces:
      Interface Name:  eth0
      Ip Address:      10.244.0.37/24
      Ip Addresses:
        10.244.0.37/24
        fe80::858:aff:fef4:25/64
      Mac:             0a:58:0a:f4:00:25
      Name:            default
    # ...

  2. 次のコマンドを実行して、仮想マシンに接続します。

    $ ssh <user_name>@<ip_address> -i <ssh_key>

    $ ssh cloud-user@10.244.0.37 -i ~/.ssh/id_rsa_cloud-user

注記
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.