O kernel pode alocar e restringir os recursos que os processos em execução podem acessar através dos namespaces. Os namespaces criam isolamento e os contêineres apenas visualizam processos. Para trabalhar facilmente com os contêineres e namespaces, o NSENTER O comando Linux é necessário, e veremos como usar o NSENTER para inspecionar e executar programas nos espaços para nome.
Como inspecionar namespaces Linux usando NSENTER
Antes de mergulharmos no uso do NSENTER, precisamos entender os contêineres Linux e os namespaces.
O que são contêineres Linux?
Com a tecnologia em crescimento, a demanda para desenvolver aplicativos mais escaláveis e seguros estendeu a necessidade de usar contêineres. É melhor dizer que os contêineres Linux são uma tecnologia que permite embalagem e isolamento de aplicativos e recursos em seu ambiente de tempo de execução, longe do sistema. Além disso, você também pode criar contêineres contendo espaços para names para diferentes processos em seu sistema Linux usando várias ferramentas, como Podman ou Docker.
Para este exemplo, criaremos um novo contêiner usando o Docker, conforme mostrado na imagem abaixo.
Saia do contêiner e liste os contêineres disponíveis do sistema host. Você notará que o contêiner que criamos é listado, incluindo seu ID de contêiner.
$ sudo docker ps -l
Alternativamente, se você estiver usando Podman Red Hat oferece um recipiente em seu catálogo que você pode acessar usando o comando abaixo.
$ Podman Run -Name Namespace -Demo -it Registry.acesso.chapéu vermelho.com/ubi8/ubi/bin/bash
Depois de criar o contêiner, liste o ID do processo do contêiner criado usando o comando abaixo.
Lista de $ Runc
Na saída, você deve observar o ID do processo. No nosso caso, o ID é 39782.
Usando o ID do processo acima, você pode obter os espaços de nome associados a ele usando lsns ou NSENTER.
Usar lsns, Use a sintaxe abaixo.
$ lsns -p
Ao contrário dos LSNs, o NSENTER oferece mais opções, oferecendo mais controle.
Usando NSENTER com namespaces Linux
Algumas das opções comuns que você pode usar com o NSENTER incluem:
1. -t: Esta bandeira especifica o ID do processo de destino.
2. -você: É usado para inserir o espaço de nome do processo e, se nenhum espaço de nome for inserido, ele usará o do processo de destino.
Por exemplo, para obter o nome do host do espaço para nome com o ID 39782, o comando seria:
$ NSENTER -T 39782 -U HOSTNAME
3. -a: usado para inserir todos os espaços de nome disponíveis. No nosso caso, temos apenas um. Se executarmos o comando abaixo, você notará que estamos dentro do contêiner.
Você pode fazer logot digitando saída.
4. -n: A bandeira é usada para entrar no espaço para nome da rede. Somente as informações de rede para o espaço de nome em determinado são vistas.
Se você visualizasse os mesmos detalhes da rede do sistema completo, você notaria que há isolamento.
O isolamento se estende ao Rota IP, E também podemos obter a rota IP para o espaço para nome usando o comando abaixo.
$ NSENTER -T 39782 -N Rota IP
Na imagem acima, você pode notar como é a primeira saída para o espaço para nome do ID do processo de destino especificado, mas a segunda saída é a rota IP para o sistema completo.
5. -P: Usando o NSENTER, você também pode entrar no espaço de nome PID usando o -p bandeira. Para que isso funcione, você deve ter o principal ou ps Comandos instalados dentro do contêiner.
Se você criou o Podman contêiner, use o comando abaixo para instalar o Procps-ng pacote, que instala o topo e o ps para ajudar a visualizar os processos atualmente em execução usando o ps -ef Comando Linux.
$ yum install procps-ng
Agora você pode entrar no espaço para nome do PID usando o comando abaixo.
$ NSENTER -T 39782 -P -R PS -EF
O -r Define o diretório raiz e, se nenhum for especificado, como no comando abaixo, ele usa o do ID do processo de destino.
A saída fornece o processo atualmente em execução no contêiner.
Conclusão
Como desenvolvedor, você não pode fugir usando contêineres Linux. A melhor abordagem é se equipar com ferramentas que permitem interagir com os diferentes espaços para processos em contêineres separados. Graças aos contêineres, o isolamento de processos em execução no Linux é possível. Cobrimos como usar o NSENTER Comando Linux para inserir os namespaces de diferentes processos em qualquer contêiner. Continue praticando e tentando outras táticas para entender melhor a ferramenta.