Ejemplos para explicar y ver nsenter te llevan a ver Internet desde la "perspectiva de Dios"

Resumen: Este artículo se enfoca en la perspectiva de "network ns" de ingresar al proceso de destino, es decir, mirar el mundo de la red dentro del contenedor desde la "perspectiva del proceso en el contenedor" y ejecutar comandos en esa perspectiva.

Este artículo se comparte desde Huawei Cloud Community " Learning Cloud Network with Teacher Tang" - nsenter Magic Wand , autor: tsjsdbd.

A veces falta el software necesario en un contenedor de Docker. Por ejemplo, los paquetes de software básicos como curl, wget, ifconfig, ip, tcpdump, etc., no pueden hacer nada, lo que vuelve loca a la gente.

[root@tsjsdbd home]# docker exec -it 8402 /bin/bash
root@8402d89fe04a:/# ifconfig
bash: ifconfig: command not found
root@8402d89fe04a:/# ip
bash: ip: command not found
root@8402d89fe04a:/# tcpdump
bash: tcpdump: command not found
root@8402d89fe04a:/# curl
bash: curl: command not found
root@8402d89fe04a:/# nslookup
bash: nslookup: command not found
root@8402d89fe04a:/# wget
wget: missing URL
Usage: wget [OPTION]... [URL]...

Frente a este tipo de imagen de contenedor, será muy difícil localizar el problema, porque después de ingresar al contenedor, debe reinstalar varios software básicos si desea ejecutar comandos, lo cual es muy problemático.

En este momento, tenemos que recoger la varita mágica "nsenter" y agitarla sobre el anfitrión.

ns-enter, como sugiere el nombre, es "ingresar varios espacios de nombres", es decir, el comando nsenter puede ingresar a la perspectiva ns del proceso de destino especificado.

Entonces, nsenter puede mirar el mundo desde la "perspectiva" del proceso especificado. Este artículo se enfoca en la perspectiva de "network ns" de ingresar al proceso de destino, es decir, desde la "perspectiva del proceso en el contenedor" para mirar el mundo de la red dentro del contenedor, y ejecutar en esa perspectiva Order.

Primero, necesitamos encontrar el ID del proceso de destino del "ns de destino" para ingresar. Es decir: el proceso raíz en el contenedor.

[root@tsjsdbd ubuntu]# docker inspect 8402d89fe04a
[
    {
        "Id": "8402d89fe04a7e161faf8a01a86c47f8402d4c8d7207b6897d8e6d661d670df4",
        "State": {
            "Status": "running",
            "Pid": 18751,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2023-05-10T03:12:19.221460059Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },

El "jefe" en el contenedor es el número de proceso 18751.

Por lo tanto, rastreamos este proceso directamente en el host Host e ingresamos su "perspectiva", y podemos ver el mundo dentro del contenedor. Y dado que nosotros, como controlador, todavía estamos en el host en este momento, podemos ejecutar varias líneas de comando en el host.

como sigue:

[root@tsjsdbd ubuntu]# nsenter -t 18751 -n ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
 inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02 txqueuelen 0  (Ethernet)
        RX packets 1688355  bytes 194318903 (185.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 138826  bytes 146246172 (139.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
 inet 127.0.0.1  netmask 255.0.0.0
 loop  txqueuelen 0  (Local Loopback)
        RX packets 13939  bytes 13140220 (12.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13939  bytes 13140220 (12.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Se pueden ejecutar otros comandos copiándolos.

Por ejemplo, no hay un comando nslookup en el contenedor, pero solo en el host Host, podemos ejecutarlo en el contenedor:

[root@tsjsdbd ubuntu]# nsenter -t 18751 -n nslookup www.baidu.com
Server:       10.129.2.34
Address:   10.129.2.34#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name:  www.a.shifen.com
Address: 14.119.104.254
Name:  www.a.shifen.com
Address: 14.119.104.189

Por lo tanto, el comportamiento de depuración que no se pudo ejecutar en el contenedor se puede completar de esta manera.

Más directamente, si no toma el último parámetro de comando de ejecución, puede ingresar directamente a la "perspectiva de destino" para ejecutar el cli de forma interactiva:

[root@tsjsdbd ubuntu]# nsenter -t 18751 -n
#这里就进入交互模式,相当于没有填写cli时,默认执行[当前bash]
[root@tsjsdbd ubuntu]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
4261: eth0@if4262: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
[root@tsjsdbd ubuntu]# curl
curl: try 'curl --help' or 'curl --manual' for more information
[root@tsjsdbd ubuntu]# tcpdump
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C
0 packets captured
0 packets received by filter
0 packets dropped by kernel
[root@tsjsdbd ubuntu]# exit
#执行exit,可退出“目标视角”

Se puede ver que todas las líneas de comando cli relacionadas con la red se pueden ejecutar.

Además, todos estos comandos se ejecutan desde la perspectiva del contenedor, por lo que el efecto es el mismo que en el contenedor (aunque ellos mismos se inician en el Host).

Al igual que en las películas "Código fuente" y "The Matrix", utiliza a las "personas" del mundo exterior para controlar el comportamiento en el "mundo interior" . Espero que puedas entender la lógica de esta perspectiva de Dios :-)

Resumen de uso:

(1) Encuentre el PID del proceso de destino

docker inspect xxx

(2) Ejecutar comandos CLI específicos directamente

nsenter -n -t 822647 ifconfig

(3) Ingrese a la perspectiva del contenedor y realice cli interactivo

nsenter -n -t 822647
exit

 

Haga clic para seguir y conocer las nuevas tecnologías de Huawei Cloud por primera vez~

Los graduados de la Universidad Popular Nacional robaron la información de todos los estudiantes de la escuela para construir un sitio web de puntuación de belleza, y han sido detenidos criminalmente.La nueva versión de Windows de QQ basada en la arquitectura NT se lanza oficialmente.Estados Unidos restringirá el uso de China de Amazon, Microsoft y otros servicios en la nube que brindan capacitación en modelos de IA. Se anunciaron proyectos de código abierto para detener el desarrollo de funciones LeaferJS , el puesto técnico mejor pagado en 2023, lanzado: Visual Studio Code 1.80, una biblioteca de gráficos 2D de código abierto y potente , compatible funciones de imagen de terminal . El número de registros de subprocesos ha superado los 30 millones. "Cambio" deepin adopta Asahi Linux para adaptarse a la clasificación de la base de datos Apple M1 en julio: Oracle aumenta, abriendo el puntaje nuevamente
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/4526289/blog/10086822
Recomendado
Clasificación