VM に接続する

Google Distributed Cloud(GDC)エアギャップは、鍵ベースの SSH 認証を使用して仮想マシン(VM)インスタンスへの接続を確立します。デフォルトでは、オペレーティング システム(OS)がインストールされた VM のローカル ユーザーにはパスワードは構成されていません。

始める前に

VM に接続する前に、次の前提条件を満たす必要があります。

  • VM が存在するプロジェクトに ProjectNetworkPolicy(PNP)カスタム リソースを設定します。
    • プロジェクトで PNP を設定すると、プロジェクトまたは組織の外部にある VM にアクセスできます。
    • PNP がないかどうかを診断するには、インフラストラクチャ オペレーター(IO)にお問い合わせください。
  • クラスタへのログイン アクセス。ログインの CLI 手順に沿って、クラスタにログインします。
  • gdcloud コマンドライン インターフェース(CLI)コマンドを使用するには、gdcloud CLI をダウンロード、インストール、構成していることを確認してください。Distributed Cloud のすべてのコマンドは gdcloud または kubectl CLI を使用し、オペレーティング システム(OS)環境が必要です。

    kubeconfig ファイルのパスを取得する

    Management API サーバーに対してコマンドを実行するには、次のリソースがあることを確認します。

    1. Management API サーバーの kubeconfig ファイルがない場合は、ログインして生成します。

    2. これらの手順では、Management API サーバーの kubeconfig ファイルのパスを使用して MANAGEMENT_API_SERVER を置き換えます。

    権限とアクセス権をリクエストする

    このページに記載されているタスクを行うには、プロジェクトの VirtualMachine 管理者ロールが必要です。VM が存在するプロジェクトの名前空間にプロジェクト VirtualMachine 管理者(project-vm-admin)ロールがあることを確認する手順に沿って操作します。

    GDC コンソールまたは gdcloud CLI を使用する VM オペレーションの場合は、プロジェクト IAM 管理者に、プロジェクトの VirtualMachine 管理者ロールとプロジェクト閲覧者(project-viewer)ロールの両方を割り当てるよう依頼します。

    VM 接続を確立する

    このセクションでは、特定のオペレーティング システム(OS)の VM への接続を確立する方法について説明します。

    VM に接続する

    特定の OS を使用する VM への接続を確立するには、GDC コンソール、gdcloud CLI、または Virtual Machine Manager API を使用します。

    コンソール

    1. ナビゲーション メニューで、[仮想マシン] > [インスタンス] をクリックします。

    2. VM のリストで、接続する実行中の VM の行を見つけます。[接続] 列で、[SSH] をクリックします。

    3. SSH ブラウザ ターミナルが開きます。シェルにコマンドを入力するか、[FTP] をクリックしてファイル構造を移動し、ファイルをアップロードします。

    gdcloud

    gdcloud compute ssh コマンドを実行して、SSH を使用して VM に接続する

    gdcloud compute ssh VM_NAME --project=PROJECT_ID
    

    次の変数を置き換えます。

    • VM_NAME: VM の名前。
    • PROJECT_ID: VM が含まれているプロジェクトの ID。

    CLI のデフォルト プロパティを設定している場合、このコマンドの --project フラグは省略できます。次に例を示します。

    gdcloud compute ssh VM_NAME
    

    API

    VM に接続します。

    • ターミナルを開きます。
    • SSH 認証鍵ペアを作成します。
    • 有効期間(TTL)値を使用して、公開鍵とユーザー名をアップロードします。

    GDC は SSH 認証鍵とユーザー名を取得し、ユーザー名でユーザー アカウントを作成します。VM では、GDC は公開鍵を VM 上にあるユーザーの ~/.ssh/authorized_keys ファイルに保存します。

    コマンドラインから VM に接続する手順は次のとおりです。

    1. SSH 認証鍵ペアとユーザー名を作成します。

      OS ワークステーションで、ssh-keygen ユーティリティを使用して新しい SSH 認証鍵ペアを作成します。次のコードサンプルは、RSA(Rivest–Shamir–Adleman)鍵ペアを作成します。

      ssh-keygen -t rsa -f ~/.ssh/KEY_FILENAME -C USERNAME -b 2048
      

      次の定義を使用して変数を置き換えます。

      変数定義
      KEY_FILENAME SSH 認証鍵ファイルの名前。たとえば、my-ssh-key というファイル名を指定した場合、my-ssh-key という名前の秘密鍵ファイルと my-ssh-key.pub という名前の公開鍵ファイルが生成されます。
      USERNAME VM のユーザー名(testusertestuser_gmail_com など)。

      ssh-keygen ユーティリティは、秘密鍵ファイルを ~/.ssh/KEY_FILENAME パスに、公開鍵ファイルを ~/.ssh/KEY_FILENAME.pub パスに保存します。

      ユーザー testuser の公開鍵は次のようになります。

      ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... testuser
      
    2. 鍵を VM にアップロードし、公開鍵、ユーザー名、鍵の有効期間(TTL)値を使用して Kubernetes リソースを作成します。

      次の例では、access_request.yaml ファイルを使用して、KEY_FILENAME 秘密鍵と 10 分の TTL 値で VM インスタンスへのアクセス権を付与します。

      apiVersion: virtualmachine.gdc.goog/v1
      kind: VirtualMachineAccessRequest
      metadata:
        namespace: VM_NAMESPACE
        name: AR_NAME
      spec:
        ssh:
          key: |
            ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAu5kKQCPF... cloudysanfrancisco
          ttl: 10m
        user: USERNAME
        vm: VM_NAME
      

      次の定義を使用して、変数を置き換えます。

      変数定義
      VM_NAMESPACE VM の Namespace。
      AR_NAME アクセス リクエスト名。
      USERNAME VM のユーザー名(testusertestuser_gmail_com など)。
      VM_NAME VM インスタンスの名前。
    3. 鍵を作成します。

      kubectl create -f access_request.yaml --kubeconfig MANAGEMENT_API_SERVER
      
    4. アクセス リクエストのステータスを確認します。

      kubectl get virtualmachineaccessrequests.virtualmachine.gdc.goog -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
      

      VM_NAMESPACE は、VM の Namespace に置き換えます。

      configured ステータスは、VM に接続できることを示します。

    5. VM に接続します。

      ssh -i PATH_TO_PRIVATE_KEY USERNAME@EXTERNAL_IP
      

      次の値を置き換えます。

      • PATH_TO_PRIVATE_KEY は、VM に追加した公開鍵に対応する秘密 SSH 認証鍵ファイルへのパスです。
      • USERNAME は、SSH 認証鍵の作成時に指定したユーザー名に置き換えます。たとえば、cloudysanfrancisco_example_comcloudysanfrancisco です。
      • EXTERNAL_IP は、VM の外部上り(内向き)IP アドレスに置き換えます。

    トラブルシューティング

    このセクションでは、アクセス リクエストの作成後に VM インスタンスに接続する際に発生する可能性のある問題のトラブルシューティング方法について説明します。

    次の手順に沿って、考えられる問題を特定します。

    1. VM が実行されていることを確認します。次のコマンドで、編集可能な変数を独自の値に置き換えます。

      kubectl get virtualmachines.virtualmachine.gdc.goog VM_NAME -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
      

      VM が実行されていない場合、新しいリクエストを接続または構成することはできません。

    2. VM が数分間実行されていることを確認します。VM が起動したばかりの場合、SSH アクセスに必要なサービスがまだ実行されていない可能性があります。通常、起動後 5 分以内に実行されます。

    3. アクセス リクエストの TTL 値を超えていないことを確認します。時間が TTL 値に達すると、キーは削除されます。

    4. VirtualMachineAccessRequestconfigured ステータスが表示されている場合は、次の要件を確認してください。

      1. ポート 22 で VM へのデータ転送を有効にしました
      2. マシンが VM にルーティングされます。たとえば、
        curl -vso /dev/null --connect-timeout 5 EXTERNAL_IP:22 コマンドを使用してルーティングを確認できます。
    5. VirtualMachineAccessRequestfailed ステータスが表示されている場合は、完全なステータスを表示し、リクエストが失敗した原因を示すエラー メッセージを確認します。

      kubectl describe virtualmachineaccessrequest.virtualmachine.gdc.goog AR_NAME -n VM_NAMESPACE --kubeconfig MANAGEMENT_API_SERVER
      

      上記のコマンドの編集可能な変数を独自の値に置き換えます。

    6. VirtualMachineAccessRequest のステータスが空白の場合、ゲスト環境が実行されていない可能性があります。