Jika organisasi Anda menggunakan Policy Controller untuk mengelola kebijakan di seluruh cluster edisi Enterprise Google Kubernetes Engine (GKE), Anda dapat memvalidasi konfigurasi deployment aplikasi di pipeline continuous integration (CI)-nya. Tutorial ini menunjukkan cara mencapai hasil ini. Memvalidasi aplikasi berguna jika Anda adalah developer yang membuat pipeline CI untuk aplikasi, atau engineer platform yang membuat template pipeline CI untuk beberapa tim aplikasi.
Halaman ini ditujukan untuk administrator IT dan Operator yang ingin memastikan bahwa semua resource yang berjalan dalam platform cloud memenuhi persyaratan kepatuhan organisasi dengan menyediakan dan mempertahankan otomatisasi untuk mengaudit atau menerapkan, dan yang mengelola siklus proses infrastruktur teknologi yang mendasarinya. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam konten Google Cloud, lihat Peran dan tugas pengguna GKE Enterprise umum.
Kebijakan adalah bagian penting dari keamanan dan kepatuhan organisasi. Pengontrol Kebijakan memungkinkan organisasi Anda mengelola kebijakan tersebut secara terpusat dan deklaratif untuk semua cluster. Sebagai developer, Anda dapat memanfaatkan sifat terpusat dan deklaratif dari kebijakan tersebut. Anda dapat menggunakan karakteristik tersebut untuk memvalidasi aplikasi terhadap kebijakan tersebut seawal mungkin dalam alur kerja pengembangan. Mempelajari pelanggaran kebijakan di pipeline CI, bukan selama deployment, memiliki dua keuntungan utama: Anda dapat mendorong keamanan ke kiri, dan memperketat lingkaran umpan balik, sehingga mengurangi waktu dan biaya yang diperlukan untuk memperbaiki pelanggaran tersebut.
Tutorial ini menggunakan Cloud Build sebagai alat CI dan contoh repositori GitHub yang berisi kebijakan untuk demonstrasi.
Resource
Tutorial ini menggunakan beberapa alat Kubernetes. Bagian ini menjelaskan apa saja alat tersebut, cara alat tersebut berinteraksi satu sama lain, dan apakah Anda dapat menggantinya dengan yang lain.
Alat yang Anda gunakan dalam tutorial ini mencakup hal berikut:
Pengontrol Kebijakan: didasarkan pada project open source Open Policy Agent - Gatekeeper. Pengontrol Kebijakan menerapkan kebijakan tentang objek yang dibuat di cluster Kubernetes (misalnya, mencegah penggunaan opsi tertentu atau menerapkan penggunaan label tertentu). Kebijakan tersebut disebut batasan. Batasan ditentukan sebagai Resource Kustom Kubernetes. Pengontrol Kebijakan tersedia sebagai bagian dari edisi Google Kubernetes Engine (GKE) Enterprise, tetapi Anda dapat menggunakan Open Policy Agent - Gatekeeper, bukan Pengontrol Kebijakan untuk penerapan Anda.
GitHub: Dalam tutorial ini, kita menggunakan GitHub untuk menghosting repositori Git: satu untuk aplikasi contoh, dan satu lagi yang berisi batasan untuk Pengontrol Kebijakan. Untuk memudahkan, kedua repositori tersebut adalah dua folder yang berbeda dalam satu repositori Git. Pada kenyataannya, keduanya akan menjadi repositori yang berbeda. Anda dapat menggunakan solusi Git apa pun.
Cloud Build: Cloud Build adalah solusi CI Google Cloud. Dalam tutorial ini, kita menggunakannya untuk menjalankan pengujian validasi. Meskipun detail penerapannya dapat bervariasi dari satu sistem CI ke sistem CI lainnya, konsep yang diuraikan dalam tutorial ini dapat digunakan dengan sistem CI berbasis penampung apa pun.
Kustomize: Kustomize adalah alat penyesuaian untuk konfigurasi Kubernetes. Cara kerjanya adalah dengan mengambil konfigurasi "dasar" dan menerapkan penyesuaian ke konfigurasi tersebut. Hal ini memungkinkan Anda memiliki pendekatan DRY (Don't Repeat Yourself) untuk konfigurasi Kubernetes. Dengan Kustomize, Anda menyimpan elemen yang umum untuk semua lingkungan dalam konfigurasi dasar dan membuat penyesuaian per lingkungan. Dalam tutorial ini, kita menyimpan konfigurasi Kustomisasi di repositori aplikasi, dan kita "mem-build" (misalnya, menerapkan penyesuaian) konfigurasi di pipeline CI. Anda dapat menggunakan konsep yang diuraikan dalam tutorial ini dengan alat apa pun yang menghasilkan konfigurasi Kubernetes yang siap diterapkan ke cluster (misalnya, perintah helm template).
Kpt: Kpt adalah alat untuk membuat alur kerja konfigurasi Kubernetes. Kpt memungkinkan Anda mengambil, menampilkan, menyesuaikan, mengupdate, memvalidasi, dan menerapkan konfigurasi Kubernetes. Karena berfungsi dengan file Git dan YAML, alat ini kompatibel dengan sebagian besar alat yang ada di ekosistem Kubernetes. Dalam tutorial ini, kita menggunakan kpt di pipeline CI untuk mengambil batasan dari repositori anthos-config-management-samples, dan untuk memvalidasi konfigurasi Kubernetes terhadap batasan tersebut.
Pipeline
Pipeline CI yang kita gunakan dalam tutorial ini ditunjukkan dalam diagram berikut:
Pipeline berjalan di Cloud Build, dan perintah dijalankan di
direktori yang berisi salinan repositori aplikasi contoh. Pipeline dimulai
dengan membuat konfigurasi Kubernetes akhir dengan Kustomize. Selanjutnya, alat ini
mengambil batasan yang ingin kita validasi dari
repositori anthos-config-management-samples menggunakan kpt. Terakhir, alat ini menggunakan kpt untuk memvalidasi
konfigurasi Kubernetes terhadap batasan tersebut. Untuk mencapai langkah terakhir ini,
kita menggunakan
fungsi konfigurasi tertentu yang disebut
gatekeeper
yang melakukan validasi ini. Dalam tutorial ini, Anda memicu pipeline CI
secara manual, tetapi pada kenyataannya Anda akan mengonfigurasinya agar berjalan setelah git push
ke
repositori Git Anda.
Tujuan
- Menjalankan pipeline CI untuk aplikasi contoh dengan Cloud Build.
- Perhatikan bahwa pipeline gagal karena pelanggaran kebijakan.
- Ubah repositori aplikasi contoh agar mematuhi kebijakan.
- Berhasil menjalankan kembali pipeline CI.
Biaya
Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih berikut:
- Cloud Build
- Google Kubernetes Engine (GKE) edisi 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 detail selengkapnya, lihat bagian Pembersihan.
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 tidak menampilkan ID project yang baru saja Anda pilih, konfigurasikan Cloud Shell agar 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 repositori aplikasi contoh yang kami sediakan. Pipeline ini memvalidasi konfigurasi Kubernetes yang tersedia di repositori aplikasi contoh tersebut terhadap batasan yang tersedia di 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 langsung di Cloud Shell.
cd anthos-config-management-samples/ci-app/app-repo gcloud builds submit .
Pipeline yang Anda jalankan ditentukan dalam file berikut.
Di Pengontrol Kebijakan, batasan adalah pembuatan instance template batasan. Template batasan berisi kode Rego sebenarnya yang digunakan untuk menerapkan batasan. Fungsi
gcr.io/kpt-fn/gatekeeper
memerlukan template batasan dan definisi batasan agar dapat berfungsi. Repositori kebijakan contoh berisi keduanya, tetapi pada kenyataannya keduanya dapat disimpan di tempat yang berbeda. Gunakan perintahkpt pkg get
sesuai kebutuhan untuk mendownload template dan batasan batasan.Tutorial ini menggunakan
gcr.io/kpt-fn/gatekeeper
dengan Cloud Build untuk memvalidasi resource, tetapi 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 konfigurasi ditentukan dalam file berikut. Ini adalah resource kustom Kubernetes yang disebut
K8sRequiredLabels
.Untuk template batasan yang sesuai dengan batasan ini, lihat
requiredlabels.yaml
di GitHub.Buat sendiri konfigurasi Kubernetes lengkap, dan amati bahwa label
owner
memang tidak ada. Untuk mem-build 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 file Kustomisasi dasar:cat <<EOF >> config/base/kustomization.yaml commonLabels: owner: myself EOF
Build konfigurasi Kubernetes lengkap, dan amati bahwa label
owner
kini ada:kubectl kustomize config/prod
Jalankan ulang pipeline CI dengan Cloud Build:
gcloud builds submit .
Pipeline kini 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
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Langkah selanjutnya
- Untuk arsitektur referensi, diagram, dan praktik terbaik lainnya, jelajahi Cloud Architecture Center.