Anterior: , Acima: Contêineres do Sistema Guix   [Conteúdo][Índice]


4.2.2 Rede em contêineres

De que adianta um Sistema Guix rodando um serviço de banco de dados PostgreSQL como um contêiner quando só podemos falar com ele com processos originados no contêiner? Seria muito melhor se pudéssemos falar com o banco de dados pela rede.

A maneira mais fácil de fazer isso é criar um par de dispositivos Ethernet virtuais conectados (conhecidos como veth). Movemos um dos dispositivos (ceth-test) para o namespace net do contêiner e deixamos a outra extremidade (veth-test) da conexão no sistema host.

pid=5983
ns="guix-test"
host="veth-test"
client="ceth-test"

# Anexe o novo namespace de rede "guix-test" ao PID do contêiner.
sudo ip netns attach $ns $pid

# Crie o par de dispositivos
sudo ip link add $host type veth peer name $client

# Mova o dispositivo cliente para o namespace de rede do contêiner
sudo ip link set $client netns $ns

Em seguida, configuramos o lado do host:

sudo ip link set $host up
sudo ip addr add 10.0.0.1/24 dev $host

…e então configuramos o lado do cliente:

sudo ip netns exec $ns  ip link set lo up
sudo ip netns exec $ns  ip link set $client up
sudo ip netns exec $ns  ip addr add 10.0.0.2/24 dev $client

Neste ponto, o host pode alcançar o contêiner no endereço IP 10.0.0.2, e o contêiner pode alcançar o host no IP 10.0.0.1. Isso é tudo o que precisamos para falar com o servidor de banco de dados dentro do contêiner do sistema host do lado de fora.

$ psql -h 10.0.0.2 -U test
psql (14.4)
Type "help" for help.

test=> CREATE TABLE hello (who TEXT NOT NULL);
CREATE TABLE
test=> INSERT INTO hello (who) VALUES ('world');
INSERT 0 1
test=> SELECT * FROM hello;
  who
-------
 world
(1 row)

Agora que terminamos esta pequena demonstração, vamos limpar:

sudo kill $pid
sudo ip netns del $ns
sudo ip link del $host

Anterior: Um banco de dados de contêineres, Acima: Contêineres do Sistema Guix   [Conteúdo][Índice]