Namespace no Linux

Conhecendo o Namespace no Linux

Posted by Diego Aquino on March 13, 2024 · 5 mins read

O namespace no Linux

Namespaces no Linux

Namespaces é um recurso do Linux que proporciona isolamento para os processos, permitindo que eles executem como se estivessem em uma instância separada do sistema. Este recurso é fundamental para a implementação de contêineres, como os gerenciados pelo Docker ou Kubernetes, permitindo que cada contêiner tenha seu próprio conjunto de recursos (como sistemas de arquivos, IDs de processo, redes, etc.) isolados dos demais contêineres e do host.

Tipos de Namespaces

Existem vários tipos de namespaces no Linux, cada um isolando um conjunto específico de recursos do sistema:

1. PID (Process ID) Namespace

Isola a visibilidade e a gestão dos IDs de processo. Processos em diferentes PID namespaces podem ter o mesmo PID, o que é essencial para a criação de ambientes isolados.

2. Network Namespace

Isola os recursos de rede, incluindo interfaces de rede, tabelas de roteamento e políticas de firewall. Permite que cada contêiner tenha sua própria rede virtual, isolada das demais.

3. Mount Namespace

Isola o sistema de arquivos, permitindo que cada namespace tenha uma visão diferente da hierarquia de arquivos do sistema. Isso evita que processos em diferentes contêineres interfiram uns com os outros através do sistema de arquivos.

4. IPC (Inter-Process Communication) Namespace

Isola a comunicação entre processos (IPC), garantindo que os mecanismos de IPC, como filas de mensagens, semáforos e memória compartilhada, não sejam compartilhados entre namespaces.

5. UTS (UNIX Time-sharing System) Namespace

Isola identificadores de sistema como o nome do host e o nome de domínio, permitindo que cada contêiner tenha seu próprio nome de host e nome de domínio.

6. User Namespace

Isola os IDs de usuário e grupo, permitindo que um processo tenha um ID de usuário dentro do namespace que é diferente do seu ID de usuário no sistema host. Isso facilita a gestão de permissões e segurança.

Exemplos de Criação e Uso de Namespaces no Linux

Namespaces no Linux são fundamentais para isolar recursos do sistema, permitindo que processos rodem em um ambiente separado. Aqui estão alguns exemplos básicos de como criar e trabalhar com diferentes tipos de namespaces.

1. Criando um Namespace de Rede

Para criar um namespace de rede e listar todos os namespaces de rede disponíveis:

# Cria um novo namespace de rede chamado "meu-netns"
sudo ip netns add meu-netns

# Lista todos os namespaces de rede
sudo ip netns list

2. Liste os Namespaces de Rede Disponíveis

Verifique se o namespace foi criado com sucesso:

ip netns list

3. Atribua uma Interface de Rede ao Namespace

Crie um par de interfaces virtuais e mova uma delas para o namespace:

sudo ip link add veth0 type veth peer name veth1
sudo ip link set veth1 netns meu_ns

4. Configurando a Rede dentro do Namespace

Configure a interface de rede dentro do namespace:

  • Ative a interface de loopback:
sudo ip netns exec meu_ns ip link set lo up
  • Configure a interface veth1 com um endereço IP e ative-a:
sudo ip netns exec meu_ns ip addr add 192.168.1.1/24 dev veth1
sudo ip netns exec meu_ns ip link set veth1 up

5. Teste a Conectividade

Use o comando ping de dentro do namespace:

sudo ip netns exec meu_ns ping 192.168.1.2

Notas

  • Todos os comandos podem requerer privilégios de superusuário.
  • Este exemplo cria um ambiente de rede isolado, útil para testes de rede e simulações.

Conclusão

O uso de namespaces é uma parte fundamental da tecnologia de contêineres, permitindo a criação de ambientes isolados que são leves, seguros e eficientes. Facilita o desenvolvimento, a implementação e a escala de aplicações, oferecendo um isolamento robusto entre os contêineres e entre estes e o host.