Gunakan perlindungan penyebaran untuk menerapkan praktik terbaik di Azure Kubernetes Service (AKS) (Pratinjau)
Artikel ini menunjukkan cara menggunakan perlindungan penyebaran untuk memberlakukan praktik terbaik pada kluster Azure Kubernetes Service (AKS).
Gambaran Umum
Sepanjang siklus hidup pengembangan, umum bagi bug, masalah, dan masalah lain untuk muncul jika penyebaran awal sumber daya Kubernetes Anda termasuk kesalahan konfigurasi. Untuk meringankan beban pengembangan Kubernetes, Azure Kubernetes Service (AKS) menawarkan perlindungan penyebaran (pratinjau). Perlindungan penyebaran memberlakukan praktik terbaik Kubernetes di kluster AKS Anda melalui kontrol Azure Policy.
Perlindungan penyebaran menawarkan dua tingkat konfigurasi:
Warning
: Menampilkan pesan peringatan di terminal kode untuk memberi tahu Anda tentang konfigurasi kluster yang tidak patuh tetapi masih memungkinkan permintaan untuk dilalui.Enforcement
: Memberlakukan konfigurasi yang sesuai dengan menolak dan memutasi penyebaran jika tidak mengikuti praktik terbaik.
Setelah Anda mengonfigurasi perlindungan penyebaran untuk 'Peringatan' atau 'Penegakan', Perlindungan penyebaran secara terprogram menilai kluster Anda pada waktu pembuatan atau pembaruan untuk kepatuhan. Perlindungan penyebaran juga menampilkan informasi kepatuhan agregat di seluruh beban kerja Anda pada tingkat per sumber daya melalui dasbor kepatuhan Azure Policy di portal Azure atau di CLI atau terminal Anda. Menjalankan beban kerja yang tidak patuh menunjukkan bahwa kluster Anda tidak mengikuti praktik terbaik dan beban kerja pada kluster Anda berisiko mengalami masalah yang disebabkan oleh konfigurasi kluster Anda.
Penting
Fitur pratinjau AKS tersedia berdasarkan layanan mandiri. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan mereka dikecualikan dari perjanjian tingkat layanan dan garansi terbatas. Pratinjau AKS sebagian dicakup oleh dukungan pelanggan berdasarkan upaya terbaik. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi. Untuk informasi lebih lanjut, lihat artikel dukungan berikut ini:
Prasyarat
Anda perlu mengaktifkan add-on Azure Policy untuk AKS. Untuk informasi selengkapnya, lihat Mengaktifkan Azure Policy pada kluster AKS Anda.
Untuk mengonfigurasi perlindungan penyebaran, Anda harus memiliki versi
2.0.0b1
atau ekstensi yang lebih baruaks-preview
. Untuk menginstal ekstensi, lihat Menginstal ekstensi CLI aks-preview. Sebaiknya perbarui Azure CLI untuk memastikan Anda memiliki versi terbaru yang terinstal.Untuk membuat dan memodifikasi konfigurasi untuk perlindungan penyebaran, Anda memerlukan langganan dengan izin berikut pada kluster AKS Anda:
- Microsoft.Authorization/policyAssignments/write
- Microsoft.Authorization/policyAssignments/read
Anda perlu mendaftarkan bendera fitur perlindungan penyebaran. Untuk mendaftarkan bendera fitur, lihat Mendaftarkan bendera fitur untuk perlindungan penyebaran.
Menginstal ekstensi CLI aks-preview
aks-preview
Instal ekstensi CLI menggunakanaz extension add
perintah .az extension add --name aks-preview
Perbarui ekstensi untuk memastikan Anda memiliki versi terbaru yang terinstal menggunakan
az extension update
perintah .az extension update --name aks-preview
Mendaftarkan bendera fitur perlindungan penyebaran
Daftarkan
SafeguardsPreview
bendera fitur menggunakanaz feature register
perintah .az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
Dibutuhkan beberapa menit agar status menampilkan Terdaftar.
Verifikasi status pendaftaran menggunakan
az feature show
perintah .az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
Saat status mencerminkan Terdaftar, refresh pendaftaran penyedia sumber daya Microsoft.ContainerService menggunakan
az provider register
perintah .az provider register --namespace Microsoft.ContainerService
Kebijakan perlindungan penyebaran
Catatan
Kebijakan ReadOnlyRootFilesystem
dan RootfilesystemInitContainers
saat ini hanya tersedia di Linux.
Tabel berikut mencantumkan kebijakan yang menjadi aktif dan sumber daya Kubernetes yang mereka targetkan saat Anda mengaktifkan perlindungan penyebaran. Anda dapat melihat perlindungan penyebaran yang saat ini tersedia di portal Azure sebagai definisi Azure Policy atau di definisi bawaan Azure Policy untuk Azure Kubernetes Service. Niat di balik koleksi ini adalah untuk membuat daftar umum dan umum praktik terbaik yang berlaku untuk sebagian besar pengguna dan kasus penggunaan.
Kebijakan perlindungan penyebaran | Sumber daya Kubernetes yang ditargetkan | Hasil mutasi jika tersedia |
---|---|---|
[Pratinjau]: Tidak dapat mengedit simpul individual | Simpul | T/A |
Batas CPU kontainer kluster Kubernetes dan sumber daya memori tidak boleh melebihi batas yang ditentukan | Pod | Mengatur batas sumber daya CPU ke 500m jika tidak diatur dan mengatur batas memori ke 500Mi jika tidak ada jalur |
[Pratinjau]: Harus Memiliki Seperangkat Aturan Anti Afinitas | Penyebaran, StatefulSet, ReplicationController, ReplicaSet | T/A |
[Pratinjau]: Tidak Ada Label Spesifik AKS | Penyebaran, StatefulSet, Replicaset | T/A |
Kontainer kluster Kube hanya boleh menggunakan gambar yang diizinkan | Pod | T/A |
[Pratinjau]: Taint Kumpulan Sistem Terpesan | Simpul | CriticalAddonsOnly Menghapus taint dari kumpulan simpul pengguna jika tidak diatur. AKS menggunakan CriticalAddonsOnly taint untuk menjauhkan pod pelanggan dari kumpulan sistem. Konfigurasi ini memastikan pemisahan yang jelas antara komponen AKS dan pod pelanggan dan mencegah pengeluaran pod pelanggan yang tidak mentolerir CriticalAddonsOnly taint. |
Pastikan kontainer kluster memiliki probe kesiapan atau keaktifan yang dikonfigurasi | Pod | T/A |
Kluster Kubernetes harus menggunakan StorageClass driver Container Storage Interface (CSI) | StorageClass | T/A |
[Pratinjau]: Kontainer kluster Kube hanya boleh menarik gambar ketika rahasia penarikan gambar ada | Pod | T/A |
[Pratinjau]: Kluster Kubernetes harus menerapkan Anggaran Gangguan Pod yang akurat | Penyebaran, ReplicaSet, StatefulSet | maxUnavailable Mengatur dalam sumber daya PodDisruptionBudget ke 1. |
[Pratinjau]: Layanan kluster Kube harus menggunakan pemilih unik | Layanan | T/A |
[Pratinjau]: ReadOnlyRootFilesystem dalam spesifikasi Pod diatur ke true |
Pod | readOnlyRootFilesystem Mengatur dalam spesifikasi Pod ke true jika tidak diatur. Konfigurasi ini mencegah kontainer menulis ke sistem file akar. |
[Pratinjau]: RootfilesystemInitContainers dalam spesifikasi Pod diatur ke true |
Pod | rootFilesystemInitContainers Mengatur dalam spesifikasi Pod ke true jika tidak diatur. |
[Pratinjau]: Gambar kontainer kluster Kube tidak boleh menyertakan tag gambar terbaru | Penyebaran, StatefulSet, ReplicationController, ReplicaSet | T/A |
[Pratinjau]: Gambar kontainer kluster Kube harus menyertakan hook preStop | Penyebaran, StatefulSet, ReplicationController, ReplicaSet | T/A |
Jika Anda ingin mengirimkan ide atau permintaan perlindungan penyebaran, buka masalah di repositori GitHub AKS dan tambahkan [deployment safeguards request]
ke awal judul.
Mengaktifkan perlindungan penyebaran
Catatan
Jika Anda mengaktifkan Azure Policy untuk pertama kalinya menggunakan perlindungan penyebaran, Anda mungkin perlu menunggu hingga 20 menit agar Azure Policy berlaku.
Menggunakan tingkat perlindungan Enforcement
penyebaran berarti Anda memilih untuk penyebaran yang diblokir dan dimutasi. Harap pertimbangkan bagaimana kebijakan ini dapat bekerja dengan kluster AKS Anda sebelum mengaktifkan Enforcement
.
Mengaktifkan perlindungan penyebaran pada kluster baru
Aktifkan perlindungan penyebaran pada kluster baru menggunakan az aks create
perintah dengan --safeguards-level
bendera dan --safeguards-version
.
Jika Anda ingin menerima peringatan ketidakpatuh, atur ke --safeguards-level
Warning
. Jika Anda ingin menolak atau membisukan semua penyebaran yang tidak patuh, atur ke Enforcement
. Untuk menerima peringatan, atur ke --safeguards-level
"Peringatan". Untuk menolak atau memutasi semua penyebaran yang tidak mematuhi perlindungan penyebaran, atur --safeguards-level
ke "Penegakan". Untuk mengatur versi perlindungan penyebaran, gunakan --safeguards-version
bendera . Saat ini, V2.0.0 adalah versi terbaru dari perlindungan penyebaran.
az aks create \
--name myAKSCluster \
--resource-group myResourceGroup \
--enable-addons azure-policy \
--safeguards-level Warning \
--safeguards-version v2.0.0 \
--generate-ssh-keys
Mengaktifkan perlindungan penyebaran pada kluster yang ada
Aktifkan perlindungan penyebaran pada kluster yang ada yang mengaktifkan add-on Azure Policy menggunakan az aks update
perintah dengan --safeguards-level
bendera dan --safeguards-version
. Jika Anda ingin menerima peringatan ketidakpatuh, atur ke --safeguards-level
Warning
. Jika Anda ingin menolak atau membisukan semua penyebaran yang tidak patuh, atur ke Enforcement
.
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement --safeguards-version v2.0.0
Jika Anda ingin memperbarui tingkat perlindungan penyebaran dari kluster yang ada, gunakan az aks update
perintah dengan bendera yang --safeguards-level
diatur ke Warning
atau Enforcement
.
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement
Mengecualikan namespace
Anda juga dapat mengecualikan namespace tertentu dari perlindungan penyebaran. Saat Anda mengecualikan namespace layanan, aktivitas di namespace layanan tersebut tidak terpengaruh oleh penyebaran akan melindungi peringatan atau penerapan.
Misalnya, untuk mengecualikan namespace ns1
layanan dan ns2
, gunakan daftar namespace yang dipisahkan koma dengan --safeguards-excluded-ns
bendera, seperti yang ditunjukkan dalam contoh berikut:
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Warning --safeguards-version v2.0.0 --safeguards-excluded-ns ns1,ns2
Memperbarui versi perlindungan penyebaran Anda
Catatan
v2.0.0 adalah versi terbaru perlindungan penyebaran.
Perbarui versi perlindungan penyebaran Anda menggunakan az aks update
perintah dengan bendera yang --safeguards-version
diatur ke versi baru. Contoh berikut memperbarui kluster yang ada untuk menggunakan versi 2.0.0:
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-version v2.0.0
Memverifikasi kepatuhan di seluruh kluster
Setelah menyebarkan manifes Kubernetes, Anda akan melihat peringatan atau pesan penolakan potensial di CLI atau terminal jika kluster tidak sesuai dengan perlindungan penyebaran, seperti yang ditunjukkan dalam contoh berikut:
Peringatan
$ kubectl apply -f pod.yml
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
Warning: [azurepolicy-k8sazurev3containerlimits-a8754961dbd4c1d8b49d] container <my-container> has no resource limits
Warning: [azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
pod/my-pod created
Penegakan
Dengan mutasi perlindungan penyebaran, tingkat tersebut Enforcement
akan memutasi sumber daya Kubernetes Anda jika berlaku. Namun, sumber daya Kubernetes Anda masih perlu melewati semua perlindungan agar berhasil disebarkan. Jika ada kebijakan perlindungan yang gagal, sumber daya Anda ditolak dan tidak akan disebarkan.
$ kubectl apply -f pod.yml
Error from server (Forbidden): error when creating ".\pod.yml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerallowedimag-1ff6d14b2f8da22019d7] Container image my-image for container my-container has not been allowed.
[azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
[azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
Jika sumber daya Kubernetes Anda mematuhi perlindungan mutasi yang berlaku dan memenuhi semua persyaratan perlindungan lainnya, sumber daya tersebut akan berhasil disebarkan, seperti yang ditunjukkan pada contoh berikut:
$ kubectl apply -f pod.yml
pod/my-pod created
Memverifikasi kepatuhan di seluruh kluster menggunakan dasbor Azure Policy
Untuk memverifikasi bahwa perlindungan penyebaran telah diterapkan dan untuk memeriksa kepatuhan kluster Anda, navigasikan ke halaman portal Azure untuk kluster Anda dan pilih Kebijakan, lalu pilih buka Azure Policy.
Dari daftar kebijakan dan inisiatif, pilih inisiatif yang terkait dengan perlindungan penyebaran. Anda melihat dasbor yang menunjukkan status kepatuhan di seluruh kluster AKS Anda.
Catatan
Untuk menilai kepatuhan dengan benar di seluruh kluster AKS Anda, inisiatif Azure Policy harus dilingkupkan ke grup sumber daya kluster Anda.
Menonaktifkan perlindungan penyebaran
Nonaktifkan perlindungan penyebaran pada kluster Anda menggunakan az aks update
perintah dan atur ke --safeguards-level
Off
.
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Off
--
FAQ
Saya mengaktifkan perlindungan penyebaran dengan Azure Policy untuk pertama kalinya. Mengapa saya tidak melihat peringatan? Mengapa pod saya tidak ditolak?
Azure Policy dapat memakan waktu hingga 35 menit untuk disinkronkan dengan kluster Anda setelah diaktifkan untuk pertama kalinya.
Aku baru saja beralih dari Peringatan ke Penegakan. Apakah ini akan segera berlaku?
Saat mengalihkan tingkat perlindungan penyebaran, Anda mungkin perlu menunggu hingga 15 menit agar tingkat baru berlaku.
Dapatkah saya membuat mutasi saya sendiri?
Tidak. Jika Anda memiliki ide untuk perlindungan, buka masalah di repositori GitHub AKS dan tambahkan [deployment safeguards request]
ke awal judul.
Dapatkah saya memilih dan memilih mutasi mana yang saya inginkan di Penegakan?
Tidak. Perlindungan penyebaran adalah semua atau tidak sama sekali. Setelah Anda mengaktifkan Peringatan atau Penegakan, semua perlindungan akan aktif.
Mengapa sumber daya penyebaran saya diterima meskipun tidak mengikuti praktik terbaik?
Perlindungan penyebaran memberlakukan standar praktik terbaik melalui kontrol Azure Policy dan memiliki kebijakan yang memvalidasi terhadap sumber daya Kubernetes. Untuk mengevaluasi dan menerapkan komponen kluster, Azure Policy memperluas Gatekeeper. Penegakan Gatekeeper juga saat ini beroperasi dalam modelfail-open
. Karena tidak ada jaminan bahwa Gatekeeper akan merespons panggilan jaringan kami, kami memastikan bahwa dalam hal ini, validasi dilewati sehingga penolakan tidak memblokir penyebaran Anda.
Untuk mempelajari selengkapnya, lihat validasi beban kerja di Gatekeeper.
Langkah berikutnya
- Pelajari selengkapnya tentang praktik terbaik untuk mengoperasikan kluster AKS.
Azure Kubernetes Service