Anthos VM ランタイムを使用する VM に接続する

このドキュメントは、Anthos clusters on bare metal を実行するアプリケーション オーナーを対象としています。このドキュメントでは、Anthos VM ランタイムを使用する仮想マシン(VM)に接続する方法について説明します。VM に直接接続するには、IP アドレスを使用するか、SSH またはコンソール アクセス用の組み込みツールを使用します。

準備

このドキュメントの内容を実施するには、次のリソースへのアクセス権が必要です。

VM へのパスワードなしの SSH アクセスを構成する

VM への直接のパスワードなし SSH アクセスは、Anthos VM ランタイムによってインストールされたゲスト エージェントによって容易になります。特に、ゲスト エージェントは SSH 認証鍵をインストールして期限切れにします。この機能により、SSH トンネルでクラスタ ネットワークの外部にあるクライアントから VM にアクセスできます。

ゲスト エージェントを有効にする

ゲスト エージェントを有効にするには:

  1. 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
    ...
    
  2. 必要に応じて、kubectl edit を使用して VirtualMachine カスタム リソースを更新します。

  3. ゲスト エージェントが動作していることを確認するには、VM カスタム リソースの status を確認します。

    kubectl get gvm VM_NAME --kubeconfig KUBECONFIG
    

    ゲスト エージェントが動作している場合は、GuestEnvironmentEnabledGuestEnvironmentDataSynced の条件に 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 アクセスを有効にするには:

  1. 任意のエディタで、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(日)
  2. kubectl apply を使用して、マニフェスト ファイルから VirtualMachineAccessRequest を作成します。たとえば、マニフェスト ファイルに vm-access-request.yaml という名前を指定した場合、

    kubectl apply -f MANIFEST --kubeconfig KUBECONFIG
    

    以下を置き換えます。

    • MANIFEST: アクセス リクエスト マニフェスト ファイルの名前。例: vm-access-request.yaml
    • KUBECONFIG: アクセスしている VM をホストするクラスタの kubeconfig ファイルのパス。
  3. アクセス リクエストの構成が成功したことを確認するには、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 アクセスが無効になります。

ゲスト エージェントを無効にするには:

  1. 構成を変更する前に kubectl を使用して VM を停止します。

    kubectl virt stop VM_NAME --kubeconfig KUBECONFIG
    
  1. VM リソースを編集します。

    kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
    
  2. VirtualMachine 構成を更新して、空の spec.guestEnvironment を明示的に追加します。

    apiVersion: vm.cluster.gke.io/v1alpha1
    kind: VirtualMachine
    metadata:
      name: vm-example
      namespace: default
    spec:
      compute:
      ...
      osType: Linux
      guestEnvironment: {}
    
  3. 更新した VM マニフェストをエディタに保存して閉じます。

  4. kubectl を使用して VM を起動します。

    kubectl virt start VM_NAME --kubeconfig KUBECONFIG
    

IP アドレスを使用して接続する

VM にアクセス可能な IP アドレスが割り振られており、VM にアクセスするための認証情報をすでに保有している場合は、SSH、VNC、RDP などのプロトコルを使用して接続できます。

IP アドレスで接続する

VM の IP アドレスに直接接続できる場合は、次のいずれかの方法を使用します。

SSH

  1. 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
    
  2. 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 の作成時に初期ユーザー認証情報を作成するにより定義した認証情報などの既存の認証情報が必要です。

  1. 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
    
  2. クライアント ツールと適切なポート(VNC ポート 5900、RDP ポート 3389 など)を使用して、前の手順で取得した VM の IP アドレスに接続します。

Service を使用して接続する

VM がデフォルトの pod-network に接続し、VM の IP アドレスと直接通信できない場合は、ロードバランサ Service の背後で VM を公開します。

  1. 任意のエディタで、Service マニフェスト(my-service-load-balancer.yaml など)を作成します。

    nano my-service-load-balancer.yaml
    
  2. 次の 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: プロトコルの名前(sshvncrdp など)。
    • PROTOCOL_TYPE: SSH と RDP の場合は tcp、VNC の場合は udp などのプロトコル タイプ。
    • EXTERNAL_PORT: 公開して接続に使用する外部ポート番号。
    • TARGET_PORT: ターゲット ポート(SSH の場合は 22 など)。
  3. Service マニフェストをエディタに保存して閉じます。

  4. kubectl を使用して Service を作成します。

    kubectl apply -f my-service-load-balancer.yaml  --kubeconfig KUBECONFIG
    
  5. ロードバランサ サービスの 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
    
  6. 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 を使用して接続できます。

  1. SSH を使用して、virtctl アドオンを使用してコンソールから Linux VM に接続するには、次の手順を行います。

    kubectl virt ssh USERNAME@VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
    

    次の値を置き換えます。

    • USERNAME: VM にアクセスするためのユーザー名。このアカウントは、VM に存在しない場合に作成されます。
    • VM_NAME: VM の名前。
  2. VM に SSH で接続し、接続が不要になったら、SSH セッションを終了します。

    exit
    

コンソールを使用して直接接続する

SSH アクセス用に Linux VM に直接ネットワーク接続できない場合は、Anthos VM ランタイム コンソールを使用して VM のコンソールに接続します。この方法では、シリアル コンソールが開きます。接続後、グラフィカル コンソールではなくコマンド プロンプトが表示されます。

  1. コンソールから Linux VM にアクセスするには、virtctl アドオンを使用します。

    kubectl virt console VM_NAME --kubeconfig KUBECONFIG
    

    VM_NAME は実際の VM 名に置き換えます。

    プロンプトが表示されたら、VM のユーザー認証情報を入力します。これらの認証情報は VM 上に存在するか、VM の作成時に適用することが必要です。必要に応じて、次のセクションを参照して VM の作成時に初期ユーザー認証情報を作成します。

  2. 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 の作成時に初期ユーザー認証情報を作成するにより定義した認証情報などの既存の認証情報が必要です。

  1. VNC を使用して VM にアクセスするには、virtctl アドオンを使用します。

    kubectl virt vnc VM_NAME --kubeconfig KUBECONFIG
    

    VM_NAME は実際の VM 名に置き換えます。

    プロンプトが表示されたら、VM のユーザー認証情報を入力します。

  2. 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 にログインした後に、初期の認証情報を変更することをおすすめします。

次のステップ