Executando contêineres linux (lxc) no Ubuntu para isolar processos do servidor web (ruby / thin)

7

Estou tentando configurar um servidor no qual eu estaria executando vários aplicativos. Principalmente internos, mas também podem ser projetos de código aberto como o Redmine. Todos seriam scripts de testes / aplicativos Rails / Ruby executados em navegadores sem cabeça. Em essência, estou tentando configurar internamente um ambiente semelhante ao heroku e queria algum tipo de isolamento de processo entre esses processos em execução.

Eu primeiro deparei com as prisões chroot e aprendi sobre o LXC. O LXC parece oferecer um melhor controle sobre as cadeias chroot simples. Eu tenho um frontend nginx e gostaria de executar os processos de aplicativos do servidor web (thin / mongrel / webrick) em contêineres isolados. Normalmente nós simplesmente começamos esses processos no endereço IP local e temos um proxy nginx para eles. Qual é a melhor maneira de fazer isso? As pessoas configuram um IP em ponte estático para o contêiner e o nginx aponta para ele? Como posso garantir que os servidores Web em execução nos contêineres só são acessíveis ao host fora?

A documentação sobre o LXC parece ser um pouco escassa. Ponteiros para alguns bons tutoriais ou HOWTOs seriam muito apreciados. Meu ambiente de implementação de destino é uma caixa Lucid de 64 bits.

P.S. Eu não sou um guru do linux. Então, seja gentil.

    
por Vagmi Mudumbai 25.10.2011 / 10:01

2 respostas

13

Vamos supor que seu próprio IP é 192.168.1.1, seu gateway é 192.168.1.254 e sua rede é 192.168.1.0/24.

Você deve fazer uma interface em ponte na sua máquina host, como esta no arquivo / 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

e depois instalar um Ubuntu básico no 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

crie um arquivo /lxc/ubuntu.config com o conteúdo

 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 com

 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

adicione a /lxc/ubuntu/etc/rc.local

 route add default gw 192.168.1.254

edite /lxc/ubuntu/etc/resolv.cont de acordo com suas necessidades.

Depois, você pode criar sua máquina com

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

depois, inicie

 lxc-start -n ubuntu

ou pare

 lxc-stop -n ubuntu

ou finalmente destruir

 lxc-destroy -n ubuntu

Sua nova máquina virtual terá o IP 192.168.1.10 e estará acessível na rede.

    
por 11.12.2011 / 14:27
0

Se preferir não fornecer endereços IP externos ao contêiner ou não conseguir:

A página Debian Wiki no LXC menciona duas variantes de realização que usam NAT na máquina host. Eu estou usando a abordagem com libvirt e não tive problemas com isso até agora.

Eu não sei como é no Ubuntu, mas provavelmente não é muito diferente lá.

A página do Wiki pode parecer uma boa fonte de informação, mas o próprio mantenedor diz que você deve se referir ao arquivo /usr/share/doc/lxc/README.Debian para obter informações atualizadas.

    
por 15.04.2012 / 20:15