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