Ausführen von Linux-Containern (lxc) unter Ubuntu, um Webserverprozesse zu isolieren (Ruby / Thin)

7

Ich versuche, einen Server einzurichten, auf dem mehrere Apps ausgeführt werden. Meist intern, könnte aber auch Open Source-Projekte wie Redmine sein. Dies wären alles Rails / Ruby-Apps / Testskripte, die in Headless-Browsern ausgeführt werden. Im Wesentlichen versuche ich, eine Heroku-ähnliche Umgebung intern einzurichten, und wollte eine Art Prozessisolation zwischen diesen laufenden Prozessen.

Ich bin zuerst auf Chroot-Gefängnisse gestoßen und habe dann etwas über LXC gelernt. LXC scheint eine bessere Kontrolle über einfache Chroot-Gefängnisse zu bieten. Ich habe ein Nginx-Frontend und möchte die Webserver-App-Prozesse (Thin / Mongrel / Webrick) in isolierten Containern ausführen. Normalerweise starten wir diese Prozesse einfach über die lokale IP-Adresse und haben einen Nginx-Proxy für sie. Was ist der beste Weg, um dies zu erreichen? Richten Leute eine statisch überbrückte IP für den Container ein und haben Nginx-Punkte darauf? Wie stelle ich sicher, dass in den Containern ausgeführte Webserver nur für Hosts außerhalb zugänglich sind?

Die Dokumentation zu LXC scheint etwas spärlich zu sein. Hinweise auf einige gute Tutorials oder HOWTOs wären sehr dankbar. Meine Zielbereitstellungsumgebung ist eine Lucid 64-Bit-Box.

PS Ich bin kein Linux-Guru. Also sei sanft.

Vagmi Mudumbai
quelle

Antworten:

13

Nehmen wir an, Ihre eigene IP ist 192.168.1.1, Ihr Gateway ist 192.168.1.254 und Ihr Netzwerk ist 192.168.1.0/24.

Sie sollten auf Ihrem Host-Computer eine überbrückte Schnittstelle erstellen, wie diese in der Datei / etc / network / interfaces

 auto lo
 iface lo inet loopback

 auto br0
 iface br0 inet static
     address 192.168.1.1
     network 192.168.1.0
     netmask 255.255.255.0
     broadcast 192.168.1.255
     gateway 192.168.1.254
     bridge_ports eth0
     bridge_stp off
     bridge_fd 3
     bridge_hello 1
     bridge_maxage 5

und installieren Sie dann ein einfaches Ubuntu in LXC:

 apt-get install lxc vlan bridge-utils python-software-properties screen
 mkdir /lxc
 debootstrap oeniric /lxc/ubuntu
 chroot ubuntu
 locale-gen en_US.UTF-8
 apt-get update
 apt-get install lxcguest ssh
 passwd
 rm /etc/mtab
 ln -s /proc/mounts /etc/mtab
 exit

Erstellen Sie eine Datei /lxc/ubuntu.config mit dem Inhalt

 lxc.utsname = ubuntu
 lxc.tty = 8
 lxc.rootfs = /lxc/ubuntu
 lxc.mount = /lxc/ubuntu.fstab
 lxc.network.type = veth
 lxc.network.flags = up
 lxc.network.link = br0
 lxc.network.name = eth0
 lxc.network.mtu = 1500
 lxc.network.ipv4 = 192.168.1.10/24

/lxc/ubuntu.fstab mit

 none /lxc/ubuntu/dev/pts devpts defaults 0 0
 none /lxc/ubuntu/proc proc defaults 0 0
 none /lxc/ubuntu/sys sysfs defaults 0 0
 none /lxc/ubuntu/run tmpfs defaults 0 0

zu /lxc/ubuntu/etc/rc.local hinzufügen

 route add default gw 192.168.1.254

Bearbeiten Sie /lxc/ubuntu/etc/resolv.cont entsprechend Ihren Anforderungen.

Dann können Sie Ihre Maschine mit erstellen

 lxc-create -f /lxc/ubuntu.config -n ubuntu

dann fang an

 lxc-start -n ubuntu

oder aufhören

 lxc-stop -n ubuntu

oder schließlich zerstören

 lxc-destroy -n ubuntu

Ihre neue virtuelle Maschine hat die IP 192.168.1.10 und ist im Netzwerk verfügbar.

Stein
quelle
0

Wenn Sie dem Container lieber keine externen IP-Adressen zuweisen möchten oder nicht:

Auf der Debian-Wiki-Seite von LXC werden zwei Varianten erwähnt, mit denen NAT auf dem Host-Computer erreicht werden kann. Ich verwende den Ansatz mit libvirt und hatte bisher keine Probleme damit.

Ich weiß nicht, wie es unter Ubuntu ist, aber dort ist es wahrscheinlich nicht viel anders.

Die Wiki-Seite scheint eine gute Informationsquelle zu sein, aber der Betreuer selbst sagt, dass Sie sich lieber auf die Datei beziehen sollten, um /usr/share/doc/lxc/README.Debianaktuelle Informationen zu erhalten.

moschlar
quelle