Virtualisasi bertingkat diizinkan secara default. Jadi, kecuali jika seseorang mengubah batasan untuk virtualisasi bertingkat, Anda tidak perlu membuat perubahan apa pun sebelum membuat VM bertingkat dalam organisasi, folder, atau project. Jika project Anda bukan milik organisasi, virtualisasi bertingkat diizinkan secara default dan Anda tidak dapat mengubah batasan. Untuk informasi tentang cara mengubah batasan yang menentukan apakah Anda dapat membuat VM bertingkat atau tidak, lihat Mengelola batasan virtualisasi bertingkat.
Dokumen ini menjelaskan cara membuat berbagai jenis instance mesin virtual (VM) level 2 (L2). Sebelum membuat VM bertingkat, Anda harus membuat VM L1 yang telah mengaktifkan virtualisasi bertingkat. Untuk deskripsi tentang VM L1 dan L2, lihat Ringkasan virtualisasi bertingkat.
Setelah membuat VM L1 yang mengaktifkan virtualisasi bertingkat, Anda dapat melakukan salah satu langkah berikut:
- Membuat VM L2 dengan akses jaringan eksternal
- Membuat VM L2 dengan jembatan jaringan pribadi ke VM L1
- Membuat VM L2 dengan akses jaringan dari luar VM L1
Sebelum memulai
-
Siapkan autentikasi, jika Anda belum melakukannya.
Autentikasi adalah proses verifikasi identitas Anda untuk akses ke layanan dan API Google Cloud.
Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine sebagai berikut.
Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:
gcloud
-
Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:
gcloud init
- Menetapkan region dan zona default.
REST
Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.
Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:
gcloud init
-
Membuat VM L2 dengan akses jaringan eksternal
Buat VM L2 dengan akses jaringan eksternal menggunakan prosedur berikut.
Prosedur ini menggunakan qemu-system-x86_64
untuk memulai VM L2. Jika Anda menggunakan prosedur lain untuk membuat VM L2 dan mengalami masalah, rekonstruksi masalah menggunakan prosedur ini sebelum menghubungi Dukungan.
Gunakan perintah
gcloud compute ssh
untuk terhubung ke VM:gcloud compute ssh VM_NAME
Ganti
VM_NAME
dengan nama VM yang akan dihubungkan.Instal paket
qemu-kvm
terbaru:sudo apt update && sudo apt install qemu-kvm -y
Download image OS yang kompatibel dengan QEMU untuk digunakan pada VM L2.
Gunakan perintah berikut untuk memulai L2 VM. Saat diminta, login dengan
user: root
,password: root
.sudo qemu-system-x86_64 -enable-kvm -hda IMAGE_NAME -m 512 -curses
Ganti
IMAGE_NAME
dengan nama OS image yang kompatibel dengan QEMU yang akan digunakan untuk VM L2.Uji apakah VM L2 Anda memiliki akses eksternal:
user@nested-vm:~$ host google.com
Membuat VM L2 dengan jembatan jaringan pribadi ke VM L1
Buat VM L2 dengan jembatan jaringan pribadi ke VM L1 yang dibuat sebelumnya dengan menggunakan prosedur berikut. Untuk mengetahui informasi tentang cara mengubah unit transmisi maksimum (MTU) default untuk jaringan VPC Anda, lihat ringkasan unit transmisi maksimum.
Gunakan perintah
gcloud compute ssh
untuk terhubung ke VM:gcloud compute ssh VM_NAME
Ganti
VM_NAME
dengan nama VM yang akan dihubungkan.Instal paket yang diperlukan untuk membuat jembatan pribadi:
sudo apt update && sudo apt install uml-utilities qemu-kvm bridge-utils virtinst libvirt-daemon-system libvirt-clients -y
Mulai jaringan default yang disertakan dengan paket
libvirt
:sudo virsh net-start default
Jalankan perintah berikut untuk memeriksa apakah Anda memiliki jembatan
virbr0
:ip addr
Outputnya mirip dengan hal berikut ini:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000 link/ether 42:01:0a:80:00:15 brd ff:ff:ff:ff:ff:ff inet 10.128.0.21/32 brd 10.128.0.21 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::4001:aff:fe80:15/64 scope link valid_lft forever preferred_lft forever 3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000 link/ether 52:54:00:8c:a6:a1 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever 4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000 link/ether 52:54:00:8c:a6:a1 brd ff:ff:ff:ff:ff:ff
Buat antarmuka
tap
untuk beralih dari VM L1 ke VM L2:sudo tunctl -t tap0 sudo ifconfig tap0 up
Kaitkan antarmuka
tap
ke jembatan pribadi:sudo brctl addif virbr0 tap0
Jalankan perintah berikut untuk memverifikasi penyiapan jaringan jembatan:
sudo brctl show
Outputnya mirip dengan hal berikut ini:
bridge name bridge id STP enabled interfaces virbr0 8000.5254008ca6a1 yes tap0 virbr0-nic
Download image OS yang kompatibel dengan QEMU untuk digunakan pada VM L2.
Jalankan
screen
, lalu tekan Enter di perintah selamat datang:screen
Gunakan perintah berikut untuk memulai VM L2. Jika diminta, login dengan
user: root
,password: root
.sudo qemu-system-x86_64 -enable-kvm -hda IMAGE_NAME -m 512 -net nic -net tap,ifname=tap0,script=no -curses
Ganti
IMAGE_NAME
dengan nama OS image yang kompatibel dengan QEMU yang akan digunakan untuk VM L2.Di VM L2, jalankan
ip addr show
untuk mengonfirmasi bahwa VM memiliki alamat di ruangvirbr0
—misalnya,192.168.122.89
:user@nested-vm:~$ ip addr
Mulai server web placeholder pada port
8000
:user@nested-vm:~$ python -m http.server
Lepaskan dari sesi
screen
denganCtrl+A
,Ctrl+D
.Uji apakah VM L1 Anda dapat melakukan ping ke VM L2, dengan mengganti alamat IP berikut dengan alamat IP VM L2:
curl 192.168.122.89:8000
Outputnya mirip dengan hal berikut ini:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html> <title>Directory listing for /</title> <body> <h2>Directory listing for /</h2> <hr> <ol> <li><a href=".aptitude/">.aptitude/</a> <li><a href=".bashrc">.bashrc</a> <li><a href=".profile">.profile</a> </ol> <hr> </body> </html>
Membuat VM L2 dengan akses jaringan dari luar VM L1
Anda dapat menyiapkan VM L2 dengan IP alias sehingga VM di luar VM L1 dapat mengakses VM L2. Gunakan prosedur berikut untuk membuat VM L2 dengan akses jaringan melalui IP alias dari luar VM L1 yang dibuat sebelumnya. Untuk mengetahui informasi tentang cara membuat alamat IP alias, lihat Mengonfigurasi rentang IP alias.
Prosedur berikut mengasumsikan subnet yang dibuat sebelumnya yang disebut subnet1
. Jika sudah memiliki subnet dengan nama yang berbeda, ganti subnet1
dengan nama subnet Anda, atau buat subnet baru bernama subnet1
.
Buat VM L1 dengan mengaktifkan virtualisasi bertingkat dan sertakan rentang IP alias dan dukungan untuk traffic HTTP/HTTPS:
gcloud
gcloud compute instances create VM_NAME --enable-nested-virtualization \ --tags http-server,https-server --can-ip-forward \ --min-cpu-platform "Intel Haswell" \ --network-interface subnet=subnet1,aliases=/30
Ganti
VM_NAME
dengan nama untuk VM L1.REST
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { ... "name": VM_NAME, "tags": { "items": [ http-server,https-server ], }, "canIpForward": true, "networkInterfaces": [ { "subnetwork": "subnet1", "aliasIpRanges": [ { "ipCidrRange": "/30" } ], } ], "minCpuPlatform": "Intel Haswell", "advancedMachineFeatures": { "enableNestedVirtualization": true }, ... }
Ganti kode berikut:
PROJECT_ID
: project IDZONE
: zona untuk membuat VMVM_NAME
: nama VM
Gunakan perintah
gcloud compute ssh
untuk terhubung ke VM. Jika Anda mengalami masalah saat terhubung ke VM, coba reset VM atau ubah aturan firewall.gcloud compute ssh VM_NAME
Ganti
VM_NAME
dengan nama VM yang akan dihubungkan.Update VM dan instal paket yang diperlukan:
sudo apt update && sudo apt install uml-utilities qemu-kvm bridge-utils virtinst libvirt-daemon-system libvirt-clients -y
Mulai jaringan default yang disertakan dengan paket
libvirt
:sudo virsh net-start default
Jalankan perintah berikut untuk memeriksa apakah Anda memiliki jembatan
virbr0
:user@nested-vm:~$ ip addr
Verifikasi output yang mirip dengan berikut ini:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000 link/ether 42:01:0a:80:00:15 brd ff:ff:ff:ff:ff:ff inet 10.128.0.21/32 brd 10.128.0.21 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::4001:aff:fe80:15/64 scope link valid_lft forever preferred_lft forever 3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000 link/ether 52:54:00:8c:a6:a1 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever 4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000 link/ether 52:54:00:8c:a6:a1 brd ff:ff:ff:ff:ff:ff
Buat antarmuka
tap
untuk beralih dari VM L1 ke VM L2:sudo tunctl -t tap0 sudo ifconfig tap0 up
Kaitkan antarmuka
tap
ke jembatan pribadi:sudo brctl addif virbr0 tap0
Jalankan perintah berikut untuk memverifikasi penyiapan jaringan bridge:
sudo brctl show
Verifikasi output yang mirip dengan berikut ini:
bridge name bridge id STP enabled interfaces virbr0 8000.5254008ca6a1 yes tap0 virbr0-nic
Download image OS yang kompatibel dengan QEMU untuk digunakan pada VM L2.
Jalankan
screen
, lalu tekan Enter di perintah selamat datang:screen
Gunakan perintah berikut untuk memulai VM bertingkat. Jika diminta, login dengan
user: root
,password: root
.sudo qemu-system-x86_64 -enable-kvm -hda IMAGE_NAME -m 512 -net nic -net tap,ifname=tap0,script=no -curses
Ganti
IMAGE_NAME
dengan nama OS image yang kompatibel dengan QEMU yang akan digunakan untuk VM L2.Di VM L2, jalankan
ip addr
untuk mengonfirmasi bahwa VM L2 memiliki alamat di ruang virbr0, seperti192.168.122.89
:user@nested-vm:~$ ip addr
Mulai server web placeholder pada port
8000
:user@nested-vm:~$ python -m http.server
Lepaskan dari sesi
screen
denganCtrl+A
,Ctrl+D
.Uji apakah VM L1 Anda dapat melakukan ping ke VM L2, lalu ganti alamat IP di bawah dengan alamat IP VM L2:
curl 192.168.122.89:8000
Pastikan respons dari VM L2 mirip dengan yang berikut ini:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html> <title>Directory listing for /</title> <body> <h2>Directory listing for /</h2> <hr> <ol> <li><a href=".aptitude/">.aptitude/</a> <li><a href=".bashrc">.bashrc</a> <li><a href=".profile">.profile</a> </ol> <hr> </body> </html>
Di VM L1, siapkan
iptables
untuk mengizinkan penerusan dari VM L1 ke VM L2. Untuk OS image L2 yang digunakan dalam petunjuk ini, Anda harus mengosongkan tabel IP:sudo iptables -F
Tentukan IP alias VM L1:
ip route show table local
Pastikan output-nya mirip dengan berikut ini. Untuk contoh ini, ada dua alamat IP yang terkait dengan perangkat ethernet
eth0
VM L2. Yang pertama,10.128.0.2
, adalah alamat IP utama VM L2, yang ditampilkan olehsudo ifconfig -a
. Yang kedua,10.128.0.13
, adalah alamat IP alias VM L2.local 10.128.0.2 dev eth0 proto kernel scope host src 10.128.0.2 broadcast 10.128.0.2 dev eth0 proto kernel scope link src 10.128.0.2 local 10.128.0.13/30 dev eth0 proto 66 scope host broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1 local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1 local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1 broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1 broadcast 192.168.122.0 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown local 192.168.122.1 dev virbr0 proto kernel scope host src 192.168.122.1 broadcast 192.168.122.255 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown
Jalankan perintah berikut untuk meneruskan traffic dari contoh IP alias
10.128.0.13
ke contoh IP192.168.122.89
untuk VM L2:echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward sudo iptables -t nat -A PREROUTING -d 10.128.0.13 -j DNAT --to-destination 192.168.122.89 sudo iptables -t nat -A POSTROUTING -s 192.168.122.89 -j MASQUERADE sudo iptables -A INPUT -p udp -j ACCEPT sudo iptables -A FORWARD -p tcp -j ACCEPT sudo iptables -A OUTPUT -p tcp -j ACCEPT sudo iptables -A OUTPUT -p udp -j ACCEPT
Untuk informasi tentang pemecahan masalah
iptables
, lihatiptables
tidak meneruskan traffic.Verifikasi akses VM L2 dari luar VM L1 dengan login ke VM lain yang berada di jaringan yang sama dengan VM L1, dan membuat permintaan
curl
ke IP alias, yang mengganti alamat IP di bawah dengan IP alias VM L2:user@another-vm:~$ curl 10.128.0.13:8000
Verifikasi bahwa respons
curl
mirip dengan yang berikut:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html> <title>Directory listing for /</title> <body> <h2>Directory listing for /</h2> <hr> <ol> <li><a href=".aptitude/">.aptitude/</a> <li><a href=".bashrc">.bashrc</a> <li><a href=".profile">.profile</a> </ol> <hr> </body> </html>