Verschachtelte Virtualisierung für VM-Instanzen aktivieren

In diesem Dokument wird beschrieben, wie die Unterstützung für die verschachtelte Virtualisierung in Compute Engine-VM-Instanzen aktiviert wird. Außerdem werden die grundlegenden Schritte zum Starten und Konfigurieren einer verschachtelten VM behandelt.

Die verschachtelte Virtualisierung unterstützt Intel VT-x-Prozessor-Virtualisierungsanweisungen für Compute Engine-VMs. Mit der verschachtelten Virtualisierung starten Sie eine VM-Instanz wie gewohnt in Compute Engine und installieren dann einen KVM-kompatiblen Hypervisor auf der VM-Instanz, damit Sie eine weitere VM-Instanz auf diesem Hypervisor ausführen können. Sie können die verschachtelte Virtualisierung für jede Linux-VM-Instanz verwenden, die auf einer Haswell- oder einer neueren Plattform ausgeführt wird. Weitere Einschränkungen finden Sie im Unterabschnitt Einschränkungen der verschachtelte Virtualisierung.

Die verschachtelte Virtualisierung eignet sich ideal für VM-basierte Anwendungen und Arbeitslasten, bei denen die Konvertierung oder der Import Ihrer VM-Images in Compute Engine nicht möglich ist. Sie können die verschachtelte Virtualisierung z. B. verwenden, um eine Notfallwiederherstellungslösung für eine lokale Arbeitslast zu erstellen, die auf KVM-basierten virtuellen Maschinen ausgeführt wird. Dadurch wird ein nahtloses Failover auf in Compute Engine ausgeführte VMs ermöglicht, und zwar ohne den zusätzlichen Zeit- oder Orchestrierungsaufwand, den eine Konvertierung Ihrer KVM-basierten VM in ein natives Compute Engine-Image mit sich bringen würde. Eine weitere Arbeitslast, die sich gut für die verschachtelte Virtualisierung eignen könnte, ist ein Softwarevalidierungs-Framework, das neue Versionen eines Softwarepakets in zahlreichen Versionen verschiedener KVM-kompatibler Betriebssysteme testen und validieren muss. Wenn Sie verschachtelte VMs ausführen, müssen Sie keine große Bibliothek von Compute Engine-Images konvertieren und verwalten.

Vorbereitung

Funktionsweise der verschachtelten Virtualisierung

Compute Engine-VMs werden auf der physischen Hardware (dem Hostserver) ausgeführt, die als L0-Umgebung bezeichnet wird. Ein vorinstallierter Hypervisor auf dem Hostserver ermöglicht einem einzelnen Server, mehrere Compute Engine-VMs zu hosten, die in Compute Engine als L1- oder native VMs bezeichnet werden. Wenn Sie die verschachtelte Virtualisierung verwenden, installieren Sie einen weiteren Hypervisor auf dem L1-Gastbetriebssystem und erstellen mithilfe des L1-Hypervisors verschachtelte VMs, die als L2-VMs bezeichnet werden. L1- oder native Compute Engine-VMs, die einen Gast-Hypervisor ausführen, sowie verschachtelte VMs können auch als Host-VMs bezeichnet werden.

Schematische Darstellung der verschachtelten Virtualisierung

Einschränkungen

  • Die verschachtelte Virtualisierung kann nur für L1-VMs aktiviert werden, die auf Haswell- oder neueren Plattformen ausgeführt werden. Wenn der Standardprozessor für eine Zone Sandy Bridge oder Ivy Bridge ist, können Sie die Mindest-CPU-Auswahl verwenden, um für eine bestimmte Instanz die Haswell- oder eine neuere Plattform auszuwählen. Auf der Seite Regionen und Zonen können Sie sich darüber informieren, welche Zonen Haswell- oder neuere Plattformen unterstützen.
  • Die verschachtelte Virtualisierung wird nur für KVM-basierte Hypervisoren unterstützt, die auf Linux-Instanzen ausgeführt werden. Hyper-V-, ESX- und Xen-Hypervisoren werden nicht unterstützt.
  • Windows-VMs unterstützen keine verschachtelte Virtualisierung. Das heißt, auf Host-VMs muss ein Linux-Betriebssystem ausgeführt werden. Verschachtelte VMs können jedoch bestimmte Windows-Betriebssysteme ausführen (siehe unten).

