Azure Kubernetes Service (AKS) ile Pod Korumalı Alanı (önizleme)

Kapsayıcı iş yüklerinizi güvenilmeyen veya kötü amaçlı olabilecek kodlardan korumaya yardımcı olmak için AKS artık Pod Korumalı Alanı (önizleme) adlı bir mekanizma içeriyor. Pod Korumalı Alanı, kapsayıcı uygulaması ile kapsayıcı konağın paylaşılan çekirdek ve işlem kaynakları arasında bir yalıtım sınırı sağlar. Örneğin CPU, bellek ve ağ. Pod Korumalı Alanı, hassas bilgilerin güvenliğini sağlamaya yönelik mevzuat, sektör veya idare uyumluluğu gereksinimlerini karşılamanıza yardımcı olmak için diğer güvenlik önlemlerini veya veri koruma denetimlerini genel mimarinizle tamamlar.

Bu makale, bu yeni özelliği anlamanıza ve nasıl uygulayabileceğinize yardımcı olur.

Önkoşullar

  • Azure CLI sürüm 2.44.1 veya üzeri. Sürümü bulmak için komutunu az --version çalıştırın ve sürümü yükseltmek için komutunu çalıştırın az upgrade . Yüklemeniz veya yükseltmeniz gerekirse, bkz. Azure CLI yükleme.

  • aks-preview Azure CLI uzantısı sürüm 0.5.123 veya üzeri.

  • KataVMIsolationPreview Özelliği Azure aboneliğinize kaydedin.

  • AKS, tüm AKS ağ eklentileriyle 1.24.0 ve üzeri sürümlerde Pod Korumalı Alanını (önizleme) destekler.

  • Kubernetes kümesini yönetmek için Kubernetes komut satırı istemcisi kubectl'yi kullanın. Azure Cloud Shell ile birlikte kubectlgelir. az aks install-cli komutunu kullanarak kubectl'yi yerel olarak yükleyebilirsiniz.

aks-preview Azure CLI uzantısını yükleme

Önemli

AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "kullanılabilir" olarak sağlanır ve hizmet düzeyi sözleşmelerinin ve sınırlı garantinin dışında tutulur. AKS önizlemeleri, müşteri desteği tarafından kısmen en iyi çaba temelinde ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:

aks-preview uzantısını yüklemek için aşağıdaki komutu çalıştırın:

az extension add --name aks-preview

Yayımlanan uzantının en son sürümüne güncelleştirmek için aşağıdaki komutu çalıştırın:

az extension update --name aks-preview

KataVMIsolationPreview özellik bayrağını kaydetme

KataVMIsolationPreview Aşağıdaki örnekte gösterildiği gibi az feature register komutunu kullanarak özellik bayrağını kaydedin:

az feature register --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"

Durumun Kayıtlı olarak gösterilmesi birkaç dakika sürer. az feature show komutunu kullanarak kayıt durumunu doğrulayın:

az feature show --namespace "Microsoft.ContainerService" --name "KataVMIsolationPreview"

Durum Kayıtlı olarak gösterildiğinde az provider register komutunu kullanarak Microsoft.ContainerService kaynak sağlayıcısının kaydını yenileyin:

az provider register --namespace "Microsoft.ContainerService"

Sınırlamalar

Pod Korumalı Alanı'nın (önizleme) bu önizlemesiyle ilgili kısıtlamalar şunlardır:

  • Kata kapsayıcıları, geleneksel kapsayıcıların Azure Dosyalar ve yüksek performanslı yerel SSD'de ulaşabileceği IOPS performans sınırlarına ulaşamayabilir.

  • Kapsayıcılar için Microsoft Defender, Kata çalışma zamanı podlarının değerlendirilmesini desteklemez.

  • Kata konak ağı desteklenmez.

  • AKS, bu önizleme sürümünde Kapsayıcı Depolama Arabirimi sürücülerini ve Gizli Dizi Deposu CSI sürücüsünü desteklemez.

Nasıl çalışır?

AKS'de bu işlevi elde etmek için, AKS yığını için Azure Linux kapsayıcı konağı üzerinde çalışan Kata Kapsayıcıları donanım tarafından zorlanan yalıtım sağlar. Pod Korumalı Alanı, her Kata podu için ayrı bir çekirdek gibi donanım yalıtımının avantajlarını genişletir. Donanım yalıtımı her pod için kaynak ayırır ve bunları aynı konakta çalışan diğer Kata Kapsayıcıları veya ad alanı kapsayıcılarıyla paylaşmaz.

