Pengontrol Hierarki menambahkan fitur hierarkis ke Namespace Kubernetes, yang memungkinkan Anda menulis lebih banyak kebijakan ekspresif, meningkatkan kemampuan observasi, dan mendelegasikan administrasi cluster.
Pengontrol Hierarki didasarkan pada Hierarchical Namespace Controller (HNC), proyek {i>open source<i}. Solusi ini diimplementasikan menggunakan Kubernetes pengontrol dan pengontrol tiket masuk dinamis yang berjalan di cluster Anda.
Namespace hierarkis
Di Kubernetes, namespace adalah unit dasar organisasi dari sebagian besar objek. Mereka juga membentuk unit dasar isolasi dan keamanan di Kubernetes. Sebagian besar kebijakan dan objek isolasi beroperasi pada level namespace, seperti peran RBAC, secret, akun layanan, kuota resource, dan kebijakan jaringan.
Anda biasanya dapat meningkatkan keamanan dan isolasi cluster dengan mencakupi setiap cluster untuk menampung jumlah resource terkecil, seperti satu microservice, beserta resource dan kebijakannya. Namun, hal ini dapat menyebabkan dalam jumlah besar di cluster Anda, sehingga akan sulit untuk dikelola.
Untuk mengatasi ini, {i>Hierarchy Controller<i} memperkenalkan konsep namespace hierarkis, yang memungkinkan Anda mengelompokkan namespace Kubernetes menurut pemiliknya, dan memanipulasi kelompok-kelompok itu sebagai unit yang kohesif. Mereka sangat berguna dalam cluster yang digunakan bersama oleh beberapa tim, tetapi pemilik tidak perlu orang. Misalnya, Anda mungkin ingin menjadikan alat otomatis sebagai pemilik kumpulan namespace, terutama jika memerlukan izin akses yang sangat luas tetapi hanya membutuhkan akses ke sekumpulan kecil namespace terkait.
Untuk mendukung kasus penggunaan multi-tenant, namespace hierarki mendukung beberapa selain fitur namespace Kubernetes reguler:
- Penerapan kebijakan. Namespace hierarki dapat mewarisi kebijakan tertentu dari nenek moyang mereka melalui penggunaan propagasi. Misalnya, hal ini memungkinkan Anda memberikan izin RBAC di "root" namespace, dan Pengontrol Hierarki memastikan bahwa izin akses tersebut juga ada di semua namespace turunan dengan menyalin (menyebarkan) objek RBAC ke keturunan. Penyebaran juga dapat dikendalikan pada tingkat yang terperinci menggunakan pengecualian.
- Penerapan kebijakan. Semua namespace hierarkis mencakup label yang sudah dikenal luas dan tepercaya yang mencerminkan nenek moyang mereka. Label ini dapat digunakan dalam pemilih label untuk kebijakan seperti memvalidasi konfigurasi webhook atau kebijakan jaringan.
- Kuota hierarkis. Anda bisa mendefinisikan sebuah kuota hierarkis di namespace ancestor, dan batasnya otomatis diberlakukan pada penggunaan agregat namespace tersebut, serta semua turunannya.
- Kemampuan observasi hierarkis. Label tepercaya yang digunakan untuk penerapan kebijakan juga dapat digunakan untuk mengamati beban kerja hierarkis, seperti untuk memfilter log atau penggunaan.
- Pembuatan namespace yang didelegasikan. Pengontrol Hierarki memperkenalkan konsep subnamespace, yang dapat dibuat oleh pengguna dengan namespace yang sudah ada bahkan jika pengguna tersebut tidak memiliki hak istimewa namespace tingkat cluster.
Namespace hierarkis juga mendukung fitur administrasi, termasuk delegasi.
Namespace hierarki versus namespace abstrak
Namespace hierarkis yang disediakan oleh Pengontrol Hierarki mirip dengan namespace abstrak yang dapat Anda gunakan jika menggunakan Config Sync repositori hierarkis. Namun, mereka memiliki beberapa perbedaan konsep:
- Namespace abstrak hanya bisa ditentukan dalam repositori hierarkis, yang memberlakukan struktur tertentu pada konfigurasi Anda. Namespace hierarkis dapat digunakan di repositori tidak terstruktur, memungkinkan Anda mengatur file konfigurasi sesuai keinginan Anda.
- Namespace abstrak hanya ada di repositori Git, sedangkan juga merupakan namespace Kubernetes reguler dan ada di cluster. Sebagai hasilnya, namespace hierarkis dapat didefinisikan dalam repositori atau langsung di cluster.
- Namespace hierarki tidak memerlukan izin level cluster untuk membuatnya. Sebagai gantinya, Anda dapat menggunakan subnamespace untuk pembuatan namespace yang dihapus.
- Kuota Resource Hierarkis hanya didukung dalam namespace hierarki, bukan namespace abstrak.
- Namespace abstrak hanya tersedia untuk Config Sync, sedangkan hierarkis namespace didasarkan pada konsep {i>open source<i}.
Namespace abstrak dan hierarkis juga memiliki beberapa perilaku default yang berbeda. Secara default, semua objek yang dibuat dalam namespace abstrak disebarkan ke turunannya. Sebaliknya, objek dalam namespace hierarkis hanya disebarluaskan jika Pengontrol Hierarki telah dikonfigurasi untuk menyebarkan jenis objek tersebut.
Secara default, hanya peran dan binding peran RBAC yang disebarkan, tetapi untuk objek dengan namespace dapat disebarkan. Sebaiknya hanya terapkan kebijakan ini objek (seperti peran) dan objek resource (seperti peta konfigurasi). Pengontrol Hierarki tidak dirancang untuk menyebarkan objek workload seperti pod, deployment, atau tugas, dan dapat menghasilkan konsekuensi yang tidak diharapkan jika digunakan dalam seperti ini. Sebaiknya masukkan workload ke dalam namespace daun.
Menggunakan Pengontrol Hierarki dengan Config Sync
Pengontrol Hierarki memungkinkan Anda mendefinisikan dan menerapkan kebijakan yang cocok untuk banyak aplikasi, termasuk klaster yang digunakan oleh beberapa tim. Config Sync memungkinkan Anda menyimpan kebijakan tersebut di Git repositori dan menerapkannya ke grup klaster. Meskipun berbeda, keduanya fiturnya bebas biaya dan memberi Anda cara yang andal untuk menerapkan GitOps di lingkungan multi-tim dan multi-cluster.
Saat Anda menggunakan Pengontrol Hierarki dengan Config Sync, sebaiknya
Anda menggunakan
repositori tidak terstruktur
untuk menonaktifkan namespace abstrak Config Sync,
Pengontrol Hierarki untuk menentukan hierarki dan menyebarkan kebijakan. Untuk
yang ingin Anda periksa ke repo Anda, sebaiknya hanya periksa
konfigurasi untuk
namespace lengkap,
bukan subnamespace, karena Anda bisa
memperbarui hubungan hierarkisnya dengan
memodifikasi objek HierarchicalConfiguration
.
Anda dapat menggunakan Pengontrol Hierarki bersama dengan Config Sync namespace abstrak dalam repositori hierarkis, tetapi hanya dalam cara terbatas. Misalnya, {i>Hierarchy Controller<i} tidak akan membiarkan Anda membuat hierarki hubungan antara dua namespace yang didefinisikan dalam hierarki , karena dapat bertentangan dengan namespace abstrak di repositori tersebut. Namun, Anda dapat menggunakan namespace hierarkis dengan repositori hierarkis di cara berikut:
- Anda dapat membuat subnama mandiri pada cluster, di bawah namespace yang dibuat dari repositori hierarkis. Namun, kami tidak sarankan Anda memeriksa konfigurasi untuk subnamespace tersebut.
- Jika Anda menggunakan beberapa repositori, Anda dapat membuat anchor subnamespace di repositori namespaces, yang akan menginstruksikan Hierarchy Controller untuk membuat subnama di bawah namespace yang ditentukan. Ini subnama akan mewarisi semua resource yang dikonfigurasi dari leluhurnya, dan akan dibatasi oleh kuota resource hierarkis. Namun, Anda tidak dapat menentukan resource apa pun yang hanya boleh ada di subnamespaces; Config Sync akan menyinkronkan semua objek dalam namespace repositori ke namespace yang ditentukan.