Getestete KVM-Versionen

Google führt einfache Start- und Integrationstests der verschachtelten Virtualisierung mithilfe folgender Linux-Distributionen und Kernel-/KVM-Versionen auf der Compute Engine-Instanz durch:

  • Debian 9 mit Kernel-Version 4.9
    • CentOS 6.5 mit Kernel-Version 2.6
    • Debian 9 mit Kernel-Version 4.9
    • RHEL 5.11 mit Kernel-Version 2.6
    • SLES 12 SP3 mit Kernel-Version 4.4
    • Ubuntu 16.04 LTS mit Kernel-Version 4.15
    • Windows Server 2008 R2
    • Windows Server 2016 Datacenter Edition
  • SLES 12 SP3 mit Kernel Version 4.4, auf dem die folgenden verschachtelten VMs gehostet werden:
    • SLES 12 SP3 mit Kernel-Version 4.4
  • Ubuntu 16.04 LTS mit Kernel-Version 4.15, auf der die folgenden verschachtelten VMs gehostet werden:
    • Ubuntu 16.04 LTS mit Kernel-Version 4.15

Wenn Sie Probleme haben, verschachtelte VMs auf Distributionen und Kernel/KVM-Versionen auszuführen, die hier nicht aufgeführt sind, reproduzieren Sie das Problem mit einer der oben genannten Umgebungen als Gastbetriebssystem in der Host-Instanz der Compute Engine, bevor Sie das Problem melden.

Leistung

Selbst bei verschachtelter Virtualisierung mit Hardwareunterstützung kommt es zu einer Leistungsminderung für die verschachtelten VMs selbst und für alle Anwendungen oder Arbeitslasten, die in ihnen ausgeführt werden. Die genaue Leistungsverschlechterung für eine bestimmte Anwendung oder Arbeitslast lässt sich zwar nicht vorhersagen, aber Sie können mit einer Minderung von 10 % für CPU-gebundene Arbeitslasten und einem vermutlich noch höheren Wert für I/O-gebundene Arbeitslasten rechnen.

Verschachtelte Virtualisierung auf einer Instanz aktivieren

