Menghubungkan Libvirt VM (Domain XML config) ke OpenVSwitch

1

Saya mencoba mempelajari OVS dan KVM, dan secara umum memahami jaringan jembatan dasar di dunia virtual (yaitu antara OVS, Host VM, dan tamu KVM / Libvirt). Saya menggunakan ClearLinux (berbasis systemd) pada host VM.

Pertanyaan saya yang sebenarnya adalah huruf tebal lebih jauh ke bawah , sisa posting ini adalah semoga membantu orang menyarankan saya tentang hal itu.

SUNTING:


Mengarah ke SU dari Network Engineering StackExchange. Jika ada yang tahu kursus pelatihan yang bagus tentang OVS dan KVM, beri tahu saya :-)


Referensi sejauh ini: https://libvirt.org/formatdomain.html http://docs.openvswitch.org/en/latest/howto/libvirt/

Jadi, saya sampai pada titik:

  1. Memiliki jembatan ovs (testbridge)
  2. Menghubungkan ethernet fisik host (enp5s0) ke testbridge
  3. Membuat dua perangkat keran virtual (virtualport1 dan 2)
  4. Menghubungkan ketukan ke testbridge

OVS terlihat seperti ini:

sudo ovs-vsctl show

010aff41-dc37-410d-87dc-842a1a2cebeb
    Bridge testbridge
        Port "virtualport2"
            Interface "virtualport2"
        Port "enp5s0"
            Interface "enp5s0"
        Port testbridge
            Interface testbridge
                type: internal
        Port "vnet0"
            Interface "vnet0"
        Port "virtualport1"
            Interface "virtualport1"
    ovs_version: "2.8.1"

'enp5s0' adalah port fisik pada host vm. Terhubung ke Cisco SG-300 (antarmuka umum switchport, trunking sekelompok vlan, pvid umum 25 dan vlan 25 tidak ditandai).

Ada server DHCP eksternal yang bekerja pada semua VLAN yang relevan.

Saya memiliki tamu libvirt bernama 'debian' (tanda bonus untuk kreativitas) yang dikonfigurasi dengan:

<interface type='bridge'>
  <mac address="00:16:3E:EF:61:91"/>
  <model type='virtio'/>
  <source bridge='testbridge'/>
  <virtualport type='openvswitch'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<graphics type='vnc' port='-1' autoport='yes' sharePolicy='allow-exclusive' passwd='PleaseDontHaxorMe'>
  <listen type='address' listen='0.0.0.0'/>
</graphics>

Bagaimanapun, di sinilah aku terjebak. Pertanyaan saya: Bagaimana cara saya mendapatkan kesenangan L3 yang terjadi di antarmuka vnet0 (yaitu di guest vm 'debian'), jadi saya memiliki IP ke VNC, untuk melakukan instalasi (Saya menggunakan debian netinst.iso)?

Karena belum pernah melakukan ini sebelumnya, saya berasumsi bahwa itu akan arp dan muncul melalui DHCP dan alamat ip menunjukkan vnet0 akan menunjukkan alamat VM ke VNC untuk itu ... Jelas tidak. Sepertinya ada di L2 (seperti di bawah ini):

ip address show vnet0
16: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq master ovs-system state UNKNOWN group default qlen 1000
    link/ether fe:16:3e:ef:61:91 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc16:3eff:feef:6191/64 scope link
       valid_lft forever preferred_lft forever

Tetapi melakukan:

sudo ovs-appctl fdb/show testbridge

Sepertinya hanya daftar mac di Port 1 (enp5s0) bukan vnet0 ...

Jika saya bisa menjalankannya, saya juga ingin belajar cara mengkonfigurasi 'vnet0' di ovs testbridge:

  1. Sebagai port akses di vlan 100?
  2. Sebagai port trunk, pada vlan 100, 150 dan 151?
  3. Untuk trunk semua / semua vlan yang ditandai untuk yang ada di testbridge?
  4. Sama dengan 3, tetapi termasuk vlan yang tidak diberi tag?

EDIT 3:


https://blog.scottlowe.org/2012/11/07/using-vlans-with-ovs-and-libvirt/ Ini cukup banyak mencakup poin-poin di atas. Juga lihat cara menggunakan domain libvirt xml untuk menambal di VM. Belum menyelesaikan semuanya, akan mengujinya besok.


