Ringkasan Hierarchy Controller

Pengontrol Hierarki menambahkan fitur hierarkis ke namespace Kubernetes, sehingga Anda dapat menulis kebijakan yang lebih ekspresif, meningkatkan kemampuan observasi, dan mendelegasikan administrasi cluster.

Pengontrol Hierarki didasarkan pada Pengontrol Namespace Hierarkis (HNC), yaitu sebuah project open source. Hal ini diterapkan menggunakan pengontrol Kubernetes dan pengontrol penerimaan dinamis yang berjalan di cluster Anda.

Namespace hierarkis

Di Kubernetes, namespace adalah unit dasar organisasi sebagian besar objek. Mereka juga membentuk unit dasar isolasi dan keamanan di Kubernetes. Sebagian besar objek kebijakan dan isolasi beroperasi pada level namespace, seperti peran RBAC, secret, akun layanan, kuota resource, dan kebijakan jaringan.

Biasanya, Anda dapat meningkatkan keamanan dan isolasi cluster dengan membuat setiap namespace agar dapat menampung jumlah resource terkecil, seperti satu microservice, beserta resource dan kebijakannya. Namun, hal ini dapat menyebabkan sejumlah besar namespace di cluster Anda, yang mungkin sulit dikelola.

Untuk mengatasi hal ini, Pengontrol Hierarki memperkenalkan konsep namespace hierarkis, yang memungkinkan Anda mengelompokkan namespace Kubernetes menurut pemiliknya, dan memanipulasi grup tersebut sebagai unit yang kohesif. Fitur ini sangat berguna dalam cluster yang digunakan bersama oleh beberapa tim, tetapi pemiliknya tidak harus berupa orang. Misalnya, Anda mungkin ingin menjadikan alat otomatis sebagai pemilik kumpulan namespace, terutama jika alat tersebut memerlukan izin yang sangat luas, tetapi hanya memerlukan akses ke sejumlah kecil namespace terkait.

Untuk mendukung kasus penggunaan multi-tenant, namespace hierarkis mendukung beberapa fitur selain namespace Kubernetes reguler:

  • Penerapan kebijakan. Namespace hierarkis dapat mewarisi kebijakan tertentu dari ancestornya melalui penggunaan propagasi. Misalnya, hal ini memungkinkan Anda memberikan izin RBAC dalam namespace "root", dan Pengontrol Hierarki memastikan bahwa izin tersebut juga ada di semua namespace turunan dengan menyalin (menyebarkan) objek RBAC ke turunan tersebut. Propagasi juga dapat dikontrol pada tingkat terperinci menggunakan pengecualian.
  • Aplikasi kebijakan. Semua namespace hierarkis menyertakan label tepercaya dan terkenal yang mencerminkan ancestornya. Label ini dapat digunakan di pemilih label untuk kebijakan seperti memvalidasi konfigurasi webhook atau kebijakan jaringan.
  • Kuota hierarkis. Anda dapat menentukan satu kuota hierarkis dalam namespace ancestor, dan batas tersebut otomatis diterapkan pada penggunaan agregat namespace tersebut, serta semua turunannya.
  • Kemampuan observasi hierarkis. Label tepercaya yang digunakan untuk aplikasi kebijakan juga dapat digunakan untuk mengamati workload hierarkis, seperti untuk memfilter log atau penggunaan.
  • Mendelegasikan pembuatan namespace. Pengontrol Hierarki memperkenalkan konsep subnamespace, yang dapat dibuat oleh pengguna di bawah namespace yang sudah ada meskipun pengguna tersebut tidak memiliki hak istimewa namespace level cluster.

Namespace hierarki juga mendukung fitur administrasi yang ekstensif, termasuk delegasi.

Namespace hierarkis versus namespace abstrak

