Menerapkan Standar Keamanan Pod di Tingkat Namespace
Catatan
Tutorial ini hanya berlaku untuk klaster baru.Pod Security Admission adalah pengendali penerimaan (admission controller) yang menerapkan
Standar Keamanan Pod
saat pod dibuat. Fitur ini telah mencapai status GA di v1.25.
Dalam tutorial ini, Anda akan menerapkan Standar Keamanan Pod baseline
,
satu namespace pada satu waktu.
Anda juga dapat menerapkan Standar Keamanan Pod ke beberapa namespace sekaligus di tingkat klaster. Untuk instruksi, lihat Menerapkan Standar Keamanan Pod di tingkat klaster.
Sebelum kamu memulai
Pasang alat berikut di workstation Anda:
Membuat klaster
Buat klaster
kind
sebagai berikut:kind create cluster --name psa-ns-level
Outputnya mirip dengan ini:
Membuat klaster "psa-ns-level" ... ✓ Memastikan gambar node (kindest/node:v1.32.0) 🖼 ✓ Menyiapkan node 📦 ✓ Menulis konfigurasi 📜 ✓ Memulai control-plane 🕹️ ✓ Memasang CNI 🔌 ✓ Memasang StorageClass 💾 Atur konteks kubectl ke "kind-psa-ns-level" Anda sekarang dapat menggunakan klaster Anda dengan: kubectl cluster-info --context kind-psa-ns-level Tidak yakin apa yang harus dilakukan selanjutnya? 😅 Lihat https://kind.sigs.k8s.io/docs/user/quick-start/
Atur konteks kubectl ke klaster baru:
kubectl cluster-info --context kind-psa-ns-level
Outputnya mirip dengan ini:
Control plane Kubernetes berjalan di https://127.0.0.1:50996 CoreDNS berjalan di https://127.0.0.1:50996/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy Untuk debug dan diagnosis masalah klaster lebih lanjut, gunakan 'kubectl cluster-info dump'.
Membuat namespace
Buat namespace baru bernama example
:
kubectl create ns example
Outputnya mirip dengan ini:
namespace/example created
Mengaktifkan pemeriksaan Standar Keamanan Pod untuk namespace tersebut
Aktifkan Standar Keamanan Pod pada namespace ini menggunakan label yang didukung oleh Pod Security Admission bawaan. Dalam langkah ini Anda akan mengkonfigurasi pemeriksaan untuk memberikan peringatan pada Pod yang tidak memenuhi versi terbaru dari standar keamanan pod baseline.
kubectl label --overwrite ns example \ pod-security.kubernetes.io/warn=baseline \ pod-security.kubernetes.io/warn-version=latest
Anda dapat mengonfigurasi beberapa pemeriksaan standar keamanan pod pada namespace mana pun, menggunakan label. Perintah berikut akan
enforce
Standar Keamanan Podbaseline
, tetapiwarn
danaudit
untuk Standar Keamanan Podrestricted
sesuai dengan versi terbaru (nilai default)kubectl label --overwrite ns example \ pod-security.kubernetes.io/enforce=baseline \ pod-security.kubernetes.io/enforce-version=latest \ pod-security.kubernetes.io/warn=restricted \ pod-security.kubernetes.io/warn-version=latest \ pod-security.kubernetes.io/audit=restricted \ pod-security.kubernetes.io/audit-version=latest
Memverifikasi penerapan Standar Keamanan Pod
Buat Pod baseline di namespace
example
:kubectl apply -n example -f https://k8s.io/examples/security/example-baseline-pod.yaml
Pod berhasil dibuat; outputnya termasuk peringatan. Sebagai contoh:
Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false (container "nginx" must set securityContext.allowPrivilegeEscalation=false), unrestricted capabilities (container "nginx" must set securityContext.capabilities.drop=["ALL"]), runAsNonRoot != true (pod or container "nginx" must set securityContext.runAsNonRoot=true), seccompProfile (pod or container "nginx" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost") pod/nginx created
Buat Pod baseline di namespace
default
:kubectl apply -n default -f https://k8s.io/examples/security/example-baseline-pod.yaml
Outputnya mirip dengan ini:
pod/nginx created
Pengaturan penerapan dan peringatan Standar Keamanan Pod hanya diterapkan
ke namespace example
. Anda dapat membuat Pod yang sama di namespace default
tanpa peringatan.
Menghapus
Sekarang hapus klaster yang Anda buat di atas dengan menjalankan perintah berikut:
kind delete cluster --name psa-ns-level
Selanjutnya
Jalankan skrip shell untuk melakukan semua langkah sebelumnya sekaligus.
- Membuat klaster kind
- Membuat namespace baru
- Menerapkan Standar Keamanan Pod
baseline
dalam modeenforce
sambil menerapkan Standar Keamanan Podrestricted
juga dalam modewarn
danaudit
. - Membuat pod baru dengan standar keamanan pod berikut diterapkan