VM に接続する

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

始める前に

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

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

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

    Management API サーバーに対してコマンドを実行するには、次のリソースが必要です。

    1. Management API サーバー名を確認するか、プラットフォーム管理者(PA)にサーバー名を確認します。

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

    3. パスを使用して、これらの手順の MANAGEMENT_API_SERVER{"</var>"}} を置き換えます。

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

    このページに記載されているタスクを行うには、プロジェクト VirtualMachine 管理者ロールが必要です。手順に沿って、VM が存在するプロジェクトの Namespace でプロジェクト VirtualMachine 管理者(project-vm-admin)ロールを 検証 するか、プロジェクト IAM 管理者に 割り当て てもらいます。

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

    VM 接続を確立する

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

    VM に接続する

    特定の OS を搭載した VM への接続を確立するには、GDC コンソール、gdcloud CLI、または 仮想マシン マネージャー 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 のステータスが空白の場合、ゲスト環境が実行されていない可能性があります。