Sie können die verschachtelte Virtualisierung mithilfe der API oder der gcloud-Komponente aktivieren. Erstellen Sie zur Aktivierung der verschachtelten Virtualisierung ein benutzerdefiniertes Image mit einem speziellen Lizenzschlüssel. Dieser aktiviert VMX in der L1- oder Host-VM-Instanz und verwendet dann dieses Image für eine Instanz, die die Einschränkungen für geschachtelte Virtualisierung erfüllt. Für den Lizenzschlüssel fallen keine zusätzlichen Kosten an.

  1. Erstellen Sie ein Laufwerk von einem öffentlichen Image oder von einem benutzerdefinierten Image mit einem Betriebssystem. Alternativ können Sie diesen Schritt überspringen und die Lizenz auf einem vorhandenen Laufwerk von einer Ihrer VM-Instanzen anwenden.

    gcloud

    Erstellen Sie ein Laufwerk aus dem Bootlaufwerk-Image Ihrer Wahl mit dem gcloud-Befehlszeilentool. Erstellen Sie in diesem Beispiel ein Laufwerk namens disk1 aus der Image-Familie debian-9:

    gcloud compute disks create disk1 --image-project debian-cloud --image-family debian-9 --zone us-central1-b

    API

    Erstellen Sie ein Laufwerk namens disk1 aus der Image-Familie debian-9:

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/disks
    
    {
     "name": "disk1",
     "sourceImage": "/projects/debian-cloud/global/images/family/debian-9"
    }

    Dabei ist [PROJECT_ID] Ihre Projekt-ID.

  2. Erstellen Sie mit dem von Ihnen erstellten Laufwerk oder mit dem einer vorhandenen Instanz ein benutzerdefiniertes Image mit dem für die Virtualisierung erforderlichen speziellen Lizenzschlüssel.

    gcloud

    Wenn Sie ein Image mit dem "gcloud"-Befehlszeilentool erstellen, geben Sie mit dem Flag "--licenses" die folgende Lizenz-URL an:

    https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx

    Mit dem folgenden Befehl wird zum Beispiel das Image "nested-vm-image" aus einem Beispiellaufwerk namens "disk1" erstellt:

    gcloud compute images create nested-vm-image \
      --source-disk disk1 --source-disk-zone us-central1-b \
      --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"

    API

    Fügen Sie in der API die Property "licenses" in die API-Anfrage ein:

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/images
    
    {
       "licenses": ["projects/vm-options/global/licenses/enable-vmx"],
       "name": "nested-vm-image",
       "sourceDisk": "zones/us-central1-b/disks/disk1"
    }

    Dabei ist [PROJECT_ID] Ihre Projekt-ID.

  3. Nach dem Erstellen eines Images mit der erforderlichen Lizenz können Sie das Quelllaufwerk löschen, wenn Sie es nicht mehr benötigen.
  4. Erstellen Sie eine VM-Instanz mit dem neuen benutzerdefinierten Image mit der Lizenz. Sie müssen die Instanz in einer Zone erstellen, die die Haswell-CPU-Plattform oder höher unterstützt. Beispiel:
    gcloud compute instances create example-nested-vm --zone us-central1-b \
                  --min-cpu-platform "Intel Haswell" \
                  --image nested-vm-image
  5. Bestätigen Sie, dass die verschachtelte Virtualisierung in der VM aktiviert ist.
    1. Stellen Sie eine Verbindung zur VM-Instanz her. Beispiel:
      gcloud compute ssh example-nested-vm
    2. Überprüfen Sie, ob die verschachtelte Virtualisierung aktiviert ist, indem Sie den folgenden Befehl ausführen. Eine Antwort ungleich Null bestätigt, dass die verschachtelte Virtualisierung aktiviert ist.
      grep -cw vmx /proc/cpuinfo

Verschachtelte VM starten

Sie können verschachtelte VMs auf verschiedene Arten starten. Dieser Abschnitt enthält ein Beispiel für das Starten einer verschachtelten VM mit qemu-system-x86_64 auf einer L1-VM unter Debian. Wenn bei der Ausführung verschachtelter VMs mit anderen Methoden als dem hier dokumentierten Prozess Probleme auftreten, reproduzieren Sie das Problem mithilfe dieses Prozesses, bevor Sie es als Fehler melden.

  1. Stellen Sie eine Verbindung zur VM-Instanz her. Beispiel:

    gcloud compute ssh example-nested-vm
    
  2. Aktualisieren Sie die VM-Instanz und installieren Sie einige erforderliche Pakete:

    sudo apt-get update && sudo apt-get install qemu-kvm -y
    
  3. Laden Sie ein Betriebssystem-Image herunter.

    wget https://people.debian.org/~aurel32/qemu/amd64/debian_squeeze_amd64_standard.qcow2
    
  4. Führen Sie screen aus:

    screen
    
  5. Wenn der Willkommensbildschirm (screen) angezeigt wird, drücken Sie die Eingabetaste.

  6. Starten Sie die verschachtelte VM und melden Sie sich mit den Daten user: root und password: root an, wenn Sie dazu aufgefordert werden.

    sudo qemu-system-x86_64 -enable-kvm -hda debian_squeeze_amd64_standard.qcow2 -m 512 -curses
    
  7. Testen Sie, ob Ihre VM externen Zugriff hat:

    user@nested-vm:~$ wget google.com && cat index.html
  8. Wenn Sie fertig sind, drücken Sie die Tasten Ctrl + a und Ctrl + d, um die screen-Sitzung zu beenden.

Private Brücke zwischen Host und verschachtelten VMs starten

