GNU/Linux >> Linux Esercitazione >  >> Linux

4 Tecnologie Linux fondamentali per i container

In articoli precedenti ho scritto di immagini di container e runtime. In questo articolo, esaminerò come i container sono resi possibili dalla base di alcune speciali tecnologie Linux, inclusi gli spazi dei nomi e i gruppi di controllo.

Contenitori Linux

  • Cosa sono i container Linux?
  • Un'introduzione alla terminologia dei contenitori
  • Download:Primer sui contenitori
  • Operatori Kubernetes:automatizzare la piattaforma di orchestrazione dei container
  • eBook:modelli Kubernetes per la progettazione di app cloud native
  • Cos'è Kubernetes?

Le tecnologie Linux costituiscono le basi per la creazione e l'esecuzione di un processo container sul sistema. Le tecnologie includono:

  1. Spazi dei nomi
  2. Gruppi di controllo (cgroups)
  3. Secondo
  4. SELinux

Spazi dei nomi

Spazi dei nomi fornire uno strato di isolamento per i contenitori fornendo al contenitore una vista di quello che sembra essere il proprio filesystem Linux. Ciò limita ciò che un processo può vedere e quindi limita le risorse a sua disposizione.

Esistono diversi spazi dei nomi nel kernel Linux utilizzati da Docker o Podman e altri durante la creazione di un contenitore:

 

$ docker container run alpine ping 8.8.8.8
$ sudo lsns -p 29413
        NS TYPE   NPROCS PID USER COMMAND
4026531835 cgroup   299   1  root /usr/lib/systemd/systemd --
switched...
4026533105 mnt 1 29413 root ping 8.8.8.8
4026533106 uts 1 29413 root ping 8.8.8.8
4026533105 ipc 1 29413 root ping 8.8.8.8
[...]

Utente

Lo spazio dei nomi utente isola utenti e gruppi all'interno di un contenitore. Ciò avviene consentendo ai contenitori di avere una visualizzazione diversa degli intervalli UID e GID rispetto al sistema host. Lo spazio dei nomi utente consente al software di essere eseguito all'interno del contenitore come utente root. Se un intruso attacca il container e poi scappa sulla macchina host, è limitato solo a un'identità non root.

Mt

Lo spazio dei nomi mnt consente ai contenitori di avere la propria vista della gerarchia del file system del sistema. Puoi trovare i punti di montaggio per ogni processo contenitore in /proc//mounts posizione nel tuo sistema Linux.

UTS

Lo spazio dei nomi UTS (Timesharing System) di Unix consente ai contenitori di avere un nome host e un nome di dominio univoci. Quando si esegue un container, viene utilizzato un ID casuale come nome host anche quando si utilizza il — name etichetta. Puoi usare unshare comando per avere un'idea di come funziona.

$ docker container run -it --name nived alpine sh
/ # hostname
9c9a5edabdd6
/ #
$ sudo unshare -u sh
# hostname isolated.hostname
# hostname
# exit
$ hostname
homelab.redhat.com

IPC

Lo spazio dei nomi Inter-Process Communication (IPC) consente a diversi processi contenitore di comunicare accedendo a un intervallo di memoria condiviso o utilizzando una coda di messaggi condivisa.

 

# ipcmk -M 10M
Shared memory id: 0
# ipcmk -M 20M
Shared memory id: 1
# ipcs
---- Message Queues ----
key  msqid  owner  perms  used-bytes  messages

---- Shared Memory Segments
key        shmid owner perms bytes    nattch status
0xd1df416a 0     root  644   10485760 0
0xbd487a9d 1     root  644   20971520 0
[...]

PID

Lo spazio dei nomi Process ID (PID) garantisce che i processi in esecuzione all'interno di un container siano isolati dal mondo esterno. Quando esegui un ps comando all'interno di un container, vedrai solo i processi in esecuzione all'interno del container e non sulla macchina host a causa di questo spazio dei nomi.

Rete

Lo spazio dei nomi di rete consente al contenitore di avere una propria visualizzazione dell'interfaccia di rete, degli indirizzi IP, delle tabelle di routing, dei numeri di porta e così via. Come funziona un contenitore in grado di comunicare con il mondo esterno? Tutti i container che crei vengono collegati a una speciale interfaccia di rete virtuale per la comunicazione.

Gruppi di controllo (cgroups)

I Cgroup sono blocchi fondamentali per creare un container. Un cgroup alloca e limita le risorse come CPU, memoria, I/O di rete utilizzate dai contenitori. Il motore del contenitore crea automaticamente un filesystem cgroup di ogni tipo e imposta i valori per ogni contenitore quando il contenitore viene eseguito.

SECCOMP

Seccomp sta per computer sicuro . È una funzionalità Linux utilizzata per limitare l'insieme di chiamate di sistema che un'applicazione può effettuare. Il profilo seccomp predefinito per Docker, ad esempio, disabilita circa 44 syscall (sono disponibili oltre 300).

L'idea qui è di fornire ai contenitori l'accesso solo alle risorse di cui il contenitore potrebbe aver bisogno. Ad esempio, se non hai bisogno del contenitore per modificare l'ora sul tuo computer host, probabilmente non hai alcuna utilità per clock_adjtime e orologio_impostato syscalls e ha senso bloccarli. Allo stesso modo, non vuoi che i contenitori modifichino i moduli del kernel, quindi non è necessario che facciano create_module, delete_module chiamate di sistema.

SELinux

SELinux sta per Linux potenziato per la sicurezza . Se stai eseguendo una distribuzione Red Hat sui tuoi host, SELinux è abilitato per impostazione predefinita. SELinux ti consente di limitare un'applicazione in modo che abbia accesso solo ai propri file e impedire a qualsiasi altro processo di accedervi. Pertanto, se un'applicazione è compromessa, limiterebbe il numero di file che può influenzare o controllare. Lo fa impostando contesti per file e processi e definendo politiche che imporrebbero ciò che un processo può vedere e a cui apportare modifiche.

Le politiche di SELinux per i container sono definite da container-selinux pacchetto. Per impostazione predefinita, i container vengono eseguiti con container_t etichetta e sono autorizzati a leggere (r) ed eseguire (x) sotto /usr directory e leggere la maggior parte dei contenuti da /etc directory. L'etichetta container_var_lib_t è comune per i file relativi ai contenitori.

Concludi

I container sono una parte fondamentale dell'infrastruttura IT odierna e anche una tecnologia piuttosto interessante. Anche se il tuo ruolo non implica direttamente la containerizzazione, la comprensione di alcuni concetti e approcci fondamentali sui container ti fa apprezzare il modo in cui possono aiutare la tua organizzazione. Il fatto che i container siano costruiti su tecnologie Linux open source li rende ancora migliori!

Questo articolo è basato su un articolo techbeatly ed è stato adattato con autorizzazione.


Linux
  1. Demistificare gli spazi dei nomi e i contenitori in Linux

  2. 10 guide ai contenitori per gli amministratori di sistema

  3. 5 motivi per cui dovresti sviluppare una strategia di container Linux

  4. 7 divertenti contenitori Linux/caratteristiche di trasporto di immagini

  5. Qual è la differenza tra un container Linux e un'immagine?

Introduzione alla gestione dei container Linux

Come gestire i registri dei container Linux

Come gestire i container Docker

Come creare e avviare container LXC Linux con i comandi LXC

Cosa rende fondamentale un server Linux del kernel?

I contenitori Windows possono essere ospitati su Linux?