Virtualisasi bertingkat diizinkan secara default. Jadi, kecuali jika Anda 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 menyelesaikan salah satu tugas 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 memverifikasi identitas Anda untuk mengakses layanan Google Cloud dan API. Untuk menjalankan
kode atau contoh dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke
Compute Engine dengan memilih salah satu opsi berikut:
Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:
gcloud
-
Instal Google Cloud CLI, lalu login ke gcloud CLI dengan identitas gabungan Anda. Setelah login, inisialisasi Google Cloud CLI dengan menjalankan perintah berikut:
gcloud init
-
- Tetapkan 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 login ke gcloud CLI dengan identitas gabungan Anda.
Untuk mengetahui informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud .
Membuat VM L2 dengan akses jaringan eksternal
Untuk membuat VM L2 dengan akses jaringan eksternal, ikuti prosedur ini.
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 sshuntuk terhubung ke VM:gcloud compute ssh VM_NAME
Ganti
VM_NAMEdengan nama VM yang akan dihubungkan.Instal paket
qemu-kvmterbaru: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 VM L2. Saat diminta, login dengan
user: root,password: root.sudo qemu-system-x86_64 -enable-kvm -hda IMAGE_NAME -m 512 -curses
Ganti
IMAGE_NAMEdengan 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
Untuk membuat VM L2 dengan jembatan jaringan pribadi ke VM L1 yang dibuat sebelumnya, ikuti prosedur ini. Untuk mengetahui informasi tentang cara mengubah unit transmisi maksimum (MTU) default untuk jaringan VPC Anda, lihat ringkasan unit transmisi maksimum.
Gunakan perintah
gcloud compute sshuntuk terhubung ke VM:gcloud compute ssh VM_NAME
Ganti
VM_NAMEdengan 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
Output-nya 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:ffBuat antarmuka
tapuntuk beralih dari VM L1 ke VM L2:sudo tunctl -t tap0 sudo ifconfig tap0 up
Kaitkan antarmuka
tapke jembatan pribadi:sudo brctl addif virbr0 tap0
Jalankan perintah berikut untuk memverifikasi penyiapan jaringan jembatan:
sudo brctl show
Output-nya mirip dengan berikut ini:
bridge name bridge id STP enabled interfaces virbr0 8000.5254008ca6a1 yes tap0 virbr0-nicDownload 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. Saat 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_NAMEdengan nama OS image yang kompatibel dengan QEMU yang akan digunakan untuk VM L2.Di VM L2, jalankan
ip addr showuntuk mengonfirmasi bahwa VM memiliki alamat di ruangvirbr0— misalnya,192.168.122.89:user@nested-vm:~$ ip addrMulai server web placeholder pada port
8000:user@nested-vm:~$ python -m http.serverLepaskan dari sesi
screendenganCtrl+A,Ctrl+D.Untuk menguji apakah VM L1 Anda dapat melakukan ping ke VM L2, ganti 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. Untuk membuat VM L2 dengan akses jaringan melalui IP alias dari luar VM L1 yang dibuat sebelumnya, gunakan prosedur berikut. 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. Platform CPU minimum untuk VM Intel harus
"Intel Haswell":gcloud
gcloud compute instances create VM_NAME --enable-nested-virtualization \ --tags http-server,https-server --can-ip-forward \ --network-interface subnet=subnet1,aliases=/30Ganti
VM_NAMEdengan 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" } ], } ], "advancedMachineFeatures": { "enableNestedVirtualization": true }, ... }Ganti kode berikut:
PROJECT_ID: project IDZONE: zona untuk membuat VMVM_NAME: nama VM
Gunakan perintah
gcloud compute sshuntuk 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_NAMEdengan 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 addrVerifikasi 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:ffBuat antarmuka
tapuntuk beralih dari VM L1 ke VM L2:sudo tunctl -t tap0 sudo ifconfig tap0 up
Kaitkan antarmuka
tapke 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-nicDownload 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_NAMEdengan nama OS image yang kompatibel dengan QEMU yang akan digunakan untuk VM L2.Di VM L2, jalankan
ip addruntuk mengonfirmasi bahwa VM L2 memiliki alamat di ruang virbr0, seperti192.168.122.89:user@nested-vm:~$ ip addrMulai server web placeholder pada port
8000:user@nested-vm:~$ python -m http.serverLepaskan dari sesi
screendenganCtrl+A,Ctrl+D.Untuk menguji apakah VM L1 Anda dapat melakukan ping ke VM L2, ganti alamat IP 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 IPtables:
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
eth0VM 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 linkdownJalankan perintah berikut untuk meneruskan traffic dari contoh IP alias
10.128.0.13ke contoh IP192.168.122.89untuk 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, lihatiptablestidak meneruskan traffic.Untuk memverifikasi akses VM L2 dari luar VM L1, login ke VM lain yang berada di jaringan yang sama dengan VM L1, dan buat permintaan
curlke IP alias dengan mengganti alamat IP dengan IP alias VM L2:user@another-vm:~$ curl 10.128.0.13:8000Verifikasi bahwa respons
curlmirip 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>