Wenn Sie Verbindungen zwischen Host und verschachtelten VMs ermöglichen möchten, können Sie eine private Brücke erstellen. Dieses Beispielverfahren ist für eine L1-VM unter Debian vorgesehen.

  1. Stellen Sie eine Verbindung zur VM-Instanz her. Beispiel:

    gcloud compute ssh example-nested-vm
    
  2. Aktualisieren Sie die VM-Instanz und installieren Sie einige erforderliche Pakete:

    sudo apt-get update && sudo apt-get install uml-utilities qemu-kvm bridge-utils virtinst libvirt-daemon-system libvirt-clients -y
    
  3. Starten Sie das Standardnetzwerk, das im libvirt-Paket enthalten ist:

    sudo virsh net-start default
    
  4. Überprüfen Sie, ob Sie jetzt über die virbr0-Brücke verfügen:

    sudo ifconfig -a
    
     eth0      Link encap:Ethernet  HWaddr 42:01:0a:80:00:02
               inet addr:10.128.0.2  Bcast:10.128.0.2  Mask:255.255.255.255
               UP BROADCAST RUNNING MULTICAST  MTU:1460  Metric:1
               RX packets:14799 errors:0 dropped:0 overruns:0 frame:0
               TX packets:9294 errors:0 dropped:0 overruns:0 carrier:0
               collisions:0 txqueuelen:1000
               RX bytes:97352041 (92.8 MiB)  TX bytes:1483175 (1.4 MiB)
    
     lo        Link encap:Local Loopback
               inet addr:127.0.0.1  Mask:255.0.0.0
               inet6 addr: ::1/128 Scope:Host
               UP LOOPBACK RUNNING  MTU:65536  Metric:1
               RX packets:0 errors:0 dropped:0 overruns:0 frame:0
               TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
               collisions:0 txqueuelen:0
               RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
     virbr0    Link encap:Ethernet  HWaddr 5a:fa:7e:d2:8b:0d
               inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
               UP BROADCAST MULTICAST  MTU:1500  Metric:1
               RX packets:0 errors:0 dropped:0 overruns:0 frame:0
               TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
               collisions:0 txqueuelen:0
               RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
  5. Erstellen Sie eine tun-Schnittstelle, um von der Host-VM in die verschachtelte VM zu wechseln:

    sudo tunctl -t tap0
    sudo ifconfig tap0 up
    
  6. Verbinden Sie die tun-Schnittstelle mit der Brücken-VM:

    sudo brctl addif virbr0 tap0
    
  7. Überprüfen Sie, ob das Brückennetzwerk richtig eingerichtet ist:

    sudo brctl show
    
    bridge name     bridge id               STP enabled     interfaces
    virbr0          8000.5254005085fe       yes              tap0
  8. Laden Sie ein Betriebssystem-Image herunter.

    wget https://people.debian.org/~aurel32/qemu/amd64/debian_squeeze_amd64_standard.qcow2
    
  9. Führen Sie screen aus:

    screen
    
  10. Wenn der Willkommensbildschirm (screen) angezeigt wird, drücken Sie die Eingabetaste.

  11. Starten Sie die verschachtelte VM und melden Sie sich mit den Daten user: root und password: root an, wenn Sie dazu aufgefordert werden.

    sudo qemu-system-x86_64 -enable-kvm -hda debian_squeeze_amd64_standard.qcow2 -m 512 -net nic -net tap,ifname=tap0,script=no -curses
    
  12. Führen Sie auf der verschachtelten VM den Befehl ifconfig aus, um zu bestätigen, dass die VM im virbr0-Bereich eine Adresse aufweist, z. B. 192.168.122.89:

    user@nested-vm:~$ ifconfig
  13. Starten Sie einen Dummy-Webserver auf Port 8000:

    user@nested-vm:~$ python -m SimpleHTTPServer
  14. Drücken Sie die Tasten Ctrl + a und Ctrl + d, um die screen-Sitzung zu beenden.

  15. Testen Sie, ob Ihre Host-VM die verschachtelte VM anpingen kann:

    curl 192.168.122.89:8000
    

    Die verschachtelte VM sollte in etwa Folgendes zurückgeben:

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

Verschachtelte VM für den Zugriff von außerhalb der Host-VM konfigurieren

Sie können eine Instanz mit mehreren Netzwerkschnittstellen einrichten oder eine Instanz mithilfe einer Alias-IP einrichten, sodass VMs außerhalb der Host-VM die verschachtelte VM anpingen können.