Çözüm mimarisi aşağıdaki bileşenleri temel alır:

Kata Kapsayıcıları kullanarak Pod Korumalı Alanı dağıtma, kapsayıcıları dağıtmak için standart kapsayıcılı iş akışına benzer. Dağıtım, pod şablonunda tanımlayabileceğiniz kata-runtime seçeneklerini içerir.

Bu özelliği pod ile kullanmak için tek fark pod belirtimine runtimeClassName kata-mshv-vm-isolation eklemektir.

Pod kata-mshv-vm-isolation runtimeClass kullandığında, kapsayıcıları barındırmak için pod korumalı alanı olarak hizmet vermek üzere bir VM oluşturur. Kapsayıcı kaynak bildirimi (containers[].resources.limits) CPU ve bellek için bir sınır belirtmiyorsa VM'nin varsayılan belleği 2 GB'tır ve varsayılan CPU bir çekirdektir. Kapsayıcı kaynak bildiriminde CPU veya bellek için bir sınır belirttiğinizde, VM bir containers[].resources.limits.cpu + xCPU kullanmak için bağımsız değişkenini ve 2 containers[].resources.limits.memory 2 GB + yMemory belirtmek için bağımsız değişkenini kullanır.1 Kapsayıcılar yalnızca kapsayıcıların sınırları için CPU ve bellek kullanabilir. containers[].resources.requests cpu ve bellek ek yükünü azaltmak için çalışırken bu önizlemede yok sayılır.

Yeni küme dağıtma

Azure CLI kullanarak bir Azure Linux AKS kümesi dağıtmak için aşağıdaki adımları gerçekleştirin.

  1. az aks create komutunu kullanarak ve aşağıdaki parametreleri belirterek bir AKS kümesi oluşturun:

    • --workload-runtime: Düğüm havuzunda Pod Korumalı Alanı özelliğini etkinleştirmek için KataMshvVmIsolation değerini belirtin. Bu parametre ile, bu diğer parametreler aşağıdaki gereksinimleri karşılamalıdır. Aksi takdirde, komut başarısız olur ve ilgili parametrelerle ilgili bir sorun bildirir.
    • --os-sku: AzureLinux. Bu önizleme sürümünde bu özelliği yalnızca Azure Linux os-sku destekler.
    • --node-vm-size: 2. nesil vm olan ve iç içe sanallaştırmayı destekleyen tüm Azure VM boyutları çalışır. Örneğin, Dsv3 VM'leri.

    Aşağıdaki örnek, myResourceGroup'ta bir düğüme sahip myAKSCluster adlı bir küme oluşturur:

    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
    
  2. Kubernetes kümesinin erişim kimlik bilgilerini almak için aşağıdaki komutu çalıştırın. az aks get-credentials komutunu kullanın ve küme adı ile kaynak grubu adı değerlerini değiştirin.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. kubectl get pods komutunu kullanarak tüm ad alanları içindeki tüm Podları listeleyin .

    kubectl get pods --all-namespaces
    

Mevcut kümeye dağıtma

Bu özelliği mevcut bir AKS kümesiyle kullanmak için aşağıdaki gereksinimlerin karşılanması gerekir:

Barındırmak için bir düğüm havuzu oluşturarak Pod Korumalı Alanı'nı (önizleme) etkinleştirmek için aşağıdaki komutu kullanın.

  1. az aks nodepool add komutunu kullanarak AKS kümenize düğüm havuzu ekleyin . Aşağıdaki parametreleri belirtin:

    • --resource-group: AKS kümesinin oluşturulacağı mevcut kaynak grubunun adını girin.
    • --cluster-name: AKS kümesi için myAKSCluster gibi benzersiz bir ad girin.
    • --name: Küme düğüm havuzunuz için nodepool2 gibi benzersiz bir ad girin.
    • --workload-runtime: Düğüm havuzunda Pod Korumalı Alanı özelliğini etkinleştirmek için KataMshvVmIsolation değerini belirtin. Parametresiyle --workload-runtime birlikte, bu diğer parametreler aşağıdaki gereksinimleri karşılamalıdır. Aksi takdirde, komut başarısız olur ve ilgili parametrelerle ilgili bir sorun bildirir.
      • --os-sku: AzureLinux. Önizleme sürümünde bu özelliği yalnızca Azure Linux os-sku destekler.
      • --node-vm-size: 2. nesil vm olan ve iç içe sanallaştırmayı destekleyen tüm Azure VM boyutları çalışır. Örneğin, Dsv3 VM'leri.

    Aşağıdaki örnek, myResourceGroup'ta nodepool2'de bir düğümle myAKSCluster'a bir düğüm havuzu ekler:

    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. Kümede pod korumalı alanını (önizleme) etkinleştirmek için az aks update komutunu çalıştırın.

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

Güvenilen uygulama dağıtma

AKS kümesindeki paylaşılan çekirdekte güvenilen bir uygulamanın dağıtımını göstermek için aşağıdaki adımları gerçekleştirin.

  1. Güvenilen podu açıklamak için trusted-app.yaml adlı bir dosya oluşturun ve aşağıdaki bildirimi yapıştırın.

    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. kubectl apply komutunu çalıştırarak Kubernetes podunu dağıtın ve trusted-app.yaml dosyanızı belirtin:

    kubectl apply -f trusted-app.yaml
    

    Komutun çıkışı aşağıdaki örneğe benzer:

    pod/trusted created
    

Güvenilmeyen bir uygulama dağıtma

Güvenilmeyen bir uygulamanın AKS kümesindeki pod korumalı alanına dağıtımını göstermek için aşağıdaki adımları gerçekleştirin.

  1. Güvenilmeyen bir podu açıklamak için untrusted-app.yaml adlı bir dosya oluşturun ve aşağıdaki bildirimi yapıştırın.

    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"]
    

    runtimeClassNameSpec değeridir.kata-mhsv-vm-isolation

  2. kubectl apply komutunu çalıştırarak Kubernetes podunu dağıtın ve untrusted-app.yaml dosyanızı belirtin:

    kubectl apply -f untrusted-app.yaml
    

    Komutun çıkışı aşağıdaki örneğe benzer:

    pod/untrusted created
    

Çekirdek Yalıtımı yapılandırmasını doğrulama

  1. AKS kümesinin içindeki bir kapsayıcıya erişmek için kubectl exec komutunu çalıştırarak bir kabuk oturumu başlatın. Bu örnekte, güvenilmeyen pod içindeki kapsayıcıya erişmiş olursunuz.

    kubectl exec -it untrusted -- /bin/bash
    

    Kubectl kümenize bağlanır, güvenilmeyen pod içindeki ilk kapsayıcıda çalışır /bin/sh ve terminalinizin giriş ve çıkış akışlarını kapsayıcının işlemine iletir. Güvenilen podu barındıran kapsayıcıda kabuk oturumu da başlatabilirsiniz.

  2. Güvenilmeyen pod kapsayıcısında kabuk oturumu başlattıktan sonra, güvenilmeyen kapsayıcının pod korumalı alanında çalıştığını doğrulamak için komutları çalıştırabilirsiniz. Korumalı alanın dışındaki güvenilen kapsayıcıya kıyasla farklı bir çekirdek sürümüne sahip olduğunu fark edeceksiniz.

    Çekirdek sürümünü görmek için aşağıdaki komutu çalıştırın:

    uname -r
    

    Aşağıdaki örnek pod korumalı alan çekirdeğinin çıkışına benzer:

    root@untrusted:/# uname -r
    5.15.48.1-8.cm2
    
  3. Çekirdek çıkışını doğrulamak için güvenilen pod kapsayıcısına bir kabuk oturumu başlatın:

    kubectl exec -it trusted -- /bin/bash
    

    Çekirdek sürümünü görmek için aşağıdaki komutu çalıştırın:

    uname -r
    

    Aşağıdaki örnek, pod korumalı alanında çalışan güvenilmeyen poddan farklı bir çekirdek olan güvenilen podu çalıştıran VM'den alınan çıkışa benzer:

    5.15.80.mshv2-hvl1.m2
    

Temizleme

Bu özelliği değerlendirmeyi bitirdiğinizde Azure ücretlerinden kaçınmak için gereksiz kaynaklarınızı temizleyin. Değerlendirme veya test kapsamında yeni bir küme dağıttıysanız az aks delete komutunu kullanarak kümeyi silebilirsiniz .

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

Mevcut bir kümede Pod Korumalı Alanı'nı (önizleme) etkinleştirdiyseniz kubectl delete pod komutunu kullanarak podları kaldırabilirsiniz.

kubectl delete pod pod-name

Sonraki adımlar

Donanım yalıtımını kullanmak ve Azure platformu bakım olayları üzerinde denetim sağlamak üzere AKS kümenize sahip düğümler için Azure Ayrılmış konakları hakkında daha fazla bilgi edinin.