GNU/Linux >> Belajar Linux >  >> Linux

4 teknologi Linux mendasar untuk container

Pada artikel sebelumnya, saya telah menulis tentang gambar kontainer dan runtime. Dalam artikel ini, saya melihat bagaimana container dimungkinkan oleh dasar dari beberapa teknologi Linux khusus, termasuk namespace dan grup kontrol.

Wadah Linux

  • Apa itu container Linux?
  • Pengantar terminologi wadah
  • Unduh:Containers Primer
  • Operator Kubernetes:Mengotomatiskan platform orkestrasi container
  • eBook:Pola Kubernetes untuk mendesain aplikasi cloud-native
  • Apa itu Kubernetes?

Teknologi Linux menjadi dasar untuk membangun dan menjalankan proses container di sistem Anda. Teknologi meliputi:

  1. Ruang nama
  2. Grup kontrol (cgroups)
  3. Seccomp
  4. SELinux

Ruang nama

Ruang nama menyediakan lapisan isolasi untuk wadah dengan memberikan wadah pandangan tentang apa yang tampak sebagai sistem file Linux-nya sendiri. Ini membatasi apa yang dapat dilihat oleh suatu proses dan oleh karena itu membatasi sumber daya yang tersedia untuknya.

Ada beberapa ruang nama di kernel Linux yang digunakan oleh Docker atau Podman dan lainnya saat membuat wadah:

 

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

Pengguna

Ruang nama pengguna mengisolasi pengguna dan grup dalam wadah. Ini dilakukan dengan mengizinkan container memiliki tampilan rentang UID dan GID yang berbeda dibandingkan dengan sistem host. Ruang nama pengguna memungkinkan perangkat lunak untuk berjalan di dalam wadah sebagai pengguna root. Jika penyusup menyerang container dan kemudian melarikan diri ke mesin host, mereka hanya terbatas pada identitas non-root.

Mnt

Namespace mnt memungkinkan wadah untuk memiliki pandangan mereka sendiri tentang hierarki sistem file sistem. Anda dapat menemukan titik pemasangan untuk setiap proses kontainer di /proc//mounts lokasi di sistem Linux Anda.

UTS

Namespace Unix Timesharing System (UTS) memungkinkan container memiliki nama host dan nama domain yang unik. Saat Anda menjalankan wadah, ID acak digunakan sebagai nama host bahkan saat menggunakan — name menandai. Anda dapat menggunakan tombol unshare perintah untuk mendapatkan gambaran tentang cara kerjanya.

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

IPC

Ruang nama Inter-Process Communication (IPC) memungkinkan proses container yang berbeda untuk berkomunikasi dengan mengakses rentang memori bersama atau menggunakan antrian pesan bersama.

 

# 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

Namespace ID Proses (PID) memastikan bahwa proses yang berjalan di dalam wadah diisolasi dari dunia luar. Saat Anda menjalankan ps perintah di dalam wadah, Anda hanya melihat proses yang berjalan di dalam wadah dan bukan di mesin host karena namespace ini.

Bersih

Namespace jaringan memungkinkan wadah untuk memiliki tampilan sendiri dari antarmuka jaringan, alamat IP, tabel perutean, nomor port, dan sebagainya. Bagaimana wadah dapat berkomunikasi dengan dunia luar? Semua wadah yang Anda buat akan dilampirkan ke antarmuka jaringan virtual khusus untuk komunikasi.

Grup kontrol (cgroups)

Cgroups adalah blok dasar membuat wadah. Sebuah cgroup mengalokasikan dan membatasi sumber daya seperti CPU, memori, jaringan I/O yang digunakan oleh container. Mesin kontainer secara otomatis membuat sistem file cgroup dari setiap jenis, dan menetapkan nilai untuk setiap kontainer saat kontainer dijalankan.

SECCOMP

Seccomp pada dasarnya adalah singkatan dari komputasi aman . Ini adalah fitur Linux yang digunakan untuk membatasi rangkaian panggilan sistem yang diizinkan oleh aplikasi. Profil seccomp default untuk Docker, misalnya, menonaktifkan sekitar 44 panggilan sys (tersedia lebih dari 300).

Idenya di sini adalah untuk menyediakan akses wadah hanya ke sumber daya yang mungkin dibutuhkan wadah. Misalnya, jika Anda tidak memerlukan wadah untuk mengubah waktu jam pada mesin host Anda, Anda mungkin tidak menggunakan clock_adjtime dan jam_setwaktu syscalls, dan masuk akal untuk memblokirnya. Demikian pula, Anda tidak ingin wadah mengubah modul kernel, jadi mereka tidak perlu membuat create_module, delete_module panggilan sys.

SELinux

SELinux adalah singkatan dari Linux yang ditingkatkan keamanannya . Jika Anda menjalankan distribusi Red Hat di host Anda, maka SELinux diaktifkan secara default. SELinux memungkinkan Anda membatasi aplikasi agar hanya memiliki akses ke filenya sendiri dan mencegah proses lain mengaksesnya. Jadi, jika suatu aplikasi disusupi, itu akan membatasi jumlah file yang dapat dipengaruhi atau dikontrolnya. Ini dilakukan dengan menyiapkan konteks untuk file dan proses dan dengan menetapkan kebijakan yang akan menegakkan apa yang dapat dilihat dan diubah oleh suatu proses.

Kebijakan SELinux untuk container ditentukan oleh container-selinux kemasan. Secara default, container dijalankan dengan container_t label dan diizinkan untuk membaca (r) dan mengeksekusi (x) di bawah /usr direktori dan membaca sebagian besar konten dari /etc direktori. Label container_var_lib_t umum untuk file yang berkaitan dengan container.

Menutup

Kontainer adalah bagian penting dari infrastruktur TI saat ini dan juga merupakan teknologi yang cukup menarik. Bahkan jika peran Anda tidak melibatkan containerization secara langsung, memahami beberapa konsep dan pendekatan container yang mendasar memberi Anda apresiasi tentang bagaimana mereka dapat membantu organisasi Anda. Fakta bahwa container dibuat dengan teknologi Linux open source membuatnya lebih baik!

Artikel ini didasarkan pada artikel techbeatly dan telah diadaptasi dengan izin.


Linux
  1. Bangun wadah Anda sendiri di Linux

  2. Apakah distribusi Linux masih penting dengan container?

  3. Lingkungan linux yang terisolasi ringan

  1. Katakan saja tidak untuk root (dalam wadah)

  2. Sejarah runtime container Linux tingkat rendah

  3. Bagaimana mengelola pendaftar penampung Linux

  1. Apa perbedaan antara wadah Linux dan gambar?

  2. 5 gambar kontainer Linux favorit saya

  3. Apa itu Docker (dan wadah Linux?)