konfigurace sí»ování pro lxc kontejnery
Martin Tirsel
lk na blackpage.eu
Úterý Květen 13 11:58:29 CEST 2014
Ahoj,
co tak pouzit Docker (https://www.docker.io/)? Funguje to prave nad LXC.
Asi dva tyzdne sa s tymto hrajem a je to celkom premakane. V principe si
spravis tzv. Dockerfile, co je vlastne build script, ktory ti vygeneruje
image a z image potom startujes kontajnery (filozofia je jedna aplikacia
v jednom kontajneri, ale napr. cez supervizora je mozne spustit v
kontajneri aj viacero sluzieb ["hlavny" program v kontajneri musi bezat
na popredi]). Siet je tam automaticky riesena NATom (inak maju
kontajnery vlastnu podsiet, dokonca je mozne ich sietovo rozne
linkovat), pripadne mozes exponovat porty von alebou mountovat adresare
z hosta do kontajnera a hromada dalsich veci.
Dockerfile vyzera nejako takto:
FROM ubuntu:14.04
RUN apt-get update;\
apt-get -y upgrade
RUN apt-get install -y nginx;\
echo "\ndaemon off;" >> /etc/nginx/nginx.conf
EXPOSE 80
CMD ["/usr/sbin/nginx"]
Nasledne build:
docker build -t simple-nginx .
Build vytvara vrstvene images (unionfs), rebuild je castokrat velmi
rychly a kontajnery z rovnakeho image nezeru miesto (vychadzaju z
rovnakeho image a kazdy kontajner si vytvori aktivnu vrstvu, co su
rozdiely oproti povodnemu image).
A vytvorim a spustim kontajner:
docker run -d --name mynginx1 -v /storage/foo/bar:/var/www -p
0.0.0.0:80:80 simple-nginx
Tymto sa mi vytvori kontajner s nazvom mynginx1, ktory bude mat
mountnuty adresar z hosta zo /storage/foo/bar do /var/www v tomto
kontajneri a port 80 na hostovi je mapovany na port 80 v kontajneri.
Ak treba skalovat, pustim dalsi kontajner s inym portom, pred to load
balancer...
Pracuje sa s tym podobne ako treba s gitom, teda images commitujes,
pushujes a pullujes :) Je to velmi uzitocny nastroj a netreba riesit
tieto low level veci. Velkou vyhodou je prenositelnost. Odide hardver a
ak mam odzalohovane a pushnute images v nejakom repozitari, tak v
principe do niekolkych minut (zalezi od mnozstva dat) sa da vsetko
automaticky obnovit na novom stroji.
Martin
On 05/13/2014 02:34 AM, Tomas Vondra wrote:
> Ahoj,
>
> hraju si tady s virtualizací pomocí LXC, a potřebuju trochu poradit se
> sí»ováním (coľ není úplně moje parketa).
>
> Pro začátek bych rád dosáhnul toho ľe jak ze systému tak z kontejnerů
> bude "normálně" fungovat sí». Aktuálně mi funguje buď jedno nebo druhé,
> podle toho jak to zrovna nastavím, nikdy oboje současně.
>
> V kaľdém případě rád bych pro začátek dosáhl alespoň toho prvního, tj.
> funkční sítě ze systému i konfejnerů. Systém má jednu sí»ovku (enp2s0)
> konfigurovanou přes DHCP, řekněmě ľe má IP 192.168.1.163.
>
> V dokumentaci/howto k LXC se doporučuje nakonfigurovat bridge, plus
> dnsmasq jako lokální DHCP (pro kontejnery). Mám toto:
>
> ##### /etc/conf.d/net.br0 #####
> config_br0="192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255"
> brctl_br0="setfd 0 sethello 10 stp off"
> routes_br0="192.168.1.1"
> bridge_br0="enp2s0"
>
> ##### /etc/conf.d/dnsmasq #####
> DNSMASQ_OPTS="--user=dnsmasq --group=dnsmasq --except-interface lo
> --bind-interfaces --listen-address 192.168.2.1 --dhcp-range
> 192.168.2.2,192.168.2.254 --dhcp-leasefile=/tmp/dhcp.leases
> --dhcp-lease-max=253 --dhcp-no-override"
>
> ##### /etc/lxc/default.conf #####
> lxc.network.type = veth
> lxc.network.link = br0
> lxc.network.flags = up
> lxc.network.hwaddr = fe:xx:xx:xx:xx:xx
>
> Tj. (pokud tomu dobře rozumím)
>
> svět <--> enp2s0 (192.168.1.163) <-bridge-> br0 (192.168.2.1)
>
> a do br0 jsou potom přidané veth devicy pro jednotlivé kontejnery. A
> vskutku - kontejner nastartuje, dostane veth device, IP adresu z daného
> rozsahu, ale ven se nedopingnu :-( A od chvíle nastartování br0
> nefunguje ani sí» z toho hosta.
>
> Zkouąel jsem různé varianty, nejvíc co se mi povedlo bylo ľe pokud br0
> nastavím např. IP 192.168.1.2 (tj. ze stejného rozsahu kam patří enp2s0)
> tak z kontejnerů sí» funguje.
>
> Tipuju ľe to bude nějaká blbost, nejspíą v routování, kterou nevidím -
> dokonce tady přes SSH koukám na systém kde to je nakonfigurované (by»
> přes libvirt).
>
> routy po nastartování enp2s0 a br0:
>
> Adresát Brána Maska Přízn Metrik Odkazů Uľt Rozhraní
> 0.0.0.0 192.168.1.1 0.0.0.0 UG 3 0 0 enp2s0
> 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
> 127.0.0.0 127.0.0.1 255.0.0.0 UG 0 0 0 lo
> 192.168.1.0 0.0.0.0 255.255.255.0 U 3 0 0 enp2s0
> 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
>
>
> Bonus č. 1: kontejnery uvidí na sebe
> Bonus č. 2: kontejnery mají vnějąí IP (jde na ně pingnout zvenčí)
>
> Tomáą
> _______________________________________________
> Linux mailing list
> Linux na linux.cz
> http://www.linux.cz/mailman/listinfo/linux
>
Daląí informace o konferenci Linux