Saya ingin menjalankan tes jaringan kinerja tinggi dalam wadah buruh pelabuhan, dan tidak ingin overhead menjembatani (sehingga pipa tidak akan bekerja AFAIK). Saya ingin menetapkan (selain perangkat docker veth normal) antarmuka jaringan fisik 40GbE dari host ke wadah buruh pelabuhan seperti dalam mode "Phys" lxc. Ini harus menyebabkan antarmuka fisik menjadi tidak terlihat oleh tuan rumah.
networking
docker
NeilenMarais
sumber
sumber
Dalam pencarian saya, saya menemukan solusi lama yang invovled melewati parameter lxc-config ke buruh pelabuhan, tetapi versi buruh pelabuhan yang lebih baru tidak menggunakan alat lxc lagi, sehingga tidak bisa berfungsi.
Mengikuti saran di sini: https://groups.google.com/d/msg/docker-user/pL8wlmiuAEU/QfcoFcKI3kgJ sebuah solusi ditemukan. Saya tidak melihat ke dalam memodifikasi skrip pipework seperti yang disebutkan di atas, melainkan menggunakan perintah yang diperlukan secara langsung. Juga lihat posting blog berikutnya: http://jason.digitalinertia.net/exposing-docker-containers-with-sr-iov/ .
Perintah alat namespace jaringan level rendah (yaitu tidak khusus docker) ini dapat digunakan untuk mentransfer antarmuka dari host ke wadah buruh pelabuhan:
Peringatan kecil pada penamaan antarmuka jika host Anda memiliki banyak perangkat ethX (milik saya memiliki eth0 -> eth5). Misalnya, Anda memindahkan eth3 ke wadah sebagai eth1 di namespace wadah. Ketika Anda menghentikan wadah, kernel akan mencoba untuk memindahkan perangkat eth1 penampung kembali ke host, tetapi perhatikan bahwa sudah ada perangkat eth1. Kemudian akan mengubah nama antarmuka menjadi sesuatu yang sewenang-wenang; Butuh beberapa saat untuk menemukannya lagi. Untuk alasan ini saya mengedit /etc/udev/rules.d/70-persistent-net.rules (saya pikir nama file ini umum untuk distro Linux yang paling populer; saya menggunakan Debian) untuk memberikan antarmuka pertanyaan yang unik, nama yang tidak salah lagi. , dan gunakan itu di wadah dan di host.
Karena kita tidak menggunakan buruh pelabuhan untuk melakukan konfigurasi ini, alat siklus hidup buruh pelabuhan standar (misalnya buruh pelabuhan --restart = on-failure: 10 ...) tidak dapat digunakan. Mesin host tersebut menjalankan Debian Wheezy, jadi saya menulis skrip init berikut:
Sedikit hacky, tapi berhasil :)
sumber
eth
? Bukankah Debian melakukan nama perangkat jaringan yang konsisten?/var/run/netns/$PID
diperlukan: Anda memerlukannya agarip netns exec $PID ...
perintah berfungsi.Saya menulis plugin jaringan buruh pelabuhan untuk melakukan ini.
https://github.com/yunify/docker-plugin-hostnic
sumber