このドキュメントは、Anthos clusters on bare metal を実行するアプリケーション オーナーを対象としています。このドキュメントでは、Anthos VM ランタイムを使用する仮想マシン(VM)に接続する方法について説明します。VM に直接接続するには、IP アドレスを使用するか、SSH またはコンソール アクセス用の組み込みツールを使用します。
準備
このドキュメントの内容を実施するには、次のリソースへのアクセス権が必要です。
- クラスタのいずれかで動作する VM。必要に応じて、ベアメタル版 Anthos クラスタに VM を作成してください。
kubectl
のプラグインとしてインストールされたvirtctl
クライアント ツール。必要に応じて、virtctl クライアント ツールをインストールします。
VM へのパスワードなしの SSH アクセスを構成する
VM への直接のパスワードなし SSH アクセスは、Anthos VM ランタイムによってインストールされたゲスト エージェントによって容易になります。特に、ゲスト エージェントは SSH 認証鍵をインストールして期限切れにします。この機能により、SSH トンネルでクラスタ ネットワークの外部にあるクライアントから VM にアクセスできます。
ゲスト エージェントを有効にする
ゲスト エージェントを有効にするには:
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 を使用して直接接続する
クライアントが Anthos clusters on bare metal と同じ物理ネットワークに接続されていて、クラスタへの接続に 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 の名前。
VM に SSH で接続し、接続が不要になったら、SSH セッションを終了します。
exit
コンソールを使用して直接接続する
SSH アクセス用に Linux VM に直接ネットワーク接続できない場合は、Anthos 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
コマンドを使用すると、Anthos 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 にログインした後に、初期の認証情報を変更することをおすすめします。
次のステップ
- Anthos clusters on bare metal 内の VM の電源状態を管理する。
- ベアメタル版 Anthos クラスタで VM を編集する
- Anthos clusters on bare metal の VM コンソールのログを表示する。