Terhubung ke VM yang menggunakan Runtime VM di GDC

Dokumen ini ditujukan untuk pemilik aplikasi yang menjalankan Google Distributed Cloud. Dokumen ini menunjukkan cara terhubung ke virtual machine (VM) yang menggunakan Runtime VM di GDC. Anda dapat terhubung ke VM secara langsung menggunakan IP alamat IP eksternal, atau menggunakan alat bawaan untuk akses SSH atau konsol.

Sebelum memulai

Untuk menyelesaikan dokumen ini, Anda memerlukan akses ke referensi berikut:

Mengonfigurasi akses SSH tanpa sandi ke VM

Akses SSH langsung dan tanpa sandi ke VM Anda difasilitasi oleh agen tamu yang diinstal oleh VM Runtime di GDC. Di antara tugas-tugas lainnya, tamu agen diinstal dan kunci SSH kedaluwarsa. Kemampuan ini mengaktifkan tunnel SSH untuk yang mengakses VM Anda dari klien di luar jaringan cluster.

Mengaktifkan agen tamu

Untuk mengaktifkan agen tamu:

  1. Periksa resource kustom VirtualMachine untuk memastikan resource telah dikonfigurasi untuk aktifkan agen tamu:

    kubectl get gvm VM_NAME -o yaml --kubeconfig KUBECONFIG
    

    Kolom spec.osType harus disetel ke sistem operasi VM Anda, Linux atau Windows. Bagian spec.guestEnvironment tidak boleh secara eksplisit dikonfigurasi sebagai kosong. Jika bagian tersebut dikonfigurasi sebagai kosong (guestEnvironment: {}), Anda dapat menghapus seluruhnya untuk mengaktifkan tamu agen keamanan.

    Resource kustom VirtualMachine Anda untuk VM yang ingin Anda akses harus akan terlihat seperti ini:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: sample-vm
    spec:
      compute:
        cpu:
          vcpus: 2
        memory:
          capacity: 4Gi
    ...
      osType: Linux
    ...
    
  2. Jika perlu, gunakan kubectl edit untuk memperbarui VirtualMachine kustom resource Anda

  3. Untuk memastikan agen tamu berfungsi, periksa status di VM kustom Anda referensi:

    kubectl get gvm VM_NAME --kubeconfig KUBECONFIG
    

    Saat agen tamu bekerja, Anda akan melihat status: "True" untuk Kondisi GuestEnvironmentEnabled dan GuestEnvironmentDataSynced.

    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
      ...
    

Aktifkan akses SSH tanpa sandi

Guna mengaktifkan akses SSH tanpa sandi untuk VM Anda:

  1. Membuat file manifes VirtualMachineAccessRequest, seperti vm-access-request.yaml, dalam editor pilihan Anda:

    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
    

    Ganti kode berikut:

    • VMAR_NAME: nama akses resource permintaan.
    • VM_NAMESPACE: namespace untuk VM yang ingin Anda akses.
    • VM_NAME: nama VM yang Anda inginkan untuk diakses.
    • USERNAME: nama pengguna untuk pengguna yang sedang mengakses VM.
    • PUBLIC_SSH_KEY: kunci publik untuk akses SSH. Biasanya, ini adalah isi file id_rsa.pub.
    • EXPIRATION_TIME: ttl (time-to-live) menentukan berapa lama kunci SSH valid.

      Misalnya, jika Anda menentukan 30m, masa berlaku kunci SSH akan habis setelah 30 menit.

      Flag ini menggunakan unit berikut:

      • s untuk detik
      • m untuk menit
      • h untuk jam
      • d untuk hari
  2. Gunakan kubectl apply untuk membuat VirtualMachineAccessRequest dari manifes. Misalnya, jika Anda menamai file manifes vm-access-request.yaml,

    kubectl apply -f MANIFEST --kubeconfig KUBECONFIG
    

    Ganti kode berikut:

    • MANIFEST: nama akses file manifes permintaan. Contoh, vm-access-request.yaml.
    • KUBECONFIG: jalur ke {i>kubeconfig<i} dari cluster yang menghosting VM yang Anda akses.
  3. Untuk memverifikasi bahwa konfigurasi permintaan akses Anda berhasil, periksa status dari VirtualMachineAccessRequest:

    kubectl get vmar VMAR_NAME -o yaml --kubeconfig KUBECONFIG
    

    Setelah konfigurasi berhasil, bagian status akan menyertakan 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
    

