GNU/Linux >> Znalost Linux >  >> Linux

4 Linuxové technologie zásadní pro kontejnery

V předchozích článcích jsem psal o obrázcích kontejnerů a runtimech. V tomto článku se podívám na to, jak jsou kontejnery umožněny na základě některých speciálních linuxových technologií, včetně jmenných prostorů a kontrolních skupin.

Linuxové kontejnery

  • Co jsou kontejnery systému Linux?
  • Úvod do terminologie kontejnerů
  • Stáhnout:Containers Primer
  • Operátoři Kubernetes:Automatizace platformy pro orchestraci kontejnerů
  • eKniha:Vzory Kubernetes pro navrhování cloudových nativních aplikací
  • Co je Kubernetes?

Linuxové technologie tvoří základy pro vytváření a provozování kontejnerového procesu ve vašem systému. Mezi technologie patří:

  1. Jmenné prostory
  2. Kontrolní skupiny (cgroups)
  3. Seccomp
  4. SELinux

Jmenné prostory

Jmenné prostory poskytuje kontejnerům vrstvu izolace tím, že kontejneru poskytuje pohled na to, co se zdá být jeho vlastním linuxovým souborovým systémem. To omezuje to, co proces může vidět, a proto omezuje zdroje, které má k dispozici.

V linuxovém jádře existuje několik jmenných prostorů, které používají Docker nebo Podman a další při vytváření kontejneru:

 

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

Uživatel

Uživatelský jmenný prostor izoluje uživatele a skupiny v rámci kontejneru. Toho se dosáhne tím, že kontejnerům umožníte jiný pohled na rozsahy UID a GID ve srovnání s hostitelským systémem. Uživatelský jmenný prostor umožňuje, aby software běžel uvnitř kontejneru jako uživatel root. Pokud vetřelec zaútočí na kontejner a poté unikne do hostitelského počítače, je omezen pouze na identitu jiného uživatele než root.

Mnt

Jmenný prostor mnt umožňuje kontejnerům mít vlastní pohled na hierarchii systému souborů. Přípojné body pro každý proces kontejneru najdete v /proc//mounts umístění ve vašem systému Linux.

UTS

Jmenný prostor Unix Timesharing System (UTS) umožňuje kontejnerům mít jedinečný název hostitele a název domény. Když spustíte kontejner, použije se náhodné ID jako název hostitele, i když použijete — name štítek. Můžete použít unshare příkaz, abyste získali představu, jak to funguje.

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

IPC

Jmenný prostor Inter-Process Communication (IPC) umožňuje různým procesům kontejneru komunikovat prostřednictvím přístupu ke sdílenému rozsahu paměti nebo pomocí sdílené fronty zpráv.

 

# 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

Jmenný prostor Process ID (PID) zajišťuje, že procesy běžící uvnitř kontejneru jsou izolované od vnějšího světa. Když spustíte ps příkaz uvnitř kontejneru, uvidíte pouze procesy běžící uvnitř kontejneru a ne na hostitelském počítači kvůli tomuto jmennému prostoru.

Net

Síťový jmenný prostor umožňuje kontejneru mít vlastní pohled na síťové rozhraní, IP adresy, směrovací tabulky, čísla portů a tak dále. Jak může kontejner komunikovat s vnějším světem? Všechny kontejnery, které vytvoříte, se připojí ke speciálnímu rozhraní virtuální sítě pro komunikaci.

Kontrolní skupiny (cgroups)

Cgroups jsou základní bloky vytváření kontejneru. cgroup alokuje a omezuje zdroje, jako je CPU, paměť, síťové I/O, které kontejnery používají. Kontejnerový stroj automaticky vytvoří souborový systém cgroup každého typu a nastaví hodnoty pro každý kontejner, když je kontejner spuštěn.

SECCOMP

Seccomp v podstatě znamená zabezpečené výpočty . Je to funkce Linuxu, která se používá k omezení sady systémových volání, která může aplikace provádět. Výchozí profil seccomp pro Docker například zakáže přibližně 44 systémových volání (k dispozici je více než 300).

Cílem je poskytnout kontejnerům přístup pouze k těm zdrojům, které kontejner může potřebovat. Pokud například nepotřebujete kontejner ke změně času hodin na vašem hostitelském počítači, pravděpodobně nemáte využití pro clock_adjtime a clock_settime systémová volání a má smysl je blokovat. Podobně nechcete, aby kontejnery měnily moduly jádra, takže není potřeba, aby vytvořily create_module, delete_module systémová volání.

SELinux

SELinux znamená security-enhanced Linux . Pokud na svých hostitelích provozujete distribuci Red Hat, pak je SELinux ve výchozím nastavení povolen. SELinux vám umožňuje omezit aplikaci tak, aby měla přístup pouze k jejím vlastním souborům, a zabránit jiným procesům v přístupu k nim. Pokud je tedy aplikace kompromitována, omezilo by to počet souborů, které může ovlivnit nebo ovládat. Dělá to nastavením kontextů pro soubory a procesy a definováním zásad, které by vynutily, co může proces vidět a v čem provádět změny.

Zásady SELinux pro kontejnery jsou definovány container-selinux balík. Ve výchozím nastavení jsou kontejnery spouštěny s container_t a mohou číst (r) a spouštět (x) pod /usr a číst většinu obsahu z /etc adresář. Štítek container_var_lib_t je běžné pro soubory týkající se kontejnerů.

Sbalit

Kontejnery jsou kritickou součástí dnešní IT infrastruktury a také docela zajímavou technologií. I když vaše role přímo nezahrnuje kontejnerizaci, pochopení několika základních konceptů a přístupů kontejnerů vám poskytne ocenění, jak mohou pomoci vaší organizaci. Skutečnost, že kontejnery jsou postaveny na open source linuxových technologiích, je činí ještě lepšími!

Tento článek je založen na článku techbeatly a byl upraven se svolením.


Linux
  1. Mají distribuce Linuxu stále význam s kontejnery?

  2. Stačí říct ne rootovi (v kontejnerech)

  3. Odlehčené izolované linuxové prostředí

  1. 10 průvodců kontejnerů pro systémové správce

  2. 5 důvodů, proč byste měli vyvinout linuxovou kontejnerovou strategii

  3. 7 zábavných funkcí pro přenos kontejnerů/obrázků v Linuxu

  1. Jak spravovat registry kontejnerů Linux

  2. Jaký je rozdíl mezi linuxovým kontejnerem a obrázkem?

  3. Mých 5 oblíbených obrázků kontejneru Linuxu