2014-01-08 12 views
5

Bearbeiten: Ab Mai 2015 ist SocketPlane (siehe website und repo) dem Docker-Team beigetreten und sie sind gerade dabei, ihre OVS-Lösung in den Docker-Core zu integrieren. Es scheint, als würden sie die verschiedenen Docker-Netzwerklösungen gewinnen.Wie verwende ich Docker (oder Linux Container) für die Netzwerkemulation?


Also habe ich Mininet wurde mit Tests auf meiner Netzwerk-Software laufen zu lassen. Es scheint jedoch an seine Grenzen zu stoßen, da Mininet-Container im Wesentlichen Linux-Container mit nur einem Netzwerk-Stack sind. Ich würde mir wünschen, dass jeder Container seinen eigenen Netzwerk-Stack, ein Dateisystem und eine Reihe von Prozessen hat - im Grunde hätte ich gerne einen Container, der so nah wie möglich an einer VM ist. Was mich zu Docker bringt, so wie ich es verstehe, ist Docker gegenüber von Mininet, seine Container haben ein Dateisystem und ihre eigenen Prozesse, aber keinen eigenen Netzwerk-Stack. Ich lehne mich Docker zu, da es eine nette API zum Abzweigen von Containern hat, die den Speicherplatz nur des Diff benutzt. Meine Frage ist, ist es möglich, einen Satz von Linux-Containern (mit Docker oder ähnlichem) mit dem folgenden Container-Layout + Netzwerk-Interface-Setup zu erstellen?

enter image description here

Antwort

2

können Sie Pipework zu diesem Zweck verwenden. Es ist speziell eines der Szenarien, die es implementiert (private Netzwerke zwischen Containern zusätzlich zu dem Standard-Docker-Netzwerk).

+0

Danke, ich habe es bereits gefunden und wir versuchen es jetzt :) – jpillora

2

Ich bin mir bewusst, zwei Open-Source-Netzwerk-Emulatoren, die Linux-Container verwenden:

Die CORE Network Emulator verwenden Container und jeder Behälter verfügt über ein eigenes Dateisystem (oder Teil-Dateisystem, weil es schafft nur Namespaces Halterung für die erforderlichen Verzeichnisse die Dienste, die auf jedem Knoten ausgeführt werden).

Der VNX Netzwerkemulator ist eine weitere Option. Es verwendet entweder KVM oder LXC, um virtuelle Knoten zu erstellen (aber ich habe die LXC-Option noch nicht ausprobiert).

+0

Danke für die Links @Brian, wir suchen derzeit nach einem Openflow 1.3 Software-Switch, der uns zu etwas OVS- führt. basierend, aber wir werden diese untersuchen und sehen, was wir tun können. – jpillora

1

@jpillora IMUNES Der Netzwerkemulator verwendet Docker für seinen L3 (PC, Router, Host) und Open vSwitch für die Knoten L2 (Hub, Switch). Zum Beispiel ist der Router-Knoten eigentlich ein Docker-Container mit einem Debian-Jessie-System, auf dem Quagga automatisch konfiguriert wird, so dass Sie nur die Knoten innerhalb der GUI zeichnen müssen. Sie können dann auf diese Container zugreifen, indem Sie darauf doppelklicken und alles tun, was Sie auf einem Linux-System tun würden. Es verwendet ein "spezielles" Docker-Image, das auf Hub namens imunes/vroot verfügbar ist und einen Dummy-Init-Prozess verwendet, so dass es nicht beendet wird. Technisch kann man es mit ein bisschen Feingefühl durch alles ersetzen, was man will. Der Quellcode ist unter Github verfügbar. Ich denke, es wäre für Sie Anwendungsfall angemessen.

2

CORE Network Emulator hat einen Docker Service, den ich beigetragen habe und schrieb eine article about. Die ursprüngliche Version, die in 4.8 ist, ist größtenteils kaputt, aber ich habe es behoben und verbessert. Eine Pull-Anfrage ist unter GitHub.

Der Dienst ermöglicht es Ihnen, Docker Images mit 'core' zu taggen, und dann erscheinen sie als eine Option in den Diensteinstellungen. Sie müssen das Docker-Image auswählen, das den Andockdienst im Container startet. Sie wählen dann den Container oder die Container aus, die in diesem Knoten ausgeführt werden sollen. Es skaliert ziemlich gut und ich hatte über 2000 Knoten auf meiner 16 GB-Maschine.

Sie erwähnten OVS auch. Dies ist noch nicht in CORE integriert, kann aber manuell verwendet werden. Ich habe gerade eine Frage in der CORE Mailingliste beantwortet. Es gibt einen kurzen Überblick über den Wechsel eines Standard-CORE-Switches (Bridge) mit OVS.Text unten reproduziert, wenn es nützlich ist:

Nicht wirklich openvswitch zuvor verwendet, aber hatte einen schnellen Blick.

ich installierte openvswitch über meinen Paket-Manager (Ubuntu 15.04):

sudo apt-get install openvswitch-Schalter

ich ein sehr einfaches Netzwerk in CORE 4.8 dann gebaut. 2 PCs mit einem Switch verbunden. Ich habe die Emulation in CORE gestartet. Dann auf dem Host schaute ich auf den Brücken, die eingerichtet worden war:

sudo brctl show 

bridge name  bridge id    STP enabled  interfaces 
b.3.76   8000.42c789ce95e9  no    veth1.0.76 
                 veth2.0.76 
docker0   8000.56847afe9799  no 
lxcbr0   8000.000000000000  no 

ich die Brücke sehen kann, dass der Schalter darstellt b.3.76 genannt und verfügt über Schnittstellen veth1.0.76 und veth2.0.76 attached to it. Ich lösche die Brücke:

sudo ip link set b.3.76 down 
sudo brctl delbr b.3.76 

ich dann die openvswitch Brücke ein:

sudo ovs-vsctl add-br b.3.76 
sudo ovs-vsctl add-port b.3.76 veth1.0.76 
sudo ovs-vsctl add-port b.3.76 veth2.0.76 

Ich kann jetzt ping zwischen den Knoten, so dass die Schalter zu funktionieren scheint. Ich habe nicht versucht, openvswitch zu konfigurieren.

Wenn Sie die CORE-Emulation stoppen es nicht offensichtlich die openvswitch Brücke oder Ports nicht löschen, so dass Sie zu tun haben, dass von Hand:

sudo ovs-vsctl del-port veth2.0.76 
sudo ovs-vsctl del-port veth1.0.76 
sudo ovs-vsctl del-br b.3.76 

Dies wäre relativ einfach mit einem Skript zu automatisieren oder mit einem wenig ein bisschen Arbeit könnte in Docker integriert werden.

hoffe, das hilft

0

Ich versuchte CORE und ein paar andere, aber fand sie schwer konfigurieren und laufen (vor allem in AWS oder auf dem Mac). Sie sind wahrscheinlich leistungsfähig, aber übertrieben, wenn Sie nur einfache Netzwerke simulieren wollen.

Daher schrieb ich YANS (Noch ein anderer Netzwerk-Simulator). YANS basiert auf Docker. Selbst ich bin überrascht zu sehen, wie schnell es läuft. Versuch es einmal!

Verwandte Themen