Nonaktifkan agen tamu

Saat Anda membuat VM baru dan menyetel kolom osType, agen tamu diaktifkan. Saat fitur ini berada dalam Pratinjau, Anda dapat menonaktifkannya dengan mengedit Resource kustom VirtualMachine. Menonaktifkan agen tamu akan menonaktifkan sandi tanpa sandi Akses SSH ke VM Anda.

Untuk menonaktifkan agen tamu:

  1. Gunakan kubectl untuk menghentikan VM Anda sebelum membuat perubahan pada konfigurasi:

    kubectl virt stop VM_NAME --kubeconfig KUBECONFIG
    
  1. Edit resource VM Anda:

    kubectl edit gvm VM_NAME --kubeconfig KUBECONFIG
    
  2. Perbarui konfigurasi VirtualMachine untuk menambahkan spec.guestEnvironment kosong secara eksplisit:

    apiVersion: vm.cluster.gke.io/v1alpha1
    kind: VirtualMachine
    metadata:
      name: vm-example
      namespace: default
    spec:
      compute:
      ...
      osType: Linux
      guestEnvironment: {}
    
  3. Simpan dan tutup manifes VM yang telah diupdate di editor Anda.

  4. Gunakan kubectl untuk memulai VM:

    kubectl virt start VM_NAME --kubeconfig KUBECONFIG
    

Hubungkan menggunakan alamat IP

Jika VM Anda memiliki alamat IP yang dapat diakses dan Anda sudah memiliki kredensial untuk mengakses VM, Anda dapat terhubung menggunakan protokol seperti SSH, VNC, atau RDP.

Hubungkan melalui alamat IP

Jika Anda dapat terhubung langsung ke alamat IP VM, gunakan salah satu opsi berikut metode:

SSH

  1. Dapatkan detail VM Anda untuk melihat alamat IP-nya:

    kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
    

    Ganti nilai berikut:

    • VM_NAME: nama untuk VM Anda.
    • VM_NAMESPACE: namespace untuk VM Anda.

    Contoh output berikut menunjukkan informasi VM dan alamat IP:

    NAME   STATUS    AGE   IP
    vm1    Running   7m    10.200.0.21
    
  2. Hubungkan ke VM menggunakan klien SSH:

    ssh USERNAME@IP_ADDRESS -i PATH_TO_KEY
    

    Ganti nilai berikut:

    • USERNAME: nama pengguna untuk menggunakan akun layanan di VM Anda.
    • IP_ADDRESS: IP alamat VM Anda yang diperoleh di langkah sebelumnya.
    • PATH_TO_KEY: jalur ke kunci SSH pribadi.

VNC atau RDP

Komputasi Jaringan Virtual (VNC) dan Remote Desktop Protocol (RDP) Anda dapat menggunakan konsol grafis untuk mengakses VM Anda. Saat Anda menggunakan IP Anda harus mengaktifkan VNC atau RDP di OS tamu sebelum dapat menggunakan baik untuk terhubung ke VM. Untuk informasi tentang cara mengaktifkan dan menggunakan VNC atau RDP, baca dokumentasi untuk OS tamu Anda.

Anda juga memerlukan kredensial yang ada untuk login ke VM, seperti yang Anda definisikan ke membuat kredensial pengguna awal saat Anda membuat VM.

  1. Dapatkan detail VM Anda untuk melihat alamat IP-nya:

    kubectl get gvm VM_NAME --namespace VM_NAMESPACE --kubeconfig KUBECONFIG
    

    Ganti nilai berikut:

    • VM_NAME: nama untuk VM Anda.
    • VM_NAMESPACE: namespace untuk VM Anda.

    Contoh output berikut menunjukkan informasi VM dan alamat IP:

    NAME   STATUS    AGE   IP
    vm1    Running   7m    10.200.0.21
    
  2. Hubungkan ke alamat IP VM Anda yang diperoleh pada langkah sebelumnya menggunakan alat klien dan port yang sesuai seperti port VNC 5900 atau port RDP 3389.

Terhubung melalui Layanan

