Latihan - Mengonfigurasi Azure Policy untuk Kubernetes di kluster AKS
Azure Policy untuk Kubernetes membantu organisasi memenuhi persyaratan tata kelola dan hukum, menerapkan praktik terbaik, dan menetapkan konvensi organisasi untuk lingkungan cloud.
Tim pengembangan di perusahaan Anda menggunakan Azure Kubernetes Service (AKS) sebagai platform pengembangan. Anda menyadari bahwa cara terbaik untuk mengelola biaya adalah dengan menegakkan aturan bisnis yang menentukan batas sumber daya beban kerja. Anda ingin memastikan pengembang dapat menyebarkan beban kerja hanya dalam batas tertentu untuk CPU dan alokasi memori. Sistem harus mencegah beban kerja yang melebihi batas tersebut.
Dalam latihan ini, Anda akan mengaktifkan Azure Policy untuk AKS pada kluster dan menambahkan batas CPU kontainer kluster Kubernetes dan sumber daya memori tidak boleh melebihi kebijakan batas yang ditentukan. Kemudian, Anda akan menguji apakah kebijakan menolak penjadwalan beban kerja yang melebihi parameter sumber daya kebijakan.
Mengaktifkan penyedia sumber ContainerService dan PolicyInsights
Masuk ke Azure Cloud Shell dengan akun Azure Anda. Pilih Cloud Shell versi Bash.
Azure Policy untuk AKS memerlukan versi kluster menjadi 1.14 atau yang lebih baru. Jalankan skrip berikut untuk memvalidasi versi kluster AKS Anda:
az aks list
Pastikan bahwa versi kluster yang dilaporkan adalah 1.14 atau yang lebih baru.
Daftarkan penyedia Azure Kubernetes Service dengan menjalankan perintah
az provider register
:az provider register --namespace Microsoft.ContainerService
Daftarkan penyedia Azure Policy dengan menjalankan perintah
az provider register
:az provider register --namespace Microsoft.PolicyInsights
Aktifkan penginstalan add-on dengan menjalankan
az feature register
perintah:az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
Periksa apakah pendaftaran berhasil dengan mengkueri tabel daftar fitur. Gunakan perintah
az feature list
untuk menjalankan kueri. Pendaftaran fitur ini dapat memakan waktu beberapa menit untuk menyelesaikannya, jadi Anda harus memeriksa hasilnya secara berkala.az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKS-AzurePolicyAutoApprove')]. {Name:name,State:properties.state}"
Jika sesi Azure Cloud Shell kehabisan waktu, Anda dapat melacak proses pendaftaran melalui portal Microsoft Azure dengan menggunakan panel onboarding pratinjau.
Jalankan perintah
az provider register
untuk menyebarkan pembaruan setelah Anda mengonfirmasi bahwa perintah kueri feature-list menunjukkan 'Terdaftar':az provider register -n Microsoft.ContainerService
Mengaktifkan Azure Policy pada kluster Anda
Jalankan perintah
az aks enable-addons
untuk mengaktifkan add-onazure-policy
untuk kluster Anda:az aks enable-addons \ --addons azure-policy \ --name $AKS_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP
Verifikasikan bahwa pod kebijakan azure diinstal di namespace
kube-system
dan pod gatekeeper diinstal di namespacegatekeeper-system
. Untuk melakukannya, jalankan perintahkubectl get pods
berikut:kubectl get pods -n kube-system
Output Anda akan terlihat seperti berikut:
NAME READY STATUS RESTARTS AGE azure-policy-78c8d74cd4-7fqn2 1/1 Running 0 12m azure-policy-webhook-545c898766-gsjrc 1/1 Running 0 12m ...
kubectl get pods -n gatekeeper-system
Output Anda akan terlihat seperti berikut:
NAME READY STATUS RESTARTS AGE gatekeeper-controller-manager-d5cd87796-5tmhq 1/1 Running 0 15m ...
Terakhir, verifikasi bahwa add-on terbaru telah terinstal dengan menjalankan perintah
az aks show
. Perintah ini mengambil informasi konfigurasi untuk kluster Anda.az aks show \ --resource-group $RESOURCE_GROUP\ --name $AKS_CLUSTER_NAME \ -o table --query "addonProfiles.azurepolicy"
Output Anda akan terlihat seperti berikut:
{ "config": null, "enabled": true, "identity": null }
Anda sekarang siap untuk beralih ke portal Microsoft Azure untuk mengonfigurasi kebijakan bernama Batas sumber daya CPU dan memori kontainer kluster Kubernetes tidak boleh melebihi batas yang ditentukan.
Menetapkan definisi kebijakan bawaan
Untuk mengonfigurasi Azure Policy baru, gunakan layanan Kebijakan di portal Microsoft Azure.
Masuk ke portal Azure.
Temukan layanan Azure Policy di portal Microsoft Azure. Untuk melakukannya, di bilah penelusuran di bagian atas portal, telusuri dan pilih Kebijakan.
Pilih layanan Azure Policy dari daftar layanan, seperti yang ditunjukkan di sini:
Dasbor Azure Policy terbuka dengan gambaran umum yang menunjukkan semua kebijakan yang Anda tetapkan, status sumber daya, dan bagaimana kebijakan memengaruhi mereka. Jika Anda belum menetapkan kebijakan apa pun, dasbor kosong.
Di panel menu sebelah kiri, di bagian Penulisan, pilih Penugasan:
Ingat dari uraian kita sebelumnya bahwa Anda memiliki dua opsi untuk membuat penetapan kebijakan: Anda menetapkan inisiatif atau kebijakan. Di bilah menu atas, pilih Tetapkan kebijakan:
Panel Tetapkan kebijakan muncul.
Pada tab Dasar-dasar, masukkan nilai berikut bagi setiap pengaturan untuk membuat kebijakan Anda.
Pengaturan Nilai Cakupan Cakupan Pilih tombol elipsis. Panel Cakupan muncul. Di bagian langganan, pilih langganan yang menampung grup sumber daya Anda. Untuk Grup Sumber Daya, pilih rg-akscostsaving, lalu pilih tombol Pilih . Pengecualian Biarkan kosong. Dasar Definisi kebijakan Pilih tombol elipsis. Panel Definisi yang Tersedia muncul. Di kotak Telusuri, filter pilihan dengan memasukkan CPU. Pada tab Definisi Kebijakan, pilih CPU kontainer kluster Kube dan batas sumber daya memori tidak boleh melebihi batas yang ditentukan, lalu pilih Tambahkan. Nama penetapan Terima default. Deskripsi Biarkan kosong. Pemberlakuan kebijakan Pastikan opsi ini diset ke Diaktifkan. Ditetapkan oleh Terima default. Berikut adalah contoh tab Dasar-Dasar yang lengkap:
Pilih tab Parameter untuk menentukan parameter kebijakan.
Set nilai berikut untuk setiap pengaturan parameter:
Pengaturan Nilai Unit CPU maksimum yang diizinkan Atur nilainya menjadi 200 m. Kebijakan mencocokkan nilai ini dengan nilai permintaan sumber daya beban kerja dan nilai batas beban kerja yang ditentukan dalam file manifes beban kerja. Byte memori maksimum yang diperbolehkan Atur nilainya menjadi 256 Mi. Kebijakan mencocokkan nilai ini dengan nilai permintaan sumber daya beban kerja dan nilai batas beban kerja yang ditentukan dalam file manifes beban kerja. Berikut adalah contoh tab Parameter yang lengkap:
Pilih tab Remediasi . Di tab ini, Anda akan memilih bagaimana kebijakan baru memengaruhi sumber daya yang sudah ada. Secara default, kebijakan baru hanya memeriksa sumber daya yang baru dibuat. Pertahankan konfigurasi default standar.
Berikut adalah contoh tab Remediasi yang lengkap:
Pilih tab Tinjau + buat . Tinjau nilai yang Anda pilih, lalu pilih Buat.
Penting
Jika Anda menggunakan kluster AKS yang ada, penugasan kebijakan mungkin memerlukan waktu sekitar 15 menit untuk diterapkan.
Menguji permintaan sumber daya
Langkah terakhir adalah menguji kebijakan baru. Sebarkan beban kerja pengujian Anda dengan permintaan sumber daya dan batasan yang melanggar kebijakan baru. Jika semua berjalan dengan benar, server mengembalikan kesalahan yang menyatakan ditolak oleh kebijakan.
Buka Azure Cloud Shell dan pastikan untuk memilih Cloud Shell versi Bash.
Buat file manifes untuk penyebaran Kubernetes dengan menggunakan editor terintegrasi. Hubungi file
test-policy.yaml
:code test-policy.yaml
Tip
Cloud Shell menyertakan editor file terintegrasi. Penyunting Cloud Shell mendukung fitur seperti penyorotan bahasa, palet perintah, dan penjelajah file. Untuk pembuatan dan pengeditan file sederhana, mulai penyunting dengan menjalankan
code .
di terminal Cloud Shell. Tindakan ini membuka editor dengan direktori kerja aktif Anda yang ditetapkan di terminal. Untuk membuka file manifes Anda secara langsung untuk pengeditan cepat, jalankancode test-policy.yaml
. Perintah ini akan membuka editor tanpa penjelajah file.Tempel teks berikut dalam file:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent resources: requests: cpu: 500m memory: 256Mi limits: cpu: 1000m memory: 500Mi
Tekan Ctrl+S untuk menyimpan file, lalu tekan Ctrl+Q untuk menutup editor.
Jalankan perintah
kubectl apply
untuk menerapkan konfigurasi dan menyebarkan aplikasi dicostsavings
namespace:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Output Anda harus menyerupai berikut ini:
Error from server ( [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi> [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>) : error when creating "test-deploy.yml" : admission webhook "validation.gatekeeper.sh" denied the request: [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi> [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>
Perhatikan bagaimana webhook penerimaan,
validation.gatekeeper.sh
, menolak permintaan untuk menjadwalkan pod.Buka file manifes dan perbaiki permintaan sumber daya:
code test-policy.yaml
Ganti teks dengan teks berikut:
apiVersion: v1 kind: Pod metadata: name: nginx labels: env: test spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent resources: requests: cpu: 200m memory: 256Mi limits: cpu: 200m memory: 256Mi
Tekan Ctrl+S untuk menyimpan file, lalu tekan Ctrl+Q untuk menutup editor.
Jalankan perintah
kubectl apply
untuk menerapkan konfigurasi dan menyebarkan aplikasi dicostsavings
namespace:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
Anda akan mendapatkan output berikut:
pod/nginx created
Dapatkan pod dari pod yang baru dibuat di namespace Anda
costsavings
.kubectl get pods --namespace costsavings
Dalam beberapa detik, pod beralih ke status
Running
.NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 50s
Tekan Ctrl+C untuk berhenti menonton setelah Anda melihat pod berjalan.