Como verificar se um namespace de kernel está ativo no Linux

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se os kernel namespaces estão ativos no Linux. Exploraremos diferentes métodos para identificar e verificar a presença de namespaces, que são cruciais para o isolamento de processos e a containerização.

Você começará usando o comando lsns para listar os vários namespaces em seu sistema, compreendendo seus tipos e processos associados. Em seguida, você examinará os links de namespace dentro do diretório /proc/self/ns para ver como os processos estão ligados a namespaces específicos. Finalmente, você verificará especificamente os network namespaces usando o comando ip netns, uma ferramenta comum para gerenciar o isolamento de rede.

Listar namespaces com lsns

Nesta etapa, você aprenderá como listar os namespaces presentes em seu sistema usando o comando lsns. Namespaces são um conceito fundamental no Linux que fornecem isolamento para vários recursos do sistema, como processos, interfaces de rede, pontos de montagem e muito mais. Esse isolamento é fundamental para tecnologias como contêineres.

O comando lsns faz parte do pacote util-linux e é usado para listar informações sobre os namespaces em seu sistema.

Primeiro, vamos garantir que o pacote util-linux esteja instalado. Embora geralmente esteja presente, é uma boa prática verificar. Podemos usar apt para isso.

Abra seu terminal, caso ainda não esteja aberto. Você pode encontrar o ícone do Xfce Terminal no lado esquerdo da sua área de trabalho.

Agora, digite o seguinte comando para atualizar sua lista de pacotes:

sudo apt update

Pressione Enter. Você pode ver uma saída semelhante a esta:

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
...
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
...

Em seguida, vamos instalar util-linux. Digite o seguinte comando e pressione Enter:

sudo apt install util-linux

Você pode ver uma saída indicando que o pacote já está instalado, o que é bom. Se ele instalar, você verá barras de progresso e confirmação.

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
util-linux is already the newest version (x.xx.x-xu).
0 upgraded, 0 newly installed, 0 to remove and xx not upgraded.

Agora que temos certeza de que lsns está disponível, vamos usá-lo para listar os namespaces. Digite o seguinte comando e pressione Enter:

lsns

Você verá uma saída semelhante a esta, mostrando diferentes tipos de namespaces e os processos associados a eles:

        NS TYPE   NPROCS   PID PPID       CMD
4026531835 cgroup      1     1    0     /sbin/init
4026531836 pid         1     1    0     /sbin/init
4026531837 user        1     1    0     /sbin/init
4026531838 uts         1     1    0     /sbin/init
4026531839 ipc         1     1    0     /sbin/init
4026531840 mnt         1     1    0     /sbin/init
4026531841 net         1     1    0     /sbin/init
4026532720 cgroup     10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532721 pid        10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532722 user       10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532723 uts        10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532724 ipc        10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532725 mnt        10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532726 net        10   700  699 /usr/lib/xfce4/xfconf/xfconfd
...

A saída mostra colunas como NS (ID do Namespace), TYPE (Tipo de namespace, por exemplo, cgroup, pid, user, uts, ipc, mnt, net), NPROCS (Número de processos no namespace), PID (ID do Processo), PPID (ID do Processo Pai) e CMD (Comando).

Este comando fornece uma visão geral de alto nível dos namespaces ativos em seu sistema e dos processos em execução dentro deles.

Clique em Continuar para prosseguir para a próxima etapa.

Na etapa anterior, você usou lsns para ver uma lista de namespaces no sistema. Agora, vamos explorar como um processo em execução se relaciona com esses namespaces.

Todo processo no Linux tem um diretório especial em /proc/<pid>/ns/ que contém links simbólicos para os namespaces aos quais pertence. O diretório /proc/self/ é um link simbólico para o diretório /proc/<pid>/ do processo atualmente em execução (neste caso, sua sessão de terminal).

Vamos listar o conteúdo do diretório /proc/self/ns/ para ver os links de namespace para o seu processo de terminal atual.

Digite o seguinte comando em seu terminal e pressione Enter:

ls -l /proc/self/ns/

Você verá uma saída semelhante a esta:

total 0
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 cgroup -> "cgroup:[4026532720]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 ipc -> "ipc:[4026532724]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 mnt -> "mnt:[4026532725]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 net -> "net:[4026532726]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 pid -> "pid:[4026532721]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 user -> "user:[4026532722]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 uts -> "uts:[4026532723]"

Cada linha representa um tipo diferente de namespace (cgroup, ipc, mnt, net, pid, user, uts) e é um link simbólico (->) apontando para o arquivo de namespace real na representação interna do kernel. O número entre colchetes (por exemplo, [4026532720]) é o ID exclusivo desse namespace específico, que você viu na saída do comando lsns na etapa anterior.

Isso mostra que seu processo de terminal atual faz parte de vários namespaces diferentes, fornecendo a ele sua própria visão isolada de certos recursos do sistema.

Compreender /proc/<pid>/ns/ é crucial para depurar e inspecionar a configuração de namespace de processos em execução, especialmente em ambientes conteinerizados.

Clique em Continuar para prosseguir.

Verificar namespaces de rede com ip netns

Nas etapas anteriores, você aprendeu sobre namespaces em geral e como ver os links de namespace para um processo. Agora, vamos focar especificamente em network namespaces e como gerenciá-los usando o comando ip.

Network namespaces fornecem uma pilha de rede separada para processos, incluindo interfaces de rede, endereços IP, tabelas de roteamento e regras de firewall. Isso é fundamental para isolar o tráfego de rede, como usado em contêineres e virtual networking.

O comando ip é um utilitário poderoso para configuração de rede no Linux. O subcomando ip netns é usado especificamente para gerenciar network namespaces.

Para listar os network namespaces atualmente configurados, use a opção list com ip netns.

Digite o seguinte comando em seu terminal e pressione Enter:

ip netns list

Em um ambiente LabEx típico, que geralmente é um contêiner, você pode não ver nenhum network namespace explicitamente criado listado por este comando inicialmente. A saída pode estar vazia:

Isso ocorre porque o network namespace principal em que seu terminal está sendo executado é o padrão, e ip netns list normalmente mostra namespaces que foram explicitamente criados e registrados.

No entanto, você ainda pode ver o network namespace ao qual seu processo atual pertence, examinando o link simbólico /proc/self/ns/net, como você fez na etapa anterior. O comando ip netns é mais para gerenciar network namespaces nomeados que você pode criar para fins específicos de isolamento.

Embora não criemos novos network namespaces neste laboratório introdutório, entender que ip netns list é o comando para vê-los é importante para o aprendizado futuro sobre isolamento de rede.

Você agora explorou namespaces usando lsns, examinou os links de namespace específicos do processo em /proc e aprendeu o comando para listar network namespaces.

Clique em Continuar para concluir o laboratório.

Resumo

Neste laboratório, aprendemos como verificar namespaces de kernel ativos no Linux. Começamos usando o comando lsns para listar os vários namespaces presentes no sistema, entendendo que os namespaces fornecem isolamento para recursos do sistema e são fundamentais para tecnologias de contêineres. Garantimos que o pacote util-linux, que contém lsns, foi instalado usando apt.

Após listar os namespaces com lsns, as etapas subsequentes, que não foram totalmente detalhadas no conteúdo fornecido, envolveriam a verificação dos links de namespace dentro do diretório /proc/self/ns e a verificação específica de network namespaces usando o comando ip netns. Esses métodos oferecem maneiras alternativas de inspecionar e confirmar a presença e o estado de diferentes tipos de namespaces de kernel.