Mit dem folgenden Beispielverfahren werden die Host-VM und die verschachtelte VM so eingerichtet, dass von anderen VMs im selben Netzwerk über Alias-IPs auf die verschachtelte VM zugegriffen werden kann. Bei diesem Vorgang wird ein imaginäres Subnetz namens subnet1 verwendet, das zuvor erstellt wurde. Sie können subnet1 durch den Namen Ihres eigenen Subnetzes ersetzen oder ein neues Subnetz namens subnet1 erstellen.

Beachten Sie, dass dieses Verfahren für eine L1-VM unter Debian vorgesehen ist.

  1. Erstellen Sie eine VM mit aktivierter verschachtelter Virtualisierung. Achten Sie dabei darauf, einen Alias-IP-Bereich und Unterstützung für HTTP-/HTTPS-Traffic einzurichten. Beispiel:

    gcloud compute instances create example-nested-vm --image nested-vm-image \
        --tags http-server,https-server --can-ip-forward \
        --min-cpu-platform "Intel Haswell" \
        --network-interface subnet=subnet1,aliases=/30
    
  2. Stellen Sie eine Verbindung zur VM-Instanz her. Beispiel:

    gcloud compute ssh example-nested-vm
    
  3. Aktualisieren Sie die VM-Instanz und installieren Sie einige erforderliche Pakete:

    sudo apt-get update && sudo apt-get install uml-utilities qemu-kvm bridge-utils virtinst libvirt-daemon-system libvirt-clients -y
    
  4. Starten Sie das Standardnetzwerk, das im libvirt-Paket enthalten ist:

    sudo virsh net-start default
    
  5. Überprüfen Sie, ob Sie jetzt über die virbr0-Brücke verfügen:

    sudo ifconfig -a
     
     eth0      Link encap:Ethernet  HWaddr 42:01:0a:80:00:02
               inet addr:10.128.0.2  Bcast:10.128.0.2  Mask:255.255.255.255
               UP BROADCAST RUNNING MULTICAST  MTU:1460  Metric:1
               RX packets:14799 errors:0 dropped:0 overruns:0 frame:0
               TX packets:9294 errors:0 dropped:0 overruns:0 carrier:0
               collisions:0 txqueuelen:1000
               RX bytes:97352041 (92.8 MiB)  TX bytes:1483175 (1.4 MiB)

    lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

    virbr0 Link encap:Ethernet HWaddr 5a:fa:7e:d2:8b:0d inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

  6. Erstellen Sie eine tun-Schnittstelle, um von der Host-VM in die verschachtelte VM zu wechseln:

    sudo tunctl -t tap0
    sudo ifconfig tap0 up
    
  7. Verbinden Sie die tun-Schnittstelle mit der Brücken-VM:

    sudo brctl addif virbr0 tap0
    
  8. Überprüfen Sie, ob das Brückennetzwerk richtig eingerichtet ist:

    sudo brctl show
    
    bridge name     bridge id               STP enabled     interfaces
    virbr0          8000.5254005085fe       yes              tap0
  9. Laden Sie ein Betriebssystem-Image herunter.

    wget https://people.debian.org/~aurel32/qemu/amd64/debian_squeeze_amd64_standard.qcow2
    
  10. Führen Sie screen aus:

    screen
    
  11. Wenn der Willkommensbildschirm (screen) angezeigt wird, drücken Sie die Eingabetaste.

  12. Starten Sie die verschachtelte VM und melden Sie sich mit den Daten user: root und password: root an, wenn Sie dazu aufgefordert werden.

    sudo qemu-system-x86_64 -enable-kvm -hda debian_squeeze_amd64_standard.qcow2 -m 512 -net nic -net tap,ifname=tap0,script=no -curses
    
  13. Führen Sie auf der verschachtelten VM den Befehl ifconfig aus, um zu bestätigen, dass die VM im virbr0-Bereich eine Adresse aufweist, z. B. 192.168.122.89:

    user@nested-vm:~$ ifconfig
  14. Starten Sie einen Dummy-Webserver auf Port 8000:

    user@nested-vm:~$ python -m SimpleHTTPServer
  15. Drücken Sie die Tasten Ctrl + a und Ctrl + d, um die screen-Sitzung zu beenden.

  16. Testen Sie, ob Ihre Host-VM die verschachtelte VM anpingen kann:

    curl 192.168.122.89:8000
    

    Die verschachtelte VM sollte in etwa Folgendes zurückgeben:

    <!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>
    
  17. Richten Sie iptables auf Ihrer Host-VM so ein, dass die Weiterleitung von Ihrer Host-VM an Ihre verschachtelte VM ermöglicht wird. Für das in dieser Anleitung verwendete L2-Gast-Image (debian_squeeze_amd64_standard.qcow2) müssen die IP-Tabellen zuerst geleert werden:

    sudo iptables -F
    

    Bestimmen Sie als Nächstes die Alias-IP der VM:

    ip route show table local
    

    Die VM sollte etwas Ähnliches wie die unten angegebene Ausgabe zurückgeben. In diesem Beispiel sind dem Ethernet-Gerät der VM (eth0) zwei IP-Adressen zugeordnet. Die erste, 10.128.0.2, ist die primäre IP-Adresse der VM, die von sudo ifconfig -a zurückgegeben wird. Die zweite, 10.128.0.13, ist die Alias-IP-Adresse der VM.

    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
    

    So leiten Sie Traffic von der Alias-IP an die VM unter 192.168.122.89 weiter:

    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 -d 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
    
  18. Als Nächstes melden Sie sich bei einer anderen VM an, die sich im selben Netzwerk wie die gehostete VM befindet, und stellen eine curl-Anfrage an die Alias-IP. Beispiel:

    user@another-vm:~$ curl 10.128.0.13:8000

    Die verschachtelte VM sollte in etwa Folgendes zurückgeben:

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

