Latihan - Mengonfigurasi Azure Policy untuk Kubernetes di kluster AKS

Selesai

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

  1. Masuk ke Azure Cloud Shell dengan akun Azure Anda. Pilih Cloud Shell versi Bash.

  2. 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.

  3. Daftarkan penyedia Azure Kubernetes Service dengan menjalankan perintah az provider register:

    az provider register --namespace Microsoft.ContainerService
    
  4. Daftarkan penyedia Azure Policy dengan menjalankan perintah az provider register:

    az provider register --namespace Microsoft.PolicyInsights
    
  5. Aktifkan penginstalan add-on dengan menjalankan az feature register perintah:

    az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
    
  6. 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.

  7. 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

  1. Jalankan perintah az aks enable-addons untuk mengaktifkan add-on azure-policy untuk kluster Anda:

    az aks enable-addons \
        --addons azure-policy \
        --name $AKS_CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP
    
  2. Verifikasikan bahwa pod kebijakan azure diinstal di namespace kube-system dan pod gatekeeper diinstal di namespace gatekeeper-system. Untuk melakukannya, jalankan perintah kubectl 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
    ...
    
  3. 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.

  1. Masuk ke portal Azure.

  2. Temukan layanan Azure Policy di portal Microsoft Azure. Untuk melakukannya, di bilah penelusuran di bagian atas portal, telusuri dan pilih Kebijakan.

  3. Pilih layanan Azure Policy dari daftar layanan, seperti yang ditunjukkan di sini:

    Screenshot of the general Azure portal search box with a result that shows the Azure Policy service.

    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.

  4. Di panel menu sebelah kiri, di bagian Penulisan, pilih Penugasan:

    Screenshot of the Policy service navigation panel that shows the location of the Assignments option.

  5. 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:

    Screenshot that shows the new policy assignment option.

    Panel Tetapkan kebijakan muncul.

  6. 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:

    Screenshot that shows the information captured in the Basics tab.

  7. Pilih tab Parameter untuk menentukan parameter kebijakan.

  8. 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:

    Screenshot that shows the information captured in the Parameters tab.

  9. 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:

    Screenshot that shows the information captured in the Remediation tab.

  10. 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.

  1. Buka Azure Cloud Shell dan pastikan untuk memilih Cloud Shell versi Bash.

  2. 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, jalankan code test-policy.yaml. Perintah ini akan membuka editor tanpa penjelajah file.

  3. 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
    
  4. Tekan Ctrl+S untuk menyimpan file, lalu tekan Ctrl+Q untuk menutup editor.

  5. Jalankan perintah kubectl apply untuk menerapkan konfigurasi dan menyebarkan aplikasi di costsavings 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.

  6. 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
    
  7. Tekan Ctrl+S untuk menyimpan file, lalu tekan Ctrl+Q untuk menutup editor.

  8. Jalankan perintah kubectl apply untuk menerapkan konfigurasi dan menyebarkan aplikasi di costsavings namespace:

    kubectl apply \
    --namespace costsavings \
    -f test-policy.yaml
    

    Anda akan mendapatkan output berikut:

    pod/nginx created
    
  9. 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
    
  10. Tekan Ctrl+C untuk berhenti menonton setelah Anda melihat pod berjalan.