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.

Prasyarat

  • Azure CLI versi 2.44.1 atau yang lebih baru. Jalankan az --version untuk menemukan versi, dan jalankan az 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 .

Menginstal ekstensi Azure CLI pratinjau aks

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 bendera fitur KataVMIsolationPreview

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"

Pembatasan

Berikut ini adalah batasan dengan pratinjau Pod Sandboxing ini (pratinjau):

Cara kerjanya

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:

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 runtimeClassNamekata-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.1containers[].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.

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

Gunakan perintah berikut untuk mengaktifkan Pod Sandboxing (pratinjau) 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 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
    
  2. Jalankan perintah az aks update untuk mengaktifkan sandboxing pod (pratinjau) pada kluster.

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

Menyebarkan aplikasi tepercaya

Untuk menunjukkan penyebaran aplikasi tepercaya pada kernel bersama di kluster AKS, lakukan langkah-langkah berikut.

  1. 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"]
    
  2. 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
    

Menyebarkan aplikasi yang tidak tepercaya

Untuk menunjukkan penyebaran aplikasi yang tidak tepercaya ke dalam kotak pasir pod pada kluster AKS, lakukan langkah-langkah berikut.

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

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

Memverifikasi konfigurasi Isolasi Kernel

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

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

Pembersihan

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

Langkah berikutnya

Pelajari selengkapnya tentang host Azure Dedicated untuk simpul dengan kluster AKS Anda untuk menggunakan isolasi dan kontrol perangkat keras atas peristiwa pemeliharaan platform Azure.