Fehlerbehebung

Google führt einfache Start- und Integrationstests der verschachtelten Virtualisierung mithilfe bestimmter Linux-Distributionen und Kernel-/KVM-Versionen auf der Compute Engine-Instanz durch. Bei diesen Tests wird zusätzlich ein bestimmter Prozess genutzt. Bevor Sie die Probleme als Fehler melden, reproduzieren Sie sie unter Verwendung der folgenden Elemente:

Wenn ich grep -c vmx /proc/cpuinfo ausführe, wird 0 zurückgegeben und ich erhalte die Meldung, dass meine VM nicht für die Verschachtelung aktiviert ist.

  1. Überprüfen Sie, dass Sie Ihre VM mit einer Haswell-Plattform oder einer neueren CPU-Plattform gestartet haben.
  2. Überprüfen Sie, dass Sie die richtige Lizenz für Ihr VM-Image verwenden.

Ich kann meine verschachtelte VM nicht beenden.

Wenn Sie screen nicht vor jeder verschachtelten VM-Sitzung ausgeführt haben, können Sie die verschachtelte VM entweder herunterfahren oder den Prozess von einem anderen Terminal aus beenden. Führen Sie den Befehl poweroff in Ihrer verschachtelten VM aus, um die verschachtelte VM herunterzufahren. Sie können sich auch bei der Host-VM in einem anderen Terminal anmelden und den Prozess beenden. Führen Sie dann screen auf der Host-VM aus, bevor Sie eine neue verschachtelte VM starten.

Meine iptables-Regeln leiten den Traffic nicht an meine verschachtelte VM weiter.

  • iptables-Regeln werden von oben nach unten abgearbeitet. Achten Sie darauf, dass Ihre Regeln eine höhere Priorität haben als andere Regeln.
  • Überprüfen Sie, dass Ihre Pakete nicht von Regeln abgefangen werden, die miteinander in Konflikt stehen.
  • Möglicherweise müssen Sie Ihre iptables leeren:

    1. Legen Sie als Erstes die Standardrichtlinien fest:

      sudo iptables -P INPUT ACCEPT
      sudo iptables -P FORWARD ACCEPT
      sudo iptables -P OUTPUT ACCEPT
      
    2. Leeren Sie nun alle Tabellen und Ketten und löschen Sie nicht standardmäßige Ketten:

      sudo iptables -t nat -F
      sudo iptables -t mangle -F
      sudo iptables -F
      sudo iptables -X
      
Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Compute Engine-Dokumentation