Jika organisasi Anda menggunakan Pengontrol Kebijakan untuk mengelola kebijakan di seluruh cluster edisi Google Kubernetes Engine (GKE) Enterprise, maka Anda dapat memvalidasi konfigurasi deployment lain dalam pipeline continuous integration (CI). Ini menunjukkan cara mencapai hasil ini. Memvalidasi aplikasi Anda berguna jika Anda seorang developer yang sedang membangun pipeline CI untuk aplikasi, atau engineer platform membuat template pipeline CI untuk beberapa tim aplikasi.
Halaman ini ditujukan untuk admin IT dan Operator yang ingin memastikan bahwa semua resource yang berjalan dalam platform {i>cloud<i} memenuhi persyaratan persyaratan kepatuhan dengan menyediakan dan mempertahankan otomatisasi untuk menegakkan, dan siapa yang mengelola siklus hidup infrastruktur teknologi yang mendasarinya. Kepada mempelajari lebih lanjut tentang peran umum dan contoh tugas yang kami rujuk dalam konten Google Cloud, lihat Peran dan tugas pengguna GKE Enterprise yang umum.
Kebijakan merupakan bagian penting dari keamanan dan kepatuhan organisasi/pengaturan. Pengontrol Kebijakan memungkinkan organisasi Anda untuk mengelola kebijakan tersebut secara terpusat dan deklaratif untuk semua klaster. Sebagai pengembang, Anda dapat memanfaatkan yang bersifat deklaratif dari kebijakan tersebut. Anda dapat menggunakan karakteristik tersebut untuk memvalidasi aplikasi terhadap kebijakan tersebut seawal mungkin dalam pengembangan aplikasi. Mempelajari pelanggaran kebijakan dalam pipeline CI Anda dibandingkan selama deployment memiliki dua keuntungan utama: hal ini memungkinkan Anda menggeser keamanan ke kiri, dan memperketat feedback loop, sehingga mengurangi waktu dan biaya yang diperlukan untuk memperbaiki pelanggaran tersebut.
Tutorial ini menggunakan Cloud Build sebagai alat CI dan contoh GitHub repositori yang berisi kebijakan untuk demonstrasi.
Resource
Tutorial ini menggunakan beberapa alat Kubernetes. Bagian ini menjelaskan apa yang {i>tool<i} yang digunakan, bagaimana mereka berinteraksi satu sama lain, dan apakah Anda dapat menggantinya dengan hal lain.
Alat yang Anda gunakan dalam tutorial ini meliputi:
Pengontrol Kebijakan: didasarkan pada project open source Open Policy Agent - Gatekeeper. Pengontrol Kebijakan memberlakukan kebijakan tentang objek yang dibuat di Cluster Kubernetes (misalnya, mencegah penggunaan opsi tertentu atau memberlakukan penggunaan label tertentu). Kebijakan tersebut disebut batasan. Batasan didefinisikan sebagai Resource Kustom Kubernetes. Pengontrol Kebijakan tersedia sebagai bagian dari edisi Google Kubernetes Engine (GKE) Enterprise, tetapi Anda dapat menggunakan {i>Open Policy Agent<i} - Gatekeeper, bukan Pengontrol Kebijakan untuk penerapan Anda.
GitHub: Dalam tutorial ini, kami menggunakan GitHub untuk menghosting repositori Git: satu untuk aplikasi contoh, dan aplikasi yang berisi batasan untuk Pengontrol Kebijakan. Sederhananya, kedua repositori itu adalah dua repositori folder dalam satu repositori Git. Pada kenyataannya, akan berbeda repositori tambahan. Anda dapat menggunakan solusi Git apa pun.
Cloud Build: Cloud Build adalah solusi CI Google Cloud. Dalam tutorial ini, kita menggunakan untuk menjalankan pengujian validasi. Meskipun detail implementasinya bervariasi dari satu sistem CI ke sistem yang lain, konsep yang diuraikan dalam tutorial ini dapat digunakan pada sistem CI berbasis container apa pun.
Kustomisasi: Kustomize adalah alat penyesuaian untuk konfigurasi Kubernetes. Cara kerjanya adalah dengan mengambil "base" dan menerapkan penyesuaian pada konfigurasi tersebut. Ini memungkinkan Anda memiliki pendekatan DRY (Jangan Ulangi Sendiri) untuk konfigurasi Kubernetes. Dengan Kustomize, Anda mempertahankan elemen yang umum di semua lingkungan Anda dalam konfigurasi dasar dan membuat penyesuaian per lingkungan. Dalam tutorial ini, kami mempertahankan Kustomisasi konfigurasi di repositori aplikasi, dan kita "build" (misalnya, terapkan kustomisasi) konfigurasi dalam pipeline CI. Anda dapat menggunakan konsep yang dijelaskan dalam tutorial ini dengan alat apa pun yang membuat konfigurasi Kubernetes yang siap untuk diterapkan ke cluster (misalnya, perintah helm template).
Kpt: Kpt adalah alat untuk membangun alur kerja untuk konfigurasi Kubernetes. Kpt memungkinkan Anda mengambil, menampilkan, menyesuaikan, mengupdate, memvalidasi, dan menerapkan konfigurasi Kubernetes. Karena berfungsi dengan file Git dan YAML, ini kompatibel dengan sebagian besar alat ekosistem Kubernetes yang sudah ada. Dalam tutorial ini, kami menggunakan {i>kpt<i} dalam pipeline CI untuk mengambil batasan dari repositori {i>anthos-config-management-samples<i}, dan memvalidasi konfigurasi Kubernetes terhadap batasan tersebut.
Pipeline
Pipeline CI yang kami gunakan dalam tutorial ini ditunjukkan dalam diagram berikut:
Pipeline berjalan di Cloud Build, dan perintah dijalankan di
yang berisi salinan repositori aplikasi contoh. Pipeline dimulai
dengan menghasilkan konfigurasi Kubernetes akhir menggunakan Kustomize. Selanjutnya,
mengambil batasan yang ingin kita validasi dari
repositori anthos-config-management-samples menggunakan {i>kpt<i}. Terakhir, kpt digunakan untuk memvalidasi
Konfigurasi Kubernetes terhadap batasan tersebut. Untuk mencapai langkah terakhir ini,
kita menggunakan sebuah
fungsi config yang dipanggil
gatekeeper
yang melakukan validasi ini. Dalam tutorial ini, Anda akan memicu pipeline CI
secara manual, tetapi pada kenyataannya Anda akan mengonfigurasinya agar berjalan setelah git push
untuk
repositori Git Anda.
Tujuan
- Jalankan pipeline CI untuk aplikasi contoh dengan Cloud Build.
- Perhatikan bahwa pipeline gagal karena pelanggaran kebijakan.
- Ubah repositori aplikasi contoh agar sesuai dengan kebijakan.
- Berhasil menjalankan lagi pipeline CI.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih berikut:
- Cloud Build
- Edisi Google Kubernetes Engine (GKE) Enterprise
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.
Setelah menyelesaikan tutorial ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui detail selengkapnya, lihat Membersihkan bagian.
Sebelum memulai
Pilih atau buat project Google Cloud. Di Konsol Google Cloud, buka halaman Manage resources:
Untuk menjalankan perintah yang tercantum dalam tutorial ini, buka Cloud Shell:
Di Cloud Shell, jalankan
gcloud config get-value project
.Jika perintah tersebut tidak menampilkan ID project yang baru saja Anda pilih, mengonfigurasi Cloud Shell untuk menggunakan project Anda:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan project ID Anda.Di Cloud Shell, aktifkan Cloud Build API yang diperlukan:
gcloud services enable cloudbuild.googleapis.com
Memvalidasi konfigurasi aplikasi contoh
Di bagian ini, Anda akan menjalankan pipeline CI dengan Cloud Build untuk aplikasi contoh repositori yang kita sediakan. Pipeline ini memvalidasi konfigurasi Kubernetes yang tersedia di repositori aplikasi contoh tersebut terhadap batasan yang tersedia dalam repositori anthos-config-management-samples.
Untuk memvalidasi konfigurasi aplikasi:
Di Cloud Shell, clone repositori aplikasi contoh:
git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
Jalankan pipeline CI dengan Cloud Build. Log build ditampilkan secara langsung di Cloud Shell.
cd anthos-config-management-samples/ci-app/app-repo gcloud builds submit .
Pipeline yang Anda jalankan didefinisikan dalam file berikut.
Dalam Pengontrol Kebijakan, batasan adalah pembuatan instance batasan template. Template batasan berisi Kode Rego yang digunakan untuk menerapkan batasan data.
gcr.io/kpt-fn/gatekeeper
fungsi membutuhkan {i>template <i}batasan dan definisi batasan untuk Anda. Repositori kebijakan sampel berisi keduanya, tetapi pada kenyataannya keduanya dapat disimpan di tempat yang berbeda. Gunakan perintahkpt pkg get
sesuai kebutuhan untuk mendownload template dan batasan.Tutorial ini menggunakan
gcr.io/kpt-fn/gatekeeper
dengan Cloud Build untuk memvalidasi resource, namun ada dua alternatif lain yang dapat Anda gunakan:- Gunakan fungsi
gcr.io/kpt-fn/gatekeeper
dengankpt
:
kpt fn eval hydrated-manifests/kpt-manifests.yaml --image gcr.io/kpt-fn/gatekeeper:v0.2
- Gunakan alat command line
gator
:
gator test -f hydrated-manifests/kpt-manifests.yaml
- Gunakan fungsi
Setelah beberapa menit, amati bahwa pipeline gagal dengan error berikut:
[...] Step #2 - "Validate against policies": [error] apps/v1/Deployment/nginx-deployment : Deployment objects should have an 'owner' label indicating who created them. Step #2 - "Validate against policies": violatedConstraint: deployment-must-have-owner Finished Step #2 - "Validate against policies" 2022/05/11 18:55:18 Step Step #2 - "Validate against policies" finished 2022/05/11 18:55:19 status changed to "ERROR" ERROR ERROR: build step 2 "gcr.io/kpt-fn/gatekeeper:v0.2" failed: exit status 1 2022/05/11 18:55:20 Build finished with ERROR status
Batasan yang dilanggar oleh konfigurasi ditentukan dalam hal berikut . Ini adalah resource kustom Kubernetes yang disebut
K8sRequiredLabels
.Untuk template batasan yang sesuai dengan batasan ini, lihat
requiredlabels.yaml
di GitHub.Bangun konfigurasi Kubernetes lengkap sendiri, dan amati bahwa Label
owner
memang tidak ada. Untuk membangun konfigurasi:kubectl kustomize config/prod
Memperbaiki aplikasi agar mematuhi kebijakan perusahaan
Di bagian ini, Anda akan memperbaiki pelanggaran kebijakan menggunakan Kustomize:
Di Cloud Shell, tambahkan bagian
commonLabels
ke dasar File Kustomization:cat <<EOF >> config/base/kustomization.yaml commonLabels: owner: myself EOF
Bangun konfigurasi Kubernetes lengkap, dan amati bahwa label
owner
kini tersedia:kubectl kustomize config/prod
Jalankan ulang pipeline CI dengan Cloud Build:
gcloud builds submit .
Pipeline sekarang berhasil dengan output berikut:
[...] Step #2 - "Validate against policies": [RUNNING] "gcr.io/kpt-fn/gatekeeper:v0" Step #2 - "Validate against policies": [PASS] "gcr.io/kpt-fn/gatekeeper:v0" [...]
Pembersihan
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah selanjutnya
- Untuk arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Cloud Architecture Center.