Jika VM terhubung ke pod-network default dan Anda tidak dapat berkomunikasi langsung ke alamat IP VM Anda, ekspos VM di belakang load balancer Service.

  1. Buat manifes Service, seperti my-service-load-balancer.yaml, di pilihan Anda:

    nano my-service-load-balancer.yaml
    
  2. Salin dan tempel manifes YAML berikut:

    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
    

    Dalam jenis manifes Service ini, ganti nilai berikut:

    • VM_NAME: nama VM Anda yang akan diekspos untuk akses jarak jauh.
    • PORT_NAME: nama protokol Anda, seperti ssh, vnc, atau rdp.
    • PROTOCOL_TYPE: jenis protokol, seperti TCP untuk SSH dan RDP, atau UDP untuk VNC.
    • EXTERNAL_PORT: nomor port eksternal yang akan diekspos dan yang Anda gunakan untuk hubungkan.
    • TARGET_PORT: port target, seperti 22 untuk SSH.
  3. Simpan dan tutup manifes Service di editor Anda.

  4. Buat Service menggunakan kubectl:

    kubectl apply -f my-service-load-balancer.yaml  --kubeconfig KUBECONFIG
    
  5. Dapatkan alamat EXTERNAL-IP layanan load balancer:

    kubectl get service VM_NAME-service --kubeconfig KUBECONFIG
    

    Alamat IP load balancer ditampilkan, seperti yang ditunjukkan pada contoh output berikut:

    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. Hubungkan ke alamat EXTERNAL-IP load balancer dengan standar seperti menggunakan klien SSH:

    ssh USERNAME@LOAD_BALANCER_IP_ADDRESS  -i PATH_TO_KEY
    

    Ganti nilai berikut:

    • USERNAME: nama pengguna untuk akun di VM Anda.
    • LOAD_BALANCER_IP_ADDRESS: alamat IP pemuatan Anda dengan load balancer Jaringan Passthrough Eksternal Regional.
    • PATH_TO_KEY: jalur ke kunci SSH pribadi.

Menghubungkan langsung menggunakan SSH

Jika klien Anda terhubung ke jaringan fisik yang sama dengan cluster Anthos Anda pada {i>node<i} {i>bare metal<i} dan Anda tidak memerlukan penggunaan terowongan SSH untuk terhubung ke cluster tersebut, Anda dapat terhubung menggunakan kubectl virt ssh.

  1. Untuk menggunakan SSH guna menghubungkan VM Linux dari konsol dengan add-on virtctl:

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

    Ganti nilai berikut:

    • USERNAME: nama pengguna untuk mengakses VM Anda. Ini dibuat jika tidak ada di VM.
    • VM_NAME: nama VM Anda.
  2. Setelah Anda berhasil terhubung menggunakan SSH, VM dan tidak lagi memerlukan keluar dari sesi SSH:

    exit
    

Menghubungkan langsung menggunakan konsol

Jika Anda tidak memiliki konektivitas jaringan langsung ke VM Linux untuk akses SSH, hubungkan ke konsol VM menggunakan Runtime VM di konsol GDC. Metode ini membuka konsol serial. Setelah terhubung, Anda diberi perintah prompt, bukan konsol grafis.

  1. Untuk mengakses VM Linux dari konsol, gunakan add-on virtctl:

    kubectl virt console VM_NAME --kubeconfig KUBECONFIG
    

    Ganti VM_NAME dengan nama VM Anda.

    Saat diminta, masukkan kredensial pengguna untuk VM Anda. Kredensial ini harus ada di VM, atau diterapkan saat VM dibuat. Jika perlu, lihat bagian berikut untuk membuat kredensial pengguna awal saat Anda membuat VM.

  2. Setelah Anda berhasil terhubung ke konsol VM dan tidak lagi yang memerlukan koneksi, tutup sesi VM dan konsol:

    Ctrl + ]
    

Menghubungkan langsung menggunakan VNC

Anda dapat menggunakan perintah kubectl virt vnc untuk membuka Komputasi Jaringan Virtual (VNC) untuk mengakses VM Anda. Metode ini berfungsi untuk VM yang berjalan baik Windows atau Linux {i>guest OS<i}. Saat Anda menggunakan kubectl virt vnc VM Runtime di GDC membuka VNC untuk Anda, sehingga Anda tidak perlu mengaktifkan VNC di OS tamu.

