GNU/Linux >> LINUX-Kenntnisse >  >> Linux

4 Linux-Technologien, die für Container grundlegend sind

In früheren Artikeln habe ich über Container-Images und Laufzeiten geschrieben. In diesem Artikel schaue ich mir an, wie Container durch eine Grundlage einiger spezieller Linux-Technologien, einschließlich Namespaces und Kontrollgruppen, ermöglicht werden.

Linux-Container

  • Was sind Linux-Container?
  • Eine Einführung in die Containerterminologie
  • Download:Einführung in Container
  • Kubernetes-Operatoren:Automatisierung der Container-Orchestrierungsplattform
  • eBook:Kubernetes-Muster zum Entwerfen cloudnativer Apps
  • Was ist Kubernetes?

Linux-Technologien bilden die Grundlage für das Erstellen und Ausführen eines Containerprozesses auf Ihrem System. Zu den Technologien gehören:

  1. Namespaces
  2. Kontrollgruppen (cgroups)
  3. Seccomp
  4. SELinux

Namespaces

Namespaces bieten eine Isolationsebene für die Container, indem sie dem Container eine Ansicht dessen geben, was sein eigenes Linux-Dateisystem zu sein scheint. Dies schränkt ein, was ein Prozess sehen kann, und schränkt daher die ihm zur Verfügung stehenden Ressourcen ein.

Es gibt mehrere Namespaces im Linux-Kernel, die von Docker oder Podman und anderen beim Erstellen eines Containers verwendet werden:

 

$ 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
[...]

Benutzer

Der Benutzernamensraum isoliert Benutzer und Gruppen innerhalb eines Containers. Dies geschieht, indem Containern im Vergleich zum Hostsystem eine andere Ansicht der UID- und GID-Bereiche ermöglicht wird. Der Benutzernamensraum ermöglicht es der Software, innerhalb des Containers als Root-Benutzer ausgeführt zu werden. Wenn ein Eindringling den Container angreift und dann auf den Host-Rechner flüchtet, ist er nur auf eine Nicht-Root-Identität beschränkt.

Mnt

Der mnt-Namespace ermöglicht es den Containern, ihre eigene Sicht auf die Dateisystemhierarchie des Systems zu haben. Sie finden die Einhängepunkte für jeden Containerprozess in /proc//mounts Speicherort in Ihrem Linux-System.

UTS

Der Namespace des Unix Timesharing System (UTS) ermöglicht es Containern, einen eindeutigen Hostnamen und Domänennamen zu haben. Wenn Sie einen Container ausführen, wird eine zufällige ID als Hostname verwendet, selbst wenn Sie den — name verwenden Schild. Sie können den unshare verwenden Befehl, um eine Vorstellung davon zu bekommen, wie das funktioniert.

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

IPC

Der Inter-Process Communication (IPC)-Namespace ermöglicht verschiedenen Containerprozessen die Kommunikation, indem sie auf einen gemeinsam genutzten Speicherbereich zugreifen oder eine gemeinsam genutzte Nachrichtenwarteschlange verwenden.

 

# 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

Der Process ID (PID)-Namespace stellt sicher, dass die Prozesse, die in einem Container ausgeführt werden, von der Außenwelt isoliert sind. Wenn Sie ein ps ausführen Befehl innerhalb eines Containers, sehen Sie aufgrund dieses Namespace nur die Prozesse, die innerhalb des Containers und nicht auf dem Hostcomputer ausgeführt werden.

Netz

Der Netzwerk-Namespace ermöglicht dem Container, eine eigene Ansicht von Netzwerkschnittstellen, IP-Adressen, Routing-Tabellen, Portnummern usw. zu haben. Wie kann ein Container mit der Außenwelt kommunizieren? Alle von Ihnen erstellten Container werden zur Kommunikation an eine spezielle virtuelle Netzwerkschnittstelle angehängt.

Kontrollgruppen (cgroups)

Cgroups sind grundlegende Blöcke zum Erstellen eines Containers. Eine Kontrollgruppe weist Ressourcen wie CPU, Arbeitsspeicher und Netzwerk-I/O zu und begrenzt diese, die von Containern verwendet werden. Die Container-Engine erstellt automatisch ein cgroup-Dateisystem jedes Typs und legt Werte für jeden Container fest, wenn der Container ausgeführt wird.

SECCOMP

Seccomp steht im Grunde für Secure Computing . Es handelt sich um eine Linux-Funktion, mit der die Anzahl der Systemaufrufe eingeschränkt wird, die eine Anwendung ausführen darf. Das standardmäßige seccomp-Profil für Docker deaktiviert beispielsweise etwa 44 Systemaufrufe (über 300 sind verfügbar).

Die Idee dabei ist, Containern nur Zugriff auf die Ressourcen zu gewähren, die der Container möglicherweise benötigt. Wenn Sie den Container beispielsweise nicht benötigen, um die Uhrzeit auf Ihrem Hostcomputer zu ändern, haben Sie wahrscheinlich keine Verwendung für clock_adjtime und clock_settime Systemaufrufe, und es ist sinnvoll, sie zu blockieren. Ebenso möchten Sie nicht, dass die Container die Kernel-Module ändern, also müssen sie create_module, delete_module nicht erstellen Systemaufrufe.

SELinux

SELinux steht für security-enhanced Linux . Wenn Sie eine Red Hat-Distribution auf Ihren Hosts ausführen, ist SELinux standardmäßig aktiviert. Mit SELinux können Sie eine Anwendung so beschränken, dass sie nur auf ihre eigenen Dateien zugreifen kann, und verhindern, dass andere Prozesse darauf zugreifen. Wenn also eine Anwendung kompromittiert wird, würde dies die Anzahl der Dateien einschränken, die sie beeinflussen oder kontrollieren kann. Dazu werden Kontexte für Dateien und Prozesse eingerichtet und Richtlinien definiert, die erzwingen, was ein Prozess sehen und ändern kann.

SELinux-Richtlinien für Container werden durch container-selinux definiert Paket. Standardmäßig werden Container mit dem container_t ausgeführt Label und dürfen unter /usr lesen (r) und ausführen (x). Verzeichnis und lesen Sie die meisten Inhalte aus /etc Verzeichnis. Das Label container_var_lib_t ist üblich für Dateien, die sich auf Container beziehen.

Abschluss

Container sind ein kritischer Bestandteil der heutigen IT-Infrastruktur und auch eine ziemlich interessante Technologie. Auch wenn Ihre Rolle nicht direkt mit der Containerisierung zu tun hat, können Sie durch das Verständnis einiger grundlegender Containerkonzepte und -ansätze erkennen, wie sie Ihrer Organisation helfen können. Die Tatsache, dass Container auf Open-Source-Linux-Technologien basieren, macht sie noch besser!


Dieser Artikel basiert auf einem techbeatly-Artikel und wurde mit Genehmigung angepasst.


Linux
  1. Erstellen Sie Ihren eigenen Container unter Linux

  2. Entmystifizierung von Namespaces und Containern in Linux

  3. So erstellen, listen und löschen Sie Docker-Container unter Linux

  4. Was ist Docker (und Linux-Container?)

  5. So erstellen und starten Sie LXC-Linux-Container mit LXC-Befehlen

Einführung in die Verwaltung von Linux-Containern

Meine 5 Lieblings-Linux-Container-Images

So verwalten Sie Docker-Container

Was macht einen Kernel-Linux-Server grundlegend?

Können Windows-Container unter Linux gehostet werden?

Leichte, isolierte Linux-Umgebung