7.5. 仮想マシンへの SSH アクセスの設定
次の方法を使用して、仮想マシンへの SSH アクセスを設定できます。
SSH キーペアを作成し、公開キーを仮想マシンに追加し、秘密キーを使用して
virtctl ssh
コマンドを実行して仮想マシンに接続します。cloud-init データソースを使用して設定できるゲストオペレーティングシステムを使用して、実行時または最初の起動時に Red Hat Enterprise Linux (RHEL) 9 仮想マシンに公開 SSH キーを追加できます。
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 鍵ペアを生成しました。
手順
-
Web コンソールで Virtualization
Catalog に移動します。 テンプレートタイルをクリックします。
ゲストオペレーティングシステムは、cloud-init データソースからの設定をサポートする必要があります。
- Customize VirtualMachine をクリックします。
- Next をクリックします。
- Scripts タブをクリックします。
公開 SSH キーをまだプロジェクトに追加していない場合は、Authorized SSH key の横にある編集アイコンをクリックし、次のオプションのいずれかを選択します。
- Use existing: シークレットリストからシークレットを選択します。
Add new:
- SSH キーファイルを参照するか、ファイルをキーフィールドに貼り付けます。
- シークレット名を入力します。
- オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
- Save をクリックします。
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 ユーザーデータには影響しません。
手順
Web コンソールで、Virtualization
Catalog に移動します。 InstanceTypes タブがデフォルトで開きます。
次のオプションのいずれかを選択します。
リストから適切な起動可能なボリュームを選択します。リストが切り捨てられている場合は、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 ボタンをクリックすると、要件を満たす新しいボリュームを追加できます。
- インスタンスタイプのタイルをクリックし、ワークロードに適したリソースサイズを選択します。
オプション: 起動元のボリュームに適用される仮想マシンの詳細 (仮想マシンの名前を含む) を選択します。
Linux ベースのボリュームの場合は、次の手順に従って SSH を設定します。
- 公開 SSH キーをまだプロジェクトに追加していない場合は、VirtualMachine details セクションの Authorized SSH key の横にある編集アイコンをクリックします。
以下のオプションのいずれかを選択します。
- Use existing: シークレットリストからシークレットを選択します。
Add new: 以下の手順に従ってください。
- 公開 SSH キーファイルを参照するか、ファイルをキーフィールドに貼り付けます。
- シークレット名を入力します。
- オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
- Save をクリックします。
Windows ボリュームの場合は、次のいずれかの手順に従って sysprep オプションを設定します。
Windows ボリュームに sysprep オプションをまだ追加していない場合は、次の手順に従います。
- VirtualMachine details セクションの Sysprep の横にある編集アイコンをクリックします。
- Autoattend.xml アンサーファイルを追加します。
- Unattend.xml アンサーファイルを追加します。
- Save をクリックします。
Windows ボリュームに既存の sysprep オプションを使用する場合は、次の手順に従います。
- 既存の sysprep を添付 をクリックします。
- 既存の sysprep Unattend.xml アンサーファイルの名前を入力します。
- Save をクリックします。
オプション: Windows 仮想マシンを作成する場合は、Windows ドライバーディスクをマウントできます。
- Customize VirtualMachine ボタンをクリックします。
- VirtualMachine details ページで、Storage をクリックします。
- Mount Windows drivers disk チェックボックスを選択します。
- オプション: View YAML & CLI をクリックして YAML ファイルを表示します。CLI をクリックして CLI コマンドを表示します。YAML ファイルの内容または CLI コマンドをダウンロードまたはコピーすることもできます。
- Create VirtualMachine をクリックします。
仮想マシンの作成後、VirtualMachine details ページでステータスを監視できます。
7.5.2.2.3. コマンドラインを使用して仮想マシンを作成するときにキーを追加する
コマンドラインを使用して仮想マシンを作成するときに、静的に管理される公開 SSH キーを追加できます。キーは最初の起動時に仮想マシンに追加されます。
キーは、cloud-init データソースとして仮想マシンに追加されます。このメソッドは、cloud-init ユーザーデータ内のアプリケーションデータからアクセス認証情報を分離します。このメソッドは、cloud-init ユーザーデータには影響しません。
前提条件
-
ssh-keygen
コマンドを実行して、SSH 鍵ペアを生成しました。
手順
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
次のコマンドを実行して、
VirtualMachine
オブジェクトとSecret
オブジェクトを作成します。$ oc create -f <manifest_file>.yaml
次のコマンドを実行して 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 鍵ペアを生成しました。
手順
-
Web コンソールで Virtualization
Catalog に移動します。 - Red Hat Enterprise Linux 9 VM タイルをクリックします。
- Customize VirtualMachine をクリックします。
- Next をクリックします。
- Scripts タブをクリックします。
公開 SSH キーをまだプロジェクトに追加していない場合は、Authorized SSH key の横にある編集アイコンをクリックし、次のオプションのいずれかを選択します。
- Use existing: シークレットリストからシークレットを選択します。
Add new:
- SSH キーファイルを参照するか、ファイルをキーフィールドに貼り付けます。
- シークレット名を入力します。
- オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
- Dynamic SSH key injection をオンに設定します。
- Save をクリックします。
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 ゲストエージェントによって仮想マシンに追加されます。
手順
Web コンソールで、Virtualization
Catalog に移動します。 InstanceTypes タブがデフォルトで開きます。
次のオプションのいずれかを選択します。
リストから適切な起動可能なボリュームを選択します。リストが切り捨てられている場合は、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 ボタンをクリックすると、要件を満たす新しいボリュームを追加できます。
- インスタンスタイプのタイルをクリックし、ワークロードに適したリソースサイズを選択します。
- Red Hat Enterprise Linux 9 VM タイルをクリックします。
オプション: 起動元のボリュームに適用される仮想マシンの詳細 (仮想マシンの名前を含む) を選択します。
Linux ベースのボリュームの場合は、次の手順に従って SSH を設定します。
- 公開 SSH キーをまだプロジェクトに追加していない場合は、VirtualMachine details セクションの Authorized SSH key の横にある編集アイコンをクリックします。
以下のオプションのいずれかを選択します。
- Use existing: シークレットリストからシークレットを選択します。
Add new: 以下の手順に従ってください。
- 公開 SSH キーファイルを参照するか、ファイルをキーフィールドに貼り付けます。
- シークレット名を入力します。
- オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
- Save をクリックします。
Windows ボリュームの場合は、次のいずれかの手順に従って sysprep オプションを設定します。
Windows ボリュームに sysprep オプションをまだ追加していない場合は、次の手順に従います。
- VirtualMachine details セクションの Sysprep の横にある編集アイコンをクリックします。
- Autoattend.xml アンサーファイルを追加します。
- Unattend.xml アンサーファイルを追加します。
- Save をクリックします。
Windows ボリュームに既存の sysprep オプションを使用する場合は、次の手順に従います。
- 既存の sysprep を添付 をクリックします。
- 既存の sysprep Unattend.xml アンサーファイルの名前を入力します。
- Save をクリックします。
- VirtualMachine details セクションで Dynamic SSH key injection をオンに設定します。
オプション: Windows 仮想マシンを作成する場合は、Windows ドライバーディスクをマウントできます。
- Customize VirtualMachine ボタンをクリックします。
- VirtualMachine details ページで、Storage をクリックします。
- Mount Windows drivers disk チェックボックスを選択します。
- オプション: View YAML & CLI をクリックして YAML ファイルを表示します。CLI をクリックして CLI コマンドを表示します。YAML ファイルの内容または CLI コマンドをダウンロードまたはコピーすることもできます。
- 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 です。
手順
-
Web コンソールで Virtualization
VirtualMachines に移動します。 - 仮想マシンを選択して、VirtualMachine details ページを開きます。
- Configuration タブで、Scripts をクリックします。
公開 SSH キーをまだプロジェクトに追加していない場合は、Authorized SSH key の横にある編集アイコンをクリックし、次のオプションのいずれかを選択します。
- Use existing: シークレットリストからシークレットを選択します。
Add new:
- SSH キーファイルを参照するか、ファイルをキーフィールドに貼り付けます。
- シークレット名を入力します。
- オプション: Automatically apply this key to any new VirtualMachine you create in this project を選択します。
- Dynamic SSH key injection をオンに設定します。
- Save をクリックします。
7.5.2.3.4. コマンドラインを使用して動的キーインジェクションを有効にする
コマンドラインを使用して、仮想マシンの動的キーインジェクションを有効にすることができます。その後、実行時に公開 SSH キーを更新できます。
Red Hat Enterprise Linux (RHEL) 9 のみが動的キーインジェクションをサポートしています。
キーは QEMU ゲストエージェントによって仮想マシンに追加され、RHEL 9 とともに自動的にインストールされます。
前提条件
-
ssh-keygen
コマンドを実行して、SSH 鍵ペアを生成しました。
手順
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
次のコマンドを実行して、
VirtualMachine
オブジェクトとSecret
オブジェクトを作成します。$ oc create -f <manifest_file>.yaml
次のコマンドを実行して 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 ページの仮想マシンの横にあるオプション
メニューから、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
環境変数を設定します。
手順
以下のテキストをクライアントマシンの
~/.ssh/config
ファイルに追加します。Host vm/* ProxyCommand virtctl port-forward --stdio=true %h %p
次のコマンドを実行して、仮想マシンに接続します。
$ ssh <user>@vm/<vm_name>.<namespace>
7.5.4. SSH アクセス用のサービスを使用する
仮想マシンのサービスを作成し、サービスによって公開される IP アドレスとポートに接続できます。
サービスは優れたパフォーマンスを提供するため、クラスターの外部またはクラスター内からアクセスされるアプリケーションに推奨されます。受信トラフィックはファイアウォールによって保護されます。
クラスターネットワークがトラフィック負荷を処理できない場合は、仮想マシンアクセスにセカンダリーネットワークを使用することを検討してください。
7.5.4.1. サービスについて
Kubernetes サービスは一連の Pod で実行されているアプリケーションへのクライアントのネットワークアクセスを公開します。サービスは抽象化、負荷分散を提供し、タイプ NodePort
と LoadBalancer
の場合は外部世界への露出を提供します。
- 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
ロールを持つユーザーとしてログインしている。
手順
-
Virtualization
Overview に移動します。 - Settings タブで、Cluster をクリックします。
- Expand General settings と SSH configuration を展開します。
- SSH over LoadBalancer service をオンに設定します。
7.5.4.2.2. Web コンソールを使用したサービスの作成
OpenShift Container Platform Web コンソールを使用して、仮想マシンのノードポートまたはロードバランサーサービスを作成できます。
前提条件
- ロードバランサーまたはノードポートをサポートするようにクラスターネットワークが設定されている。
- ロードバランサーサービスを作成するためにロードバランサーサービスの作成が有効化されている。
手順
- VirtualMachines に移動し、仮想マシンを選択して、VirtualMachine details ページを表示します。
- Details タブで、SSH service type リストから SSH over LoadBalancer を選択します。
-
オプション: コピーアイコンをクリックして、
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
ClusterIP
、NodePort
、または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. コマンドラインを使用したサービスの作成
コマンドラインを使用して、サービスを作成し、それを仮想マシンに関連付けることができます。
前提条件
- サービスをサポートするようにクラスターネットワークを設定しました。
手順
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: key
をspec.template.metadata.labels
スタンザに追加します。
注記仮想マシンのラベルは Pod に渡されます。
special: キー
ラベルは、Service
マニフェストのspec.selector
属性のラベルと一致する必要があります。-
VirtualMachine
マニフェストファイルを保存して変更を適用します。 仮想マシンを公開するための
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
-
サービス
マニフェストファイルを保存します。 以下のコマンドを実行してサービスを作成します。
$ oc create -f example-service.yaml
- 仮想マシンを再起動して変更を適用します。
検証
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 Guide の Multus および SR-IOV ドキュメントを参照してください。
前提条件
- Linux ブリッジ や SR-IOV などのセカンダリーネットワークを設定しました。
-
Linux ブリッジネットワーク のネットワークアタッチメント定義を作成したか、
SriovNetwork
オブジェクトの作成時に SR-IOV ネットワークオペレータが ネットワークアタッチメント定義 を作成しました。
7.5.5.1. Web コンソールを使用した仮想マシンネットワークインターフェイスの設定
OpenShift Container Platform Web コンソールを使用して、仮想マシンのネットワークインターフェイスを設定できます。
前提条件
- ネットワークのネットワーク接続定義を作成しました。
手順
-
Virtualization
VirtualMachines に移動します。 - 仮想マシンをクリックして、VirtualMachine details ページを表示します。
- Configuration タブで、Network interfaces タブをクリックします。
- Add network interface をクリックします。
- インターフェイス名を入力し、Network リストからネットワーク接続定義を選択します。
- Save をクリックします。
- 仮想マシンを再起動して変更を適用します。
7.5.5.2. SSH を使用したセカンダリーネットワークに接続された仮想マシンへの接続
SSH を使用して、セカンダリーネットワークに接続されている仮想マシンに接続できます。
前提条件
- DHCP サーバーを使用して仮想マシンをセカンダリーネットワークに接続しました。
- SSH クライアントがインストールされています。
手順
次のコマンドを実行して、仮想マシンの 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 # ...
次のコマンドを実行して、仮想マシンに接続します。
$ ssh <user_name>@<ip_address> -i <ssh_key>
例
$ ssh cloud-user@10.244.0.37 -i ~/.ssh/id_rsa_cloud-user