Bagikan melalui


Pod Sandboxing 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. Pod Sandboxing menyediakan batas isolasi antara aplikasi kontainer dan kernel bersama dan sumber daya komputasi host kontainer seperti CPU, memori, dan jaringan. Aplikasi dijalankan dalam mesin virtual pod (VM) yang terisolasi dan ringan. 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.

Prerequisites

  • Azure CLI versi 2.80.0 atau yang lebih baru. Jalankan az --version untuk menemukan versi Azure CLI Anda, dan jalankan az upgrade untuk meningkatkan. Untuk detail selengkapnya, lihat langkah-langkah di Menginstal Azure CLI.

  • AKS mendukung Pod Sandboxing pada Kubernetes versi 1.27.0 dan yang lebih tinggi.

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

Limitations

Berikut ini adalah batasan yang berlaku untuk Pod Sandboxing:

  • Kontainer Kata mungkin tidak mencapai batas performa IOPS yang dapat dijangkau kontainer tradisional di Azure Files dan SSD lokal berkinerja tinggi.

  • Microsoft Defender for Containers tidak mendukung penilaian pod runtime Kata.

  • Akses jaringan host Kata tidak didukung. Tidak dimungkinkan untuk langsung mengakses konfigurasi jaringan host dari dalam VM.

  • Alokasi CPU dan memori dengan Pod Sandboxing memiliki pertimbangan lain dibandingkan runc. Referensikan bagian manajemen memori di halaman pertimbangan.

Cara kerjanya

Pod Sandboxing pada AKS dibangun di atas proyek Kata Containers sumber terbuka. Kontainer Kata yang berjalan pada host kontainer Azure Linux untuk AKS menyediakan isolasi berbasis VM dan kernel terpisah untuk setiap pod. Pod Sandboxing memungkinkan pengguna untuk 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 utama berikut:

Menyebarkan Pod Sandboxing menggunakan Kata Containers mirip dengan alur kerja standar containerd untuk menyebarkan kontainer. Kluster dengan fitur Pod Sandboxing yang diaktifkan dilengkapi dengan kelas runtime khusus yang dapat dirujuk dalam manifes pod (runtimeClassName: kata-vm-isolation).

Untuk menggunakan fitur ini dengan pod, satu-satunya perbedaan adalah menambahkan runtimeClassName, kata-vm-isolation ke spesifikasi pod. Ketika pod menggunakan kata-vm-isolation runtimeClass, hypervisor mengaktifkan mesin virtual ringan dengan kernelnya sendiri, sehingga beban kerja dapat beroperasi.

Menyebarkan kluster baru

Lakukan langkah-langkah berikut untuk menyebarkan kluster Azure Linux AKS menggunakan Azure CLI.

  1. Buat kluster AKS menggunakan perintah az aks create dan tentukan parameter berikut:

    • --workload-runtime: Tentukan KataVmIsolation 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.
    • --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 KataVmIsolation \
        --node-vm-size Standard_D4s_v3 \
        --node-count 3 \
        --generate-ssh-keys
    
  2. 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
    
  3. Cantumkan semua Pod di semua namespace menggunakan perintah kubectl get pods .

    kubectl get pods --all-namespaces
    

Menyebarkan ke kluster yang ada

Untuk menggunakan fitur ini dengan kluster AKS yang ada, persyaratan berikut harus dipenuhi:

  • Verifikasi bahwa kluster menjalankan Kubernetes versi 1.27.0 dan yang lebih tinggi.

Gunakan perintah berikut untuk mengaktifkan Pod Sandboxing dengan membuat kumpulan simpul untuk menghostingnya.

  1. 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 KataVmIsolation 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.
      • --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 KataVmIsolation --node-vm-size Standard_D4s_v3
    
  2. Jalankan perintah az aks update untuk mengaktifkan sandboxing pod pada kluster.

    az aks update --name myAKSCluster --resource-group myResourceGroup
    

Menyebarkan aplikasi Anda

Dengan Pod Sandboxing, Anda dapat menyebarkan campuran pod "normal" yang tidak menggunakan runtime Kata, bersama dengan pod Kata yang memanfaatkan runtime tersebut. Perbedaan utama antara keduanya, ketika menyebarkan, terletak pada fakta bahwa pod Kata memiliki garis runtimeClassName: kata-vm-isolation dalam spesifikasinya.

Menyebarkan aplikasi dengan runtime Kata

Untuk menyebarkan pod dengan runtime Kata pada kluster AKS Anda, lakukan langkah-langkah berikut.

  1. Buat file bernama kata-app.yaml untuk menjelaskan pod kata Anda, lalu tempel manifes berikut.

    kind: Pod
    apiVersion: v1
    metadata:
      name: isolated-pod
    spec:
      runtimeClassName: kata-vm-isolation
      containers:
      - name: kata
        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-vm-isolation.

  2. Sebarkan pod Kubernetes dengan menjalankan perintah kubectl apply dan tentukan file kata-app.yaml Anda:

    kubectl apply -f kata-app.yaml
    

    Hasil dari output perintah menyerupai contoh berikut:

    pod/isolated-pod created
    

(Opsional) Memverifikasi konfigurasi Isolasi Kernel

Jika Anda ingin memverifikasi perbedaan antara kernel Pod Kata dan non-Kata, Anda dapat menjalankan beban kerja lain yang tidak menggunakan runtime Kata.

kind: Pod
apiVersion: v1
metadata:
  name: normal-pod
spec:
  containers:
  - name: non-kata
    image: mcr.microsoft.com/aks/fundamental/base-ubuntu:v0.0.11
    command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
  1. Untuk mengakses kontainer di dalam kluster AKS, mulai sesi shell dengan menjalankan perintah kubectl exec . Dalam contoh ini, Anda mengakses kontainer di dalam kata-pod.

    kubectl exec -it isolated-pod -- /bin/sh
    

    Kubectl terhubung ke kluster Anda, menjalankan /bin/sh di dalam kontainer pertama dari isolated-pod, dan meneruskan aliran input dan output terminal Anda ke proses yang ada di kontainer. Anda juga dapat memulai sesi shell ke kontainer yang menghosting pod non-Kata untuk melihat perbedaannya.

  2. Setelah memulai sesi shell ke kontainer dari kata-pod, Anda dapat menjalankan perintah untuk memverifikasi bahwa kontainer kata berjalan dalam sandbox pod. Perhatikan bahwa itu memiliki versi kernel yang berbeda dibandingkan dengan kontainer non-Kata di luar sandbox.

    Untuk melihat versi kernel, jalankan perintah berikut:

    uname -r
    

    Contoh berikut menyerupai keluaran dari kernel sandbox pod:

    [user]/# uname -r
    6.6.96.mshv1
    
  3. Mulai sesi shell ke kontainer dari normal-pod untuk memverifikasi output kernel:

    kubectl exec -it normal-pod -- /bin/bash
    

    Untuk melihat versi kernel, jalankan perintah berikut:

    uname -r
    

    Contoh berikut menyerupai output dari VM yang menjalankan normal-pod, yang memiliki kernel yang berbeda dari pod Kata yang berjalan dalam sandbox pod.

    6.6.100.mshv1-1.azl3
    

Cleanup

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 menyebarkan Pod Sandboxing pada kluster yang ada, Anda dapat menghapus pod menggunakan perintah kubectl delete pod .

kubectl get pods
kubectl delete pod <kata-pod-name>

Langkah selanjutnya

  • Pelajari lebih lanjut tentang Azure Dedicated hosts untuk memberikan isolasi perangkat keras dan kontrol atas peristiwa pemeliharaan platform Azure pada simpul dalam kluster AKS Anda.
  • Untuk lebih menjelajahi isolasi Pod Sandboxing dan mencoba skenario beban kerja, coba lab Pod Sandboxing.