GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana mengelola pendaftar penampung Linux

Jika kita melihat lebih dekat pada produk LEGO®, kita dapat melihat bahwa semuanya terbuat dari bahan penyusun yang sama. Namun, komposisi balok-balok ini adalah pembeda utama apakah kita sedang membangun kastil atau kapal luar angkasa. Ini hampir sama untuk Podman, dan proyek saudaranya Buildah, Skopeo, dan CRI-O. Namun, alih-alih plastik daur ulang, bahan penyusun alat kontainer kami terbuat dari kode sumber terbuka. Berbagi blok pembangun ini memungkinkan kami menyediakan alat kontainer kelas perusahaan yang kokoh. Fitur dikirimkan lebih cepat, bug diperbaiki lebih cepat, dan kode telah teruji pertempuran. Dan, yah, alih-alih menghadirkan kegembiraan ke dalam ruang bermain, alat penampung membawa kegembiraan ke pusat data dan stasiun kerja.

Blok bangunan paling dasar untuk alat container kami adalah container/pustaka penyimpanan, yang secara lokal menyimpan dan mengelola container dan gambar container. Naik satu tingkat lebih tinggi, kami menemukan perpustakaan wadah/gambar. Seperti namanya, perpustakaan ini berurusan dengan gambar kontainer dan sangat kuat. Hal ini memungkinkan kita untuk menarik dan mendorong gambar, memanipulasi gambar (misalnya, mengubah kompresi lapisan), memeriksa gambar bersama dengan konfigurasi dan lapisannya, dan menyalin gambar di antara apa yang disebut transport gambar. Transportasi dapat merujuk ke penyimpanan kontainer lokal, registri kontainer, arsip tar, dan banyak lagi. Dan Walsh menulis posting blog yang bagus tentang berbagai transportasi yang sangat saya rekomendasikan untuk dibaca.

Pustaka gambar juga mendukung beberapa file konfigurasi di mana, tanpa ragu, registries.conf adalah yang paling penting bagi sebagian besar pengguna. Saya ingin mendedikasikan posting blog ini untuk registries.conf file konfigurasi, jelaskan berbagai opsi dan kenopnya, dan bagaimana kita dapat menggunakannya dalam produksi.

Mengelola pendaftar container dengan registryes.conf

registries.conf konfigurasi sedang dimainkan setiap kali kita mendorong atau menarik gambar. Atau, secara umum, setiap kali kami menghubungi pendaftar penampung. Itu aturan praktis yang mudah. Lokasi seluruh sistem adalah /etc/containers/registries.conf , tetapi jika Anda ingin mengubahnya untuk satu pengguna, Anda dapat membuat file baru di $HOME/.config/containers/registries.conf .

Jadi mari kita selami itu. Pada bagian berikut, kita akan membahas beberapa contoh yang menjelaskan berbagai opsi konfigurasi di registries.conf . Contohnya adalah skenario dunia nyata dan dapat menjadi sumber inspirasi untuk menangani kasus penggunaan individual Anda.

Mengambil dengan nama pendek

Manusia malas, dan saya tidak terkecuali untuk itu. Jauh lebih nyaman untuk melakukan podman pull ubi8 daripada podman pull registry.access.redhat.com/ubi8:latest . Saya terus lupa gambar mana yang hidup di registri mana, dan ada banyak gambar dan banyak registri di luar sana. Ada Docker Hub dan Quay.io, plus registry untuk Amazon, Microsoft, Google, Red Hat, dan banyak distribusi Linux lainnya.

Docker mengatasi kemalasan kami dengan selalu memutuskan ke Docker Hub. Sebuah docker pull alpine akan memutuskan ke docker.io/library/alpine:latest , dan docker pull repo/image:tag akan memutuskan ke docker.io/repo/image:tag (perhatikan repo yang ditentukan). Podman dan proyek saudaranya tidak ingin mengunci pengguna untuk menggunakan satu registri saja, jadi nama pendek dapat diselesaikan lebih dari docker.io, dan seperti yang Anda harapkan, kami dapat mengonfigurasinya di registries.conf sebagai berikut:

unqualified-search-registries = ['registry.fedoraproject.org', 'registry.access.redhat.com', 'registry.centos.org', 'docker.io']

Cuplikan di atas diambil langsung dari registries.conf di Fedora 33. Ini adalah daftar pendaftar yang dihubungi dalam urutan yang ditentukan saat menarik gambar nama pendek. Jika gambar tidak dapat ditemukan di registri pertama, Podman akan mencoba menarik dari registri kedua dan seterusnya. Buildah dan CRI-O mengikuti logika yang sama tetapi perhatikan bahwa Skopeo selalu dinormalisasi ke docker.io.

[ Anda mungkin juga menyukai: Apa beban kerja Linux berikutnya yang Anda rencanakan untuk ditampung? ]

Mencari gambar

Mirip dengan bagian sebelumnya tentang menarik, gambar biasanya dicari berdasarkan nama. Saat melakukan podman search , Saya biasanya tidak tahu atau hanya lupa di registri mana gambar yang diberikan hidup. Saat menggunakan Docker, Anda hanya dapat mencari di Docker Hub. Podman memberi lebih banyak kebebasan kepada pengguna dan memungkinkan untuk mencari gambar di registri apa pun. Dan tidak mengherankan, registries.conf punya solusinya.

Mirip dengan menarik, unqualified-search-registries juga digunakan saat menggunakan nama pendek dengan podman search . podman search foo akan mencari gambar bernama foo di semua registry pencarian yang tidak memenuhi syarat.

Perusahaan besar biasanya memiliki pendaftar kontainer di tempat. Mengintegrasikan registry semacam itu dalam alur kerja Anda semudah menambahkannya ke daftar registry pencarian yang tidak memenuhi syarat.

Alias ​​nama pendek

Versi Podman, Buildah, dan CRI-O yang lebih baru dikirimkan dengan cara baru untuk menyelesaikan nama pendek, terutama dengan menggunakan alias. Alias ​​​​adalah tabel TOML sederhana [aliases] dalam bentuk "name" = "value" , mirip dengan cara kerja alias Bash. Kami memelihara daftar pusat alias bersama dengan komunitas upstream di github.com/containers/shortnames . Jika Anda memiliki gambar dan ingin memiliki alias, silakan buka pull request atau hubungi kami.

Beberapa distribusi, seperti RHEL8, berencana mengirimkan daftar nama pendek mereka sendiri untuk membantu pengguna dan mencegah mereka secara tidak sengaja menarik gambar dari registri yang salah.

Menjelaskan cara kerja alias nama pendek secara mendetail akan memperluas entri blog ini secara signifikan, jadi jika Anda tertarik, lihat entri blog sebelumnya tentang alias nama pendek.

Mengonfigurasi registri penampung lokal

Menjalankan registri kontainer lokal cukup umum. Saya memiliki satu yang berjalan sepanjang waktu, jadi saya dapat menyimpan gambar dan mengembangkan serta menguji fitur-fitur baru seperti pembaruan otomatis di Podman. Bandwidth di kantor rumah saya terbatas, jadi saya menghargai dorongan dan tarikan yang cepat. Karena semuanya berjalan secara lokal, saya tidak perlu khawatir tentang pengaturan TLS untuk registri. Itu berarti menghubungkan ke registri melalui HTTP daripada melalui HTTPS. Podman memungkinkan Anda melakukannya dengan menentukan --tls-verify=false pada baris perintah, yang akan melewati verifikasi TLS dan mengizinkan koneksi yang tidak aman.

Pendekatan alternatif untuk melewatkan verifikasi TLS melalui baris perintah adalah dengan menggunakan registries.conf . Ini mungkin lebih nyaman, terutama untuk skrip otomatis di mana kita tidak ingin menambahkan flag baris perintah secara manual. Mari kita lihat cuplikan konfigurasi di bawah ini.

[[registry]]
location="localhost:5000"
insecure=true

Format registryes.conf adalah TOML. Kurung ganda [[registry]] menunjukkan bahwa kita dapat menentukan daftar (atau tabel) dari [registry] objek. Dalam contoh ini, hanya ada satu registri di mana lokasi (yaitu, alamatnya) diatur ke localhost:5000 . Di situlah registri lokal biasanya berjalan. Kapan pun containers/image perpustakaan terhubung ke registri wadah dengan lokasi itu, itu akan mencari konfigurasinya dan bertindak sesuai. Dalam hal ini, registri dikonfigurasikan agar tidak aman, dan verifikasi TLS akan dilewati. Podman dan alat penampung lainnya sekarang dapat berbicara dengan registri lokal tanpa koneksi ditolak.

Memblokir registri, namespace, atau gambar

Jika Anda ingin mencegah pengguna atau alat menarik dari registri tertentu, Anda dapat melakukan hal berikut.

[[registry]]
location="registry.example.org"
blocked=true

blocked=true mencegah koneksi ke registri ini, atau setidaknya memblokir pengambilan data darinya.

Namun, sangat umum di antara pengguna untuk memblokir hanya ruang nama tertentu atau gambar individu tetapi tidak seluruh registri. Mari kita asumsikan bahwa kita ingin menghentikan pengguna menarik gambar dari namespace registry.example.org/namespace . registries.conf sekarang akan terlihat seperti ini:

[[registry]]]
location="registry.example.org"
prefix="registry.example.org/example"
blocked=true

Saya baru saja memperkenalkan kenop konfigurasi baru:prefix . Awalan hanya menginstruksikan untuk memilih konfigurasi yang ditentukan ketika kami mencoba menarik gambar yang cocok dengan awalan tertentu. Misalnya, jika kita menjalankan podman pull registry.example.org/example/image:latest , awalan yang ditentukan akan cocok, dan Podman akan diblokir untuk menarik gambar. Jika Anda ingin memblokir gambar tertentu, Anda dapat mengaturnya menggunakan yang berikut:

prefix="registry.example.org/namespace/image"

Menggunakan awalan adalah alat yang sangat ampuh untuk memenuhi semua jenis kasus penggunaan. Itu dapat digabungkan dengan semua tombol dari [registry] . Perhatikan bahwa menggunakan awalan adalah opsional. Jika tidak ada yang ditentukan, awalan akan default ke lokasi (wajib).

Mencerminkan registri

Mari kita asumsikan bahwa kita menjalankan beban kerja kita di lingkungan dengan celah udara. Semua server kami terputus dari internet. Ada banyak alasan untuk itu. Kami mungkin berjalan di tepi atau berjalan di lingkungan yang sangat sensitif terhadap keamanan yang melarang kami terhubung ke internet. Dalam hal ini, kami tidak dapat terhubung ke registri asli tetapi perlu menjalankan registri yang mencerminkan konten jaringan lokal.

Cermin registri adalah registri yang akan dihubungi sebelum mencoba menarik dari yang asli. Ini adalah kasus penggunaan umum dan salah satu permintaan fitur tertua di ekosistem container.

[[registry]]
location="registry.access.redhat.com"
[[registry.mirror]]
location="internal.registry.mirror"

Dengan konfigurasi ini, saat menarik Universal Base Image melalui podman pull ubi8 , gambar akan ditarik dari cermin, bukan dari registri kontainer Red Hat.

Perhatikan bahwa kita dapat menentukan beberapa cermin yang akan dihubungi dalam urutan yang ditentukan. Mari kita lihat sekilas apa artinya:

[[registry]]
location="registry.example.com"
[[registry.mirror]]
location="mirror-1.com"
[[registry.mirror]]
location="mirror-2.com"
[[registry.mirror]]
location="mirror-3.com"

Mari kita asumsikan kita mencoba menarik gambar registry.example.com/myimage:latest . Mirror dihubungi dalam urutan yang ditentukan (yaitu, top-down), yang berarti bahwa Podman pertama-tama akan mencoba menarik gambar dari mirror-1.com . Jika gambar tidak ada atau penarikan gagal karena alasan lain, Podman akan menghubungi mirror-2.com Dan seterusnya. Jika semua penarikan mirror gagal, Podman akan menghubungi registry.example.com utama .

Perhatikan bahwa mirror juga mendukung insecure tombol. Jika Anda ingin melewati verifikasi TLS untuk mirror tertentu, cukup tambahkan insecure=true .

Memetakan ulang referensi

Seperti yang kita jelajahi di atas, sebuah prefix digunakan untuk memilih [registry] tertentu di registries.conf . Sementara awalan adalah cara yang ampuh untuk memblokir ruang nama tertentu atau gambar tertentu agar tidak ditarik, mereka juga dapat digunakan untuk memetakan kembali seluruh gambar. Mirip dengan mirror, kita dapat menggunakan awalan untuk menarik dari registri yang berbeda dan namespace yang berbeda.

Untuk mengilustrasikan apa yang saya maksud dengan memetakan ulang , mari kita pertimbangkan bahwa kita berlari di lingkungan dengan celah udara. Kami tidak dapat mengakses pendaftar kontainer karena kami terputus dari internet. Beban kerja kami menggunakan gambar dari Quay.io, Docker Hub, dan registri kontainer Red Hat. Meskipun kami dapat memiliki satu mirror lokal jaringan per registri, kami juga dapat menggunakannya dengan konfigurasi berikut.

[[registry]]
prefix="quay.io"
location="internal.registry.mirror/quay"

[[registry]]
prefix="docker.io"
location="internal.registry.mirror/docker"

[[registry]]
prefix="registry.access.redhat.com"
location="internal.registry.mirror/redhat"

podman pull quay.io/buildah/stable:latest sekarang akan menarik internal.registry.mirror/quay/buildah/stable:latest . Namun, gambar yang ditarik akan tetap quay.io/buildah/stable:latest karena pemetaan ulang dan pencerminan terjadi secara transparan pada Podman dan alat penampung lainnya.

Seperti yang bisa kita lihat pada cuplikan di atas, internal.registry.mirror adalah mirror lokal jaringan kami yang kami gunakan untuk menarik gambar atas nama Quay.io, Docker Hub, dan registri kontainer Red Hat. Gambar dari setiap registri berada di ruang nama terpisah pada registri (yaitu, "quay", "docker", "redhat")—trik sederhana namun kuat untuk memetakan ulang gambar saat menarik. Anda mungkin bertanya pada diri sendiri bagaimana kami dapat mengisi cermin internal terlebih dahulu dengan gambar dari tiga registri. Saya tidak menyarankan melakukan itu secara manual tetapi menggunakan skopeo sync sebagai gantinya. Dengan skopeo sync , sysadmin dapat dengan mudah memuat semua gambar ke drive USB, membawanya ke cluster air-gapped, dan melakukan pramuat mirror.

Ada banyak kasus penggunaan di mana pemetaan ulang semacam itu dapat membantu. Misalnya, saat menggunakan registri lain selama pengujian, mungkin berguna untuk menarik secara transparan dari registri lain (pengujian atau pementasan) daripada dalam produksi. Tidak diperlukan perubahan kode.

Tom Sweeney dan Ed Santiago menggunakan pemetaan ulang untuk mengembangkan solusi kreatif untuk mengatasi batas kecepatan Docker Hub. Pada akhir November 2020, Docker Hub mulai membatasi jumlah penarikan per pengguna dalam jangka waktu tertentu. Pada awalnya, kami khawatir karena sebagian besar sistem pengujian kami, dan integrasi berkelanjutan menggunakan gambar Docker Hub. Tetapi dengan perubahan sederhana pada registries.conf pada sistem kami, Tom dan Ed menemukan solusi yang bagus. Itu menghindarkan kami dari tugas manual dan membosankan untuk mengubah semua gambar yang merujuk ke docker.io dalam pengujian kami.

Manajemen konfigurasi lanjutan melalui file konfigurasi drop-on

Mengelola konfigurasi itu menantang. Sistem kami diperbarui setiap saat, dan dengan pembaruan tersebut dapat terjadi perubahan konfigurasi. Kami mungkin ingin menambahkan registry baru, mengkonfigurasi mirror baru, memperbaiki pengaturan sebelumnya atau memperluas konfigurasi default Fedora. Ada banyak motivasi, dan yang pasti registries.conf mendukungnya melalui apa yang disebut file konfigurasi drop-in.

Saat memuat konfigurasi, containers/image library pertama-tama akan memuat file konfigurasi utama di /etc/containers/registries.conf lalu semua file di /etc/containers/registries.conf.d direktori dalam urutan alfanumerik.

Menggunakan registries.conf drop-in seperti itu file lurus ke depan. Cukup tempatkan .conf file di direktori, dan Podman akan mendapatkan konfigurasi yang diperbarui. Perhatikan bahwa tabel dalam konfigurasi digabungkan sementara tombol sederhana diganti. Ini berarti, dalam praktiknya, bahwa [[registry]] tabel dapat dengan mudah diperpanjang dengan pendaftar baru. Jika registri dengan awalan yang sama sudah ada, pengaturan registri akan diganti. Hal yang sama berlaku untuk [aliases] meja. Kenop konfigurasi sederhana seperti unqualified-search-registries selalu diganti.

[ Memulai container? Lihat kursus gratis ini. Menyebarkan aplikasi kemas:Tinjauan teknis. ]

Kesimpulan

registries.conf adalah blok bangunan inti dari alat kontainer kami. Ini memungkinkan untuk mengonfigurasi semua jenis properti saat berbicara dengan registri kontainer. Jika Anda tertarik untuk mempelajari konfigurasi secara lebih rinci, Anda dapat melakukan man containers-registries.conf ke halaman baca manual di mesin Linux Anda atau kunjungi dokumentasi upstream.


Linux
  1. Cara Mengelola dan Mendaftar Layanan di Linux

  2. Cara Mengelola Kata Sandi Akun di Linux

  3. Cara Menggunakan Perintah apt untuk Mengelola Paket di Linux

  1. Bagaimana Mengelola Kemampuan File Linux

  2. Cara Mengelola File Log Menggunakan Logrotate Di Linux

  3. Cara memindahkan Pelacak Permintaan ke dalam wadah Linux

  1. Cara memindahkan MediaWiki ke dalam wadah Linux

  2. Bagaimana mengelola riwayat perintah Linux Anda

  3. 5 gambar kontainer Linux favorit saya