Namespace hierarkis yang disediakan oleh Pengontrol Hierarki mirip dengan namespace abstrak yang dapat Anda gunakan jika menggunakan repositori hierarkis Config Sync. Namun, keduanya memiliki beberapa perbedaan konseptual:

  • Namespace abstrak hanya dapat ditentukan dalam repositori hierarkis, yang menerapkan struktur tertentu pada konfigurasi Anda. Namespace hierarkis dapat digunakan di repositori tidak terstruktur, sehingga Anda dapat mengatur file konfigurasi sesuai keinginan.
  • Namespace abstrak hanya ada di repositori Git, sedangkan namespace hierarkis juga merupakan namespace Kubernetes reguler dan ada di cluster. Akibatnya, namespace hierarkis dapat ditentukan di repositori atau langsung di cluster.
  • Namespace hierarkis tidak memerlukan izin tingkat cluster untuk dibuat. Sebagai gantinya, Anda dapat menggunakan subnamespace untuk pembuatan namespace yang dihapus.
  • Kuota Resource Hierarkis hanya didukung dalam namespace hierarkis, bukan namespace abstrak.
  • Namespace abstrak hanya tersedia untuk Config Sync, sedangkan namespace hierarkis didasarkan pada konsep open source.

Namespace abstrak dan hierarki juga memiliki beberapa perilaku default yang berbeda. Secara default, semua objek yang dibuat di namespace abstrak disebarkan ke turunannya. Sebaliknya, objek dalam namespace hierarkis hanya disebarkan jika Pengontrol Hierarki telah dikonfigurasi untuk menyebarkan jenis objek tersebut.

Secara default, hanya peran RBAC dan binding peran yang disebarkan, tetapi objek dengan namespace dapat disebarkan. Sebaiknya hanya terapkan objek kebijakan (seperti peran) dan objek resource (seperti peta konfigurasi). Pengontrol Hierarki tidak dirancang untuk menyebarkan objek beban kerja seperti pod, deployment, atau tugas, dan dapat menghasilkan konsekuensi yang tidak diinginkan jika digunakan dengan cara ini. Sebaiknya tempatkan workload ke dalam namespace turunan.

Menggunakan Pengontrol Hierarki dengan Config Sync

Pengontrol Hierarki memungkinkan Anda menentukan dan menerapkan kebijakan menggunakan konsep hierarkis yang cocok untuk banyak aplikasi, termasuk cluster yang digunakan oleh beberapa tim. Dengan Config Sync, Anda dapat menyimpan kebijakan tersebut di repositori Git dan menerapkannya ke grup cluster. Meskipun berbeda, kedua fitur ini saling melengkapi dan memberi Anda cara efektif untuk menerapkan GitOps di lingkungan multi-tim dan multi-cluster.

Saat Anda menggunakan Pengontrol Hierarki dengan Config Sync, sebaiknya gunakan repositori tidak terstruktur untuk menonaktifkan namespace abstrak Config Sync, dan gunakan Pengontrol Hierarki untuk menentukan hierarki dan menerapkan kebijakan. Untuk namespace yang ingin Anda periksa di repo, sebaiknya hanya periksa konfigurasi untuk namespace lengkap, bukan subnamespace, karena Anda dapat memperbarui hubungan hierarkinya dengan memodifikasi objek HierarchicalConfiguration.

Anda dapat menggunakan Pengontrol Hierarki bersama dengan namespace abstrak Config Sync dalam repositori hierarkis, tetapi hanya dalam cara tertentu. Misalnya, Pengontrol Hierarki tidak akan mengizinkan Anda membuat hubungan hierarkis antara dua namespace yang ditentukan dalam repositori hierarkis, karena hal ini dapat bertentangan dengan namespace abstrak dalam repositori tersebut. Namun, Anda dapat menggunakan namespace hierarkis dengan repositori hierarkis dengan cara berikut:

  • Anda dapat membuat subnamespace layanan mandiri pada cluster, di bawah namespace yang dibuat dari repositori hierarkis. Namun, sebaiknya jangan memeriksa konfigurasi untuk subnamespace tersebut.
  • Jika menggunakan beberapa repositori, Anda dapat membuat anchor subnamespace di repositori namespace, yang akan menginstruksikan Pengontrol Hierarki untuk membuat subnamespace di bawah namespace yang ditentukan. Subnamespace ini akan mewarisi semua resource yang dikonfigurasi dari ancestornya, dan akan dibatasi oleh kuota resource hierarkis. Namun, Anda tidak dapat menetapkan resource yang hanya boleh ada di subnamespace ini. Config Sync akan menyinkronkan semua objek dalam repositori namespace ke namespace yang ditentukan.

Langkah selanjutnya