Yang mengatakan, saya mungkin bisa mengerjakan 4 hal terakhir ini sendiri jika saya bisa mendapatkan VM di tempat pertama untuk mengendus lalu lintas di vnet0 dan melihat apa yang sebenarnya terjadi ...

CATATAN: Saya bermaksud menghubungkan VM ke virtualport1 tetapi melewatkannya di suatu tempat dan alih-alih itu menciptakan port baru pada testbridge yang disebut 'vnet0'. Cukup yakin itu dapat diperbaiki di libvirt domainxml dengan parameter ovs di sini (akan merapikannya nanti, untuk saat ini, vnet0 itu!): Https://libvirt.org/formatdomain.html#elementsNICSBridge

EDIT 2:


Saya pikir bit ini diselesaikan sesuai tautan di atas dengan:

Tarik uuid port terkait yang ingin Anda lampirkan:

sudo ovs-vsctl list Port | grep 'name\|_uuid'

Tambahkan ke domain Libvirt XML dari VM yang relevan:

<interface type='bridge'>
  <mac address="00:16:3E:EF:61:91"/>
  <model type='virtio'/>
  <source bridge='testbridge'/>
  <virtualport type='openvswitch'/>
    <parameters interfaceid='YOUR_UUID_GOES_HERE'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

Tepuk tangan

Chris
sumber

Jawaban:

0

Oke, ternyata saya XY ini sesuatu yang mengerikan ....

Semuanya bekerja, saya hanya tidak tahu bagaimana cara menginstal tanpa kepala. Ternyata, melakukannya adalah hal yang mudah untuk penerusan port SSH seperti yang dicakup:

Baca semua tentang konfigurasi VM domain XML (elemen yang berkaitan dengan VNC khususnya) di sini:

Beberapa catatan singkat tentang itu:

VNC Notes:
* Default - Guest binds it's VNC server to hosts loopback:
    <graphics type='vnc' port='-1' autoport='yes'/>
* The first guest gets screen 0/port 5900, the second guest gets screen 1/port 5901 etc.
* Requires SSH tunneling in order to gain access to the guest domain’s VNC console.
Better VNC Options:
    Guest listens on any host interface, port auto allocated:
        <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/>
    Guest listens on specified IP, port auto allocated, password protected:
        <graphics type='vnc' port='-1' autoport='yes' passwd='correcthorsebatterystaple'>
          <listen type='address' address='192.168.120.15'/>
        </graphics>
    Guest listens on specified IP and port, password protected with screen share policy:
        <graphics type='vnc' port='5904' listen='192.168.120.15' sharePolicy='allow-exclusive' passwd='correcthorsebatterystaple'>
          <listen type='address'  listen='192.168.120.15'/>
        </graphics>
    Guest listens on specified IP, auto websocket, password protected with screen share policy:
        <graphics type='vnc' websocket='-1' listen='192.168.120.15' sharePolicy='allow-exclusive' passwd='correcthorsebatterystaple'>
          <listen type='address'  listen='192.168.120.15'/>
        </graphics>

Singkatnya: Pastikan Anda memiliki elemen VM Domain XML yang disiapkan dengan benar untuk VNC dan Anda menggunakan iso netinst. Konfigurasikan jembatan OVS Anda (jika itu yang Anda gunakan untuk VM). Tentukan XML jaringan libvirt. Kemudian dalam XML definisi domain VM, sambungkan ke jaringan libvirt yang telah ditentukan sebelumnya yang menggunakan jembatan OVS Anda.

Periksa port mendengarkan VM (mencatat bahwa itu relatif terhadap default,: 0 berarti semua IP pada 5900, 127.0.0.1:1 akan berarti localhost pada 5901 dll).

sudo virsh vncdisplay $VM_NAME

SSH meneruskan antarmuka ke VM, yang secara umum terlihat seperti:

ssh -N -L HOST_IP:HOST_PORT:localhost:5900 user@kvmhost

Meneruskan Localhost 5901 ke VM 5900:

ssh -N -L 5901:localhost:5900 user@kvmhost

Meneruskan IP eksternal tertentu pada host ke VM. '-fNT' digunakan untuk latar belakang SSH maju tanpa benar-benar menghentikan proses, sehingga membebaskan sesi konsol untuk tetap menggunakannya:

ssh -fNT -L 192.168.225.17:5901:localhost:5900 user@kvmhost
Chris
sumber