Anda memerlukan kredensial yang ada untuk login ke VM, seperti yang Anda definisikan ke membuat kredensial pengguna awal saat Anda membuat VM.

  1. Untuk mengakses VM menggunakan VNC, gunakan add-on virtctl:

    kubectl virt vnc VM_NAME --kubeconfig KUBECONFIG
    

    Ganti VM_NAME dengan nama VM Anda.

    Saat diminta, masukkan kredensial pengguna untuk VM Anda.

  2. Setelah Anda berhasil terhubung ke sesi VNC VM dan tidak lagi membutuhkan koneksi, keluar dari VM untuk menutup koneksi VNC.

Membuat kredensial pengguna awal

Saat terhubung ke VM menggunakan konsol, Anda harus menentukan memiliki kredensial yang lengkap. Proses pembuatan kredensial pengguna awal berbeda untuk Linux dan sistem operasi tamu Windows.

OS tamu Linux

Untuk VM Linux, kredensial pengguna dapat dibangun di image kustom Anda, atau ditentukan saat Anda membuat VM.

  • Gunakan parameter --configure-initial-password dengan kubectl virt create berikut:

    kubectl virt create vm VM_NAME \
        --image ubuntu20.04 \
        --os-type Linux \
        --configure-initial-password USERNAME:PASSWORD \
        --kubeconfig KUBECONFIG
    

    Ganti nilai berikut:

    • VM_NAME: nama untuk VM Anda.
    • USERNAME: nama pengguna untuk akun yang dibuat di VM.
    • PASSWORD: sandi untuk pengguna menggunakan akun layanan.

    Contoh perintah ini membuat VM Linux yang menjalankan Ubuntu 20.04. Penting sebaiknya Anda mengubah kredensial awal setelah menandatangani ke VM.

OS tamu Windows

Gunakan langkah-langkah berikut untuk menyetel ulang sandi bagi pengguna yang ada atau membuat {i>password<i} awal untuk pengguna baru:

  1. Aktifkan agen tamu di VM Windows Anda:

    1. Konfigurasikan VM untuk mengaktifkan agen tamu.

    2. Gunakan VNC atau RDP untuk terhubung ke VM.

    3. Di VM, buka drive guest agent. Dalam kebanyakan kasus, ini adalah mengemudi sejauh E:.

    4. Gunakan PowerShell untuk menjalankan install.ps1.

      Tindakan ini akan menginstal dan memulai agen tamu. Agen tamu mulai secara otomatis untuk mulai ulang VM berikutnya.

    5. Tutup sesi jarak jauh.

  2. Di workstation admin, gunakan perintah berikut untuk mereset (atau menetapkan jika gunakan nama pengguna baru) sandi VM Windows:

    kubectl virt reset-windows-password VM_NAME \
        --user=USERNAME \
        --namespace=VM_NAMESPACE
    

    Ganti kode berikut:

    • VM_NAME: nama VM.
    • USERNAME: nama pengguna yang ingin Anda gunakan mengatur ulang (atau menyetel) {i>password-<i}nya. Jika nama pengguna baru, perintah akan membuat akun Windows baru dan menetapkan {i>password<i} awal.
    • VM_NAMESPACE: (Opsional) namespace VM. Flag ini bersifat opsional. Jika tidak yang ditentukan, namespace default, default, akan digunakan.

    Untuk mereset (atau menetapkan) sandi tanpa perintah konfirmasi, gunakan perintah --force. Saat Anda menggunakan flag --force, perintah tersebut akan memperingatkan Anda tentang konsekuensi dari mengatur ulang {i>password<i} untuk akun yang ada. Tanpa flag --force, perintah tersebut akan meminta Anda untuk mengonfirmasi reset sandi dengan teks berikut:

    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)?
    

    Setelah Anda mengonfirmasi (atau memaksa) pengaturan ulang {i>password<i}, perintah tersebut akan mengembalikan {i>password<i} baru untuk VM dan nama pengguna yang ditentukan:

    Resetting and retrieving password for USERNAME on VM_NAME
    
    vm_name:    VM_NAME
    username:   USERNAME
    password:   PASSWORD
    

Langkah selanjutnya