Pod Sandboxing (pratinjau) dengan Azure Kubernetes Service (AKS)
Untuk membantu mengamankan dan melindungi beban kerja kontainer Anda dari kode yang tidak tepercaya atau berpotensi berbahaya, AKS sekarang menyertakan mekanisme yang disebut Pod Sandboxing (pratinjau). Pod Sandboxing menyediakan batas isolasi antara aplikasi kontainer, dan kernel bersama dan sumber daya komputasi host kontainer. Misalnya CPU, memori, dan jaringan. Pod Sandboxing melengkapi langkah-langkah keamanan atau kontrol perlindungan data lainnya dengan arsitektur Anda secara keseluruhan untuk membantu Anda memenuhi persyaratan kepatuhan peraturan, industri, atau tata kelola untuk mengamankan informasi sensitif.
Artikel ini membantu Anda memahami fitur baru ini, dan cara menerapkannya.
Azure CLI versi 2.44.1 atau yang lebih baru. Jalankan
az --version
untuk menemukan versi, dan jalankanaz upgrade
untuk meningkatkan versi. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.aks-preview
Ekstensi Azure CLI versi 0.5.123 atau yang lebih baru.Daftarkan
KataVMIsolationPreview
fitur di langganan Azure Anda.AKS mendukung Pod Sandboxing (pratinjau) pada versi 1.24.0 dan yang lebih tinggi dengan semua plugin jaringan AKS.
Untuk mengelola kluster Kubernetes, gunakan kubectl klien baris perintah Kube. Azure Cloud Shell dilengkapi dengan
kubectl
. Anda dapat menginstal kubectl secara lokal menggunakan perintah az aks install-cli .
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:
Untuk menginstal ekstensi aks-preview, jalankan perintah berikut:
az extension add --name aks-preview
Jalankan perintah berikut untuk memperbarui ke versi terbaru ekstensi yang dirilis:
az extension update --name aks-preview
Daftarkan KataVMIsolationPreview
bendera fitur dengan menggunakan perintah daftar fitur az, seperti yang ditunjukkan dalam contoh berikut:
az feature register --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"
Dibutuhkan beberapa menit agar status menampilkan Terdaftar. Verifikasi status pendaftaran dengan menggunakan perintah az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"
Saat status mencerminkan Terdaftar, refresh pendaftaran penyedia sumber daya Microsoft.ContainerService dengan menggunakan perintah az provider register :
az provider register --namespace "Microsoft.ContainerService"
Berikut ini adalah batasan dengan pratinjau Pod Sandboxing ini (pratinjau):
Kontainer Kata mungkin tidak mencapai batas performa IOPS yang dapat dijangkau kontainer tradisional di Azure Files dan SSD lokal berkinerja tinggi.
Pertahanan Microsoft untuk Kontainer tidak mendukung penilaian pod runtime Kata.
Kata host-network tidak didukung.
Untuk mencapai fungsionalitas ini pada AKS, Kontainer Kata yang berjalan pada host kontainer Azure Linux untuk tumpukan AKS memberikan isolasi yang diberlakukan perangkat keras. Pod Sandboxing memperluas manfaat isolasi perangkat keras seperti kernel terpisah untuk setiap Pod Kata. Isolasi perangkat keras mengalokasikan sumber daya untuk setiap pod dan tidak membagikannya dengan Kontainer Kata atau kontainer namespace lainnya yang berjalan pada host yang sama.
Arsitektur solusi didasarkan pada komponen berikut:
- Host kontainer Azure Linux untuk AKS
- Microsoft Hyper-V Hypervisor
- Kernel Linux Dom0 yang disetel Azure
- Cloud-Hypervisor Virtual Machine Monitor (VMM) sumber terbuka
- Integrasi dengan kerangka kerja Kata Container
Menyebarkan Pod Sandboxing menggunakan Kata Containers mirip dengan alur kerja kontainer standar untuk menyebarkan kontainer. Penyebaran ini mencakup opsi kata-runtime yang dapat Anda tentukan dalam templat pod.
Untuk menggunakan fitur ini dengan pod, satu-satunya perbedaan adalah menambahkan runtimeClassName kata-mshv-vm-isolation ke spesifikasi pod.
Ketika pod menggunakan runtimeclass kata-mshv-vm-isolation , ia membuat VM untuk berfungsi sebagai kotak pasir pod untuk menghosting kontainer. Memori default VM adalah 2 GB dan CPU default adalah satu inti jika manifes sumber daya Kontainer (containers[].resources.limits
) tidak menentukan batas untuk CPU dan memori. Saat Anda menentukan batas untuk CPU atau memori dalam manifes sumber daya kontainer, VM memiliki argumen untuk menggunakan satu + xCPU, dan containers[].resources.limits.memory
dengan 2
argumen untuk menentukan 2 GB + yMemory.1
containers[].resources.limits.cpu
Kontainer hanya dapat menggunakan CPU dan memori hingga batas kontainer. containers[].resources.requests
diabaikan dalam pratinjau ini saat kami bekerja untuk mengurangi overhead CPU dan memori.
Lakukan langkah-langkah berikut untuk menyebarkan kluster Azure Linux AKS menggunakan Azure CLI.
Buat kluster AKS menggunakan perintah az aks create dan tentukan parameter berikut:
- --workload-runtime: Tentukan KataMshvVmIsolation untuk mengaktifkan fitur Pod Sandboxing pada kumpulan simpul. Dengan parameter ini, parameter lain ini harus memenuhi persyaratan berikut. Jika tidak, perintah gagal dan melaporkan masalah dengan parameter yang sesuai.
- --os-sku: AzureLinux. Hanya os-sku Linux Azure yang mendukung fitur ini dalam rilis pratinjau ini.
- --node-vm-size: Ukuran Azure VM apa pun yang merupakan VM generasi 2 dan mendukung pekerjaan virtualisasi berlapis. Misalnya, VM Dsv3 .
Contoh berikut membuat kluster bernama myAKSCluster dengan satu node di myResourceGroup:
az aks create --name myAKSCluster \ --resource-group myResourceGroup \ --os-sku AzureLinux \ --workload-runtime KataMshvVmIsolation \ --node-vm-size Standard_D4s_v3 \ --node-count 1 \ --generate-ssh-keys
Jalankan perintah berikut untuk mendapatkan kredensial akses untuk kluster Kubernetes. Gunakan perintah az aks get-credentials dan ganti nilai untuk nama kluster dan nama grup sumber daya.
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Cantumkan semua Pod di semua namespace menggunakan perintah kubectl get pods .
kubectl get pods --all-namespaces
Untuk menggunakan fitur ini dengan kluster AKS yang ada, persyaratan berikut harus dipenuhi:
- Ikuti langkah-langkah untuk mendaftarkan bendera fitur KataVMIsolationPreview .
- Verifikasi kluster menjalankan Kubernetes versi 1.24.0 dan yang lebih tinggi.
Gunakan perintah berikut untuk mengaktifkan Pod Sandboxing (pratinjau) dengan membuat kumpulan simpul untuk menghostingnya.
Tambahkan kumpulan simpul ke kluster AKS Anda menggunakan perintah az aks nodepool add . Tentukan parameter berikut:
- --resource-group: Masukkan nama grup sumber daya yang ada untuk membuat kluster AKS.
- --cluster-name: Masukkan nama unik untuk kluster AKS, seperti myAKSCluster.
- --name: Masukkan nama unik untuk kumpulan simpul kluster Anda, seperti nodepool2.
- --workload-runtime: Tentukan KataMshvVmIsolation untuk mengaktifkan fitur Pod Sandboxing pada kumpulan simpul. Seiring dengan
--workload-runtime
parameter , parameter lain ini harus memenuhi persyaratan berikut. Jika tidak, perintah gagal dan melaporkan masalah dengan parameter yang sesuai.- --os-sku: AzureLinux. Hanya os-sku Linux Azure yang mendukung fitur ini dalam rilis pratinjau.
- --node-vm-size: Ukuran Azure VM apa pun yang merupakan VM generasi 2 dan mendukung pekerjaan virtualisasi berlapis. Misalnya, VM Dsv3 .
Contoh berikut menambahkan kumpulan simpul ke myAKSCluster dengan satu node di nodepool2 di myResourceGroup:
az aks nodepool add --cluster-name myAKSCluster --resource-group myResourceGroup --name nodepool2 --os-sku AzureLinux --workload-runtime KataMshvVmIsolation --node-vm-size Standard_D4s_v3
Jalankan perintah az aks update untuk mengaktifkan sandboxing pod (pratinjau) pada kluster.
az aks update --name myAKSCluster --resource-group myResourceGroup
Untuk menunjukkan penyebaran aplikasi tepercaya pada kernel bersama di kluster AKS, lakukan langkah-langkah berikut.
Buat file bernama trusted-app.yaml untuk menjelaskan pod tepercaya, lalu tempelkan manifes berikut.
kind: Pod apiVersion: v1 metadata: name: trusted spec: containers: - name: trusted image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
Sebarkan pod Kubernetes dengan menjalankan perintah kubectl apply dan tentukan file trusted-app.yaml Anda:
kubectl apply -f trusted-app.yaml
Output perintah menyerupai contoh berikut:
pod/trusted created
Untuk menunjukkan penyebaran aplikasi yang tidak tepercaya ke dalam kotak pasir pod pada kluster AKS, lakukan langkah-langkah berikut.
Buat file bernama untrusted-app.yaml untuk menjelaskan pod yang tidak tepercaya, lalu tempel manifes berikut.
kind: Pod apiVersion: v1 metadata: name: untrusted spec: runtimeClassName: kata-mshv-vm-isolation containers: - name: untrusted image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11 command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
Nilai untuk runtimeClassNameSpec adalah
kata-mhsv-vm-isolation
.Sebarkan pod Kubernetes dengan menjalankan perintah kubectl apply dan tentukan file untrusted-app.yaml Anda:
kubectl apply -f untrusted-app.yaml
Output perintah menyerupai contoh berikut:
pod/untrusted created
Untuk mengakses kontainer di dalam kluster AKS, mulai sesi shell dengan menjalankan perintah kubectl exec . Dalam contoh ini, Anda mengakses kontainer di dalam pod yang tidak tepercaya .
kubectl exec -it untrusted -- /bin/bash
Kubectl terhubung ke kluster Anda, berjalan
/bin/sh
di dalam kontainer pertama dalam pod yang tidak tepercaya, dan meneruskan aliran input dan output terminal Anda ke proses kontainer. Anda juga dapat memulai sesi shell ke kontainer yang menghosting pod tepercaya .Setelah memulai sesi shell ke kontainer pod yang tidak tepercaya , Anda dapat menjalankan perintah untuk memverifikasi bahwa kontainer yang tidak tepercaya berjalan di kotak pasir pod. Anda akan melihat bahwa ia memiliki versi kernel yang berbeda dibandingkan dengan kontainer tepercaya di luar kotak pasir.
Untuk melihat versi kernel, jalankan perintah berikut:
uname -r
Contoh berikut menyerupai output dari kernel kotak pasir pod:
root@untrusted:/# uname -r 5.15.48.1-8.cm2
Mulai sesi shell ke kontainer pod tepercaya untuk memverifikasi output kernel:
kubectl exec -it trusted -- /bin/bash
Untuk melihat versi kernel, jalankan perintah berikut:
uname -r
Contoh berikut menyerupai output dari VM yang menjalankan pod tepercaya , yang merupakan kernel yang berbeda dari pod yang tidak tepercaya yang berjalan dalam kotak pasir pod:
5.15.80.mshv2-hvl1.m2
Setelah selesai mengevaluasi fitur ini, untuk menghindari biaya Azure, bersihkan sumber daya yang tidak perlu. Jika Anda menyebarkan kluster baru sebagai bagian dari evaluasi atau pengujian, Anda dapat menghapus kluster menggunakan perintah az aks delete .
az aks delete --resource-group myResourceGroup --name myAKSCluster
Jika Anda mengaktifkan Pod Sandboxing (pratinjau) pada kluster yang ada, Anda dapat menghapus pod menggunakan perintah kubectl delete pod .
kubectl delete pod pod-name
Pelajari selengkapnya tentang host Azure Dedicated untuk simpul dengan kluster AKS Anda untuk menggunakan isolasi dan kontrol perangkat keras atas peristiwa pemeliharaan platform Azure.
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: