このドキュメントは、Google Distributed Cloud を実行するアプリケーション オーナーを対象としています。このドキュメントでは、GDC 上の VM ランタイムを使用する仮想マシン(VM)に接続する方法について説明します。IP アドレスを使用して直接 VM に接続することも、SSH やコンソール アクセス用の組み込みツールを使用して接続することも可能です。
準備
このドキュメントの内容を実施するには、次のリソースへのアクセス権が必要です。
- クラスタのいずれかで動作する VM。必要に応じて、Google Distributed Cloud で VM を作成します。
kubectl
のプラグインとしてインストールされたvirtctl
クライアント ツール。必要に応じて、virtctl クライアント ツールをインストールします。
VM へのパスワードなしの SSH アクセスを構成する
VM への直接のパスワードなし SSH アクセスは、GDC 上の VM ランタイムによってインストールされたゲスト エージェントによって容易になります。具体的には、ゲスト エージェントが SSH 認証鍵をインストールして期限切れにします。この機能により、クラスタ ネットワーク外のクライアントから VM にアクセスするための SSH トンネルが有効になります。
ゲスト エージェントを有効にする
ゲスト エージェントを有効にするには:
VirtualMachine
カスタム リソースをチェックして、ゲスト エージェントを有効にするように構成されていることを確認します。kubectl get gvm VM_NAME -o yaml --kubeconfig KUBECONFIG
spec.osType
フィールドは、VM のオペレーティング システム(Linux
またはWindows
)に設定する必要があります。spec.guestEnvironment
セクションは、明示的に空には構成しないでください。セクションが空(guestEnvironment: {}
)として構成されている場合は、完全に削除してゲスト エージェントを有効にできます。アクセスする VM の
VirtualMachine
カスタム リソースは次のようになります。apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: name: sample-vm spec: compute: cpu: vcpus: 2 memory: capacity: 4Gi ... osType: Linux ...
必要に応じて、
kubectl edit
を使用してVirtualMachine
カスタム リソースを更新します。ゲスト エージェントが機能していることを確認するには、VM カスタム リソースの
status
を確認します。kubectl get gvm VM_NAME --kubeconfig KUBECONFIG
ゲスト エージェントが機能している場合、
GuestEnvironmentEnabled
条件とGuestEnvironmentDataSynced
条件にstatus: "True"
が表示されます。apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachine metadata: ... name: vm-sample-01 ... status: conditions: - lastTransitionTime: "2022-10-05T22:40:26Z" message: "" observedGeneration: 1 reason: UserConfiguration status: "True" type: GuestEnvironmentEnabled - lastTransitionTime: "2022-10-06T21:55:57Z" message: "" observedGeneration: 1 reason: GuestEnvironmentDataSynced status: "True" type: GuestEnvironmentSynced ...
パスワードなしの SSH アクセスを有効にする
VM でパスワードなしの SSH アクセスを有効にするには:
任意のエディタで、
VirtualMachineAccessRequest
マニフェスト(vm-access-request.yaml
など)を作成します。apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineAccessRequest metadata: name: VMAR_NAME namespace: VM_NAMESPACE spec: vm: VM_NAME user: USERNAME ssh: key: PUBLIC_SSH_KEY ttl: EXPIRATION_TIME
以下を置き換えます。
VMAR_NAME
: アクセス リクエスト リソースの名前。VM_NAMESPACE
: アクセスする VM の名前空間。VM_NAME
: アクセスする VM の名前。USERNAME
: VM にアクセスするユーザーのユーザー名。PUBLIC_SSH_KEY
: SSH アクセス用の公開鍵。通常、これはid_rsa.pub
ファイルの内容です。EXPIRATION_TIME
:ttl
(有効期間)フィールドは、SSH 認証鍵の有効期間を指定します。たとえば、
30m
を指定すると、SSH 認証鍵は 30 分後に期限切れになります。このフラグには、以下の単位が使用されます。
s
(秒)m
(分)h
(時間)d
(日)
kubectl apply
を使用して、マニフェスト ファイルからVirtualMachineAccessRequest
を作成します。たとえば、マニフェスト ファイルにvm-access-request.yaml
という名前を付けたとします。kubectl apply -f MANIFEST --kubeconfig KUBECONFIG
以下を置き換えます。
MANIFEST
: アクセス リクエストのマニフェスト ファイルの名前。例:vm-access-request.yaml
。KUBECONFIG
: アクセスする VM をホストするクラスタの kubeconfig ファイルのパス。
アクセス リクエストの構成が成功したことを確認するには、
VirtualMachineAccessRequest
のステータスを確認します。kubectl get vmar VMAR_NAME -o yaml --kubeconfig KUBECONFIG
構成が成功すると、
status
セクションにstate: configured
が含まれます。apiVersion: vm.cluster.gke.io/v1 kind: VirtualMachineAccessRequest metadata: ... annotations: kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"vm.cluster.gke.io/v1","kind":"VirtualMachineAccessRequest", "metadata":{"annotations":{},"name":"vmar-sample","namespace":"default"}, "spec":{"ssh":{"key":"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ...jMLHFc= sample-user@sample-host","ttl":"5h"},"user":"sample-user","vm":"vm-sample-01"}} creationTimestamp: "2022-10-06T21:55:57Z" finalizers: - vm.cluster.gke.io/vmar-finalizer generation: 2 name: vmar-sample namespace: default resourceVersion: "13033921" uid: 282d72ad-f48d-4e89-af22-336940ac9f58 spec: ssh: key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQ...jMLHFc= sample-user@sample-host ttl: 5m0s user: sample-user vm: vm-sample-01 status: processedAt: "2022-10-06T21:55:57Z" state: configured
ゲスト エージェントを無効にする
新しい VM を作成して osType
フィールドを設定すると、ゲスト エージェントが有効になります。
この機能はプレビュー版ですが、VirtualMachine
カスタム リソースを編集することで無効にできます。ゲスト エージェントを無効にすると、VM へのパスワードなしの SSH アクセスが無効になります。
ゲスト エージェントを無効にするには:
構成を変更する前に、
kubectl
を使用して VM を停止します。kubectl virt stop VM_NAME --kubeconfig KUBECONFIG
VM リソースを編集します。
kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
VirtualMachine
構成を更新して、空のspec.guestEnvironment
を明示的に追加します。apiVersion: vm.cluster.gke.io/v1alpha1 kind: VirtualMachine metadata: name: vm-example namespace: default spec: compute: ... osType: Linux guestEnvironment: {}
更新した VM マニフェストをエディタに保存して閉じます。
kubectl
を使用して VM を起動します。kubectl virt start VM_NAME --kubeconfig KUBECONFIG
IP アドレスを使用して接続する
VM にアクセス可能な IP アドレスが割り振られており、VM にアクセスするための認証情報をすでに保有している場合は、SSH、VNC、RDP などのプロトコルを使用して接続できます。
IP アドレスで接続する
VM の IP アドレスに直接接続できる場合は、次のいずれかの方法を使用します。
SSH
VM の詳細情報を取得し、IP アドレスを表示します。
kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
次の値を置き換えます。
VM_NAME
: VM の名前。VM_NAMESPACE
: VM の名前空間。
次の出力例は、VM に関する情報と IP アドレスを示しています。
NAME STATUS AGE IP vm1 Running 7m 10.200.0.21
SSH クライアントを使用して VM に接続します。
ssh USERNAME@IP_ADDRESS -i PATH_TO_KEY
次の値を置き換えます。
USERNAME
: VM 上のアカウントのユーザー名。IP_ADDRESS
: 前の手順で取得した VM の IP アドレス。PATH_TO_KEY
: 秘密 SSH 認証鍵のパス。
VNC または RDP
Virtual Network Computing(VNC)とリモート デスクトップ プロトコル(RDP)では、グラフィカル コンソールを使用して VM にアクセスできます。IP アドレスを使用する場合は、ゲスト OS で VNC または RDP を有効にしてから、いずれかを使用して VM に接続する必要があります。VNC または RDP の有効化と使用については、ゲスト OS のドキュメントをご覧ください。
また、VM にログインするには、VM の作成時に初期のユーザー認証情報を作成するで定義した認証情報などの既存の認証情報が必要です。
VM の詳細情報を取得し、IP アドレスを確認します。
kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
次の値を置き換えます。
VM_NAME
: VM の名前。VM_NAMESPACE
: VM の名前空間。
次の出力例は、VM に関する情報と IP アドレスを示しています。
NAME STATUS AGE IP vm1 Running 7m 10.200.0.21
クライアント ツールと適切なポート(VNC ポート
5900
、RDP ポート3389
など)を使用して、前の手順で取得した VM の IP アドレスに接続します。
Service を介して接続する
VM がデフォルトの pod-network
に接続し、VM の IP アドレスと直接通信できない場合は、ロードバランサ Service
の背後で VM を公開します。
任意のエディタで、
Service
マニフェスト(my-service-load-balancer.yaml
など)を作成します。nano my-service-load-balancer.yaml
次の YAML マニフェストをコピーして貼り付けます。
apiVersion: v1 kind: Service metadata: name: VM_NAME-service spec: selector: kubevirt/vm: VM_NAME ports: - name: PORT_NAME protocol: PROTOCOL_TYPE port: EXTERNAL_PORT targetPort: TARGET_PORT type: LoadBalancer
この
Service
マニフェスト タイプでは、次の値を置き換えます。VM_NAME
: リモート アクセス用に公開する VM の名前。PORT_NAME
: プロトコルの名前(ssh
、vnc
、rdp
など)。PROTOCOL_TYPE
: SSH と RDP の場合はTCP
、VNC の場合はUDP
などのプロトコル タイプ。EXTERNAL_PORT
: 公開する外部ポート番号で、接続に使用します。TARGET_PORT
: ターゲット ポート(SSH の22
など)。
Service
マニフェストをエディタに保存して閉じます。kubectl
を使用してService
を作成します。kubectl apply -f my-service-load-balancer.yaml --kubeconfig KUBECONFIG
ロードバランサ サービスの
EXTERNAL-IP
アドレスを取得します。kubectl get service VM_NAME-service --kubeconfig KUBECONFIG
次の出力例に示すように、ロードバランサの IP アドレスが表示されます。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE vm1-service LoadBalancer 172.26.232.167 10.200.0.51 22:31141/TCP 6d20h
SSH クライアントを使用するなど、標準プロトコルを使用して、ロードバランサの
EXTERNAL-IP
アドレスに接続します。ssh USERNAME@LOAD_BALANCER_IP_ADDRESS -i PATH_TO_KEY
次の値を置き換えます。
USERNAME
: VM 上のアカウントのユーザー名。LOAD_BALANCER_IP_ADDRESS
: ロードバランサの IP アドレス。PATH_TO_KEY
: 秘密 SSH 認証鍵のパス。
SSH を使用して直接接続する
クライアントがベアメタル クラスタノードと同じ物理ネットワークに接続されていて、クラスタへの接続に SSH トンネルを使用する必要がない場合は、kubectl virt ssh
を使用して接続できます。
SSH を使用して、コンソールから
virtctl
アドオンで Linux VM を接続するには:kubectl virt ssh USERNAME@VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
次の値を置き換えます。
USERNAME
: VM にアクセスするためのユーザー名。このアカウントが VM に存在しない場合は作成されます。VM_NAME
: VM の名前。
SSH を使用して VM が正常に接続され、接続が不要になると SSH セッションを終了します。
exit
コンソールを使用して直接接続する
SSH アクセス用に Linux VM に直接ネットワーク接続できない場合は、GDC コンソールの VM ランタイムを使用して VM のコンソールに接続します。この方法では、シリアル コンソールが開かれます。接続時に、グラフィカル コンソールではなく、コマンド プロンプトが表示されます。
コンソールから Linux VM にアクセスするには、
virtctl
アドオンを使用します。kubectl virt console VM_NAME --kubeconfig KUBECONFIG
VM_NAME
は実際の VM 名に置き換えます。プロンプトが表示されたら、VM のユーザー認証情報を入力します。これらの認証情報は VM 上に存在するか、VM の作成時に適用することが必要です。必要に応じて、次のセクションを参照して、VM の作成時に初期のユーザー認証情報を作成します。
VM のコンソールに正常に接続し、接続が不要になると VM セッションとコンソールを終了します。
Ctrl + ]
VNC を使用して直接接続する
kubectl virt vnc
コマンドを実行して Virtual Network Computing(VNC)グラフィカル コンソールを開き、VM にアクセスできます。この方法は、Windows と Linux のいずれかのゲスト OS を実行している VM で機能します。kubectl virt vnc
コマンドを使用すると、GDC 上の VM ランタイムによって VNC が開かれるため、ゲスト OS で VNC を有効にする必要はありません。
VM にログインするには、VM の作成時に初期のユーザー認証情報を作成するで定義した認証情報などの既存の認証情報が必要です。
VNC を使用して VM にアクセスするには、
virtctl
アドオンを使用します。kubectl virt vnc VM_NAME --kubeconfig KUBECONFIG
VM_NAME
は実際の VM 名に置き換えます。プロンプトが表示されたら、VM のユーザー認証情報を入力します。
VM の VNC セッションに正常に接続し、接続が不要になると VM からログオフして VNC 接続を閉じます。
最初のユーザー認証情報を作成する
コンソールを使用して VM に接続する場合は、ユーザー認証情報を指定する必要があります。初期ユーザー認証情報を作成するプロセスは、Linux と Windows のゲスト オペレーティング システムで異なります。
Linux ゲスト OS
Linux VM の場合、ユーザー認証情報はカスタム イメージに組み込むことができます。または、VM の作成時に指定することもできます。
kubectl virt create
コマンドで--configure-initial-password
パラメータを使用します。kubectl virt create vm VM_NAME \ --image ubuntu20.04 \ --os-type Linux \ --configure-initial-password USERNAME:PASSWORD \ --kubeconfig KUBECONFIG
次の値を置き換えます。
VM_NAME
: VM の名前。USERNAME
: VM 上に作成するアカウントのユーザー名。PASSWORD
: ユーザー アカウントのパスワード。
このコマンドの例では、Ubuntu 20.04 を実行する Linux VM を作成します。初めて VM にログインした後に、初期の認証情報を変更することをおすすめします。
Windows ゲスト OS
次の手順を使用して、既存のユーザーのパスワードをリセットするか、新しいユーザーの初期パスワードを作成します。
Windows VM でゲスト エージェントを有効にします。
ゲスト エージェントを有効にするように VM を構成します。
VNC または RDP を使用して VM に接続します。
VM で、
guest agent
ドライブに移動します。ほとんどの場合、これはドライブE:
です。PowerShell を使用して
install.ps1
を実行します。これにより、ゲスト エージェントがインストールされ、起動します。その後の VM の再起動の際に、ゲスト エージェントが自動的に起動します。
リモート セッションを閉じます。
管理ワークステーションで、次のコマンドを使用して Windows VM のパスワードをリセット(または新しいユーザー名を使用する場合は設定)します。
kubectl virt reset-windows-password VM_NAME \ --user=USERNAME \ --namespace=VM_NAMESPACE
以下を置き換えます。
VM_NAME
: VM の名前。USERNAME
: パスワードを再設定(または設定)するユーザー名。ユーザー名が新しい場合、このコマンドにより新しい Windows アカウントが作成され、初期パスワードが設定されます。VM_NAMESPACE
: (省略可)VM の名前空間。このフラグは省略可能です。指定しない場合は、デフォルトの名前空間(default
)が使用されます。
確認プロンプトなしでパスワードをリセット(または設定)するには、オプションの
--force
フラグを使用します。--force
フラグを使用すると、既存アカウントのパスワードをリセットした結果が警告されます。--force
フラグを指定しないと、パスワードのリセットを確認する次のテキストが表示されます。This command creates an account and sets an initial password for the user USERNAME if the account does not already exist. If the account already exists, resetting the password can cause the LOSS OF ENCRYPTED DATA secured with the current password, including files and stored passwords. Would you like to set or reset the password for USERNAME (Y/n)?
パスワードの再設定を確認(または強制)すると、このコマンドは、指定された VM のパスワードとユーザー名を返します。
Resetting and retrieving password for USERNAME on VM_NAME vm_name: VM_NAME username: USERNAME password: PASSWORD
次のステップ
- Google Distributed Cloud の VM の電源状態を管理する。
- Google Distributed Cloud で VM を編集する。
- Google Distributed Cloud で VM コンソールのログを表示する。