Aracılığıyla paylaş


Azure Kubernetes Service'te (AKS) en iyi yöntemleri zorunlu kılmak için dağıtım korumalarını kullanma (Önizleme)

Bu makalede, Azure Kubernetes Service (AKS) kümesinde en iyi yöntemleri zorunlu kılmak için dağıtım korumalarının nasıl kullanılacağı gösterilmektedir.

Genel bakış

Geliştirme yaşam döngüsü boyunca, Kubernetes kaynaklarınızın ilk dağıtımı yanlış yapılandırmalar içeriyorsa hatalar, sorunlar ve diğer sorunların ortaya çıkması yaygın bir durumdur. Azure Kubernetes Service (AKS), Kubernetes geliştirme yükünü hafifletmek için dağıtım korumaları (önizleme) sunar. Dağıtım korumaları, Azure İlkesi denetimleri aracılığıyla AKS kümenizde Kubernetes'in en iyi yöntemlerini zorlar.

Dağıtım korumaları iki yapılandırma düzeyi sunar:

  • Warning: Uyumlu olmayan küme yapılandırmaları konusunda sizi uyarmak için kod terminalinde uyarı iletileri görüntüler, ancak yine de isteğin geçmesine izin verir.
  • Enforcement: En iyi yöntemleri izlemezlerse dağıtımları reddederek ve sessize alarak uyumlu yapılandırmaları zorlar.

'Uyarı' veya 'Zorlama' için dağıtım korumalarını yapılandırdıktan sonra Dağıtım korumaları, uyumluluk için oluşturma veya güncelleştirme zamanında kümelerinizi program aracılığıyla değerlendirir. Dağıtım korumaları ayrıca Azure portalında veya CLI veya terminalinizde Azure İlkesi uyumluluk panosu aracılığıyla iş yükleriniz genelinde toplu uyumluluk bilgilerini kaynak düzeyinde görüntüler. Uyumlu olmayan bir iş yükü çalıştırmak, kümenizin en iyi yöntemleri izlemediğini ve kümenizdeki iş yüklerinin küme yapılandırmanızdan kaynaklanan sorunlarla karşılaşma riski altında olduğunu gösterir.

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

Önkoşullar

  • AKS için Azure İlkesi eklentisini etkinleştirmeniz gerekir. Daha fazla bilgi için bkz. AKS kümenizde Azure İlkesi etkinleştirme.

  • Dağıtım korumalarını yapılandırmak için uzantının sürümüne veya sonraki bir sürümüne 2.0.0b1aks-preview sahip olmanız gerekir. Uzantıyı yüklemek için bkz . Aks-preview CLI uzantısını yükleme. En son sürümün yüklü olduğundan emin olmak için Azure CLI'yi güncelleştirmenizi de öneririz.

  • Dağıtım korumalarına yönelik yapılandırmayı oluşturmak ve değiştirmek için AKS kümenizde aşağıdaki izinlere sahip bir aboneliğe ihtiyacınız vardır:

    • Microsoft.Authorization/policyAssignments/write
    • Microsoft.Authorization/policyAssignments/read
  • Dağıtım korumaları özellik bayrağını kaydetmeniz gerekir. Özellik bayrağını kaydetmek için bkz . Dağıtım korumaları için özellik bayrağını kaydetme.

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

  1. aks-preview komutunu kullanarak CLI uzantısını az extension add yükleyin.

    az extension add --name aks-preview
    
  2. komutunu kullanarak en son sürümü yüklediğinizden emin olmak için uzantıyı güncelleştirin az extension update .

    az extension update --name aks-preview
    

Dağıtım korumaları özellik bayrağını kaydetme

  1. SafeguardsPreview komutunu kullanarak özellik bayrağını az feature register kaydedin.

    az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
    

    Durumun Kayıtlı olarak gösterilmesi birkaç dakika sürer.

  2. komutunu kullanarak az feature show kayıt durumunu doğrulayın.

    az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
    
  3. Durum Kayıtlı olarak yansıtıldığında, komutunu kullanarak Microsoft.ContainerService kaynak sağlayıcısının kaydını yenileyinaz provider register.

    az provider register --namespace Microsoft.ContainerService
    

Dağıtım ilkeleri korur

Not

ReadOnlyRootFilesystem ve RootfilesystemInitContainers ilkeleri şu anda yalnızca Linux'ta kullanılabilir.

Aşağıdaki tabloda, etkin hale gelen ilkeler ve dağıtım korumalarını etkinleştirdiğinizde hedefledikleri Kubernetes kaynakları listelenir. Azure portalında Azure İlkesi tanımı olarak veya Azure Kubernetes Service için yerleşik Azure İlkesi tanımlarda şu anda kullanılabilir olan dağıtım korumalarını görüntüleyebilirsiniz. Bu koleksiyonun amacı, çoğu kullanıcı ve kullanım örneği için geçerli olan en iyi yöntemlerin ortak ve genel bir listesini oluşturmaktır.

Dağıtım koruma ilkesi Hedeflenen Kubernetes kaynağı Varsa mutasyon sonucu
[Önizleme]: Tek Tek Düğümler Düzenlenemiyor Düğüm Yok
Kubernetes küme kapsayıcıları CPU ve bellek kaynak sınırları belirtilen sınırları aşmamalıdır Pod Ayarlanmazsa CPU kaynak sınırlarını 500m olarak ayarlar ve yol yoksa bellek sınırlarını 500Mi olarak ayarlar
[Önizleme]: Benzeşim Karşıtı Kuralları Ayarlanmış Olmalıdır Dağıtım, StatefulSet, ReplicationController, ReplicaSet Yok
[Önizleme]: AKS'ye Özgü Etiket Yok Dağıtım, StatefulSet, Replicaset Yok
Kubernetes küme kapsayıcıları yalnızca izin verilen görüntüleri kullanmalıdır Pod Yok
[Önizleme]: Ayrılmış Sistem Havuzu Renk Tonları Düğüm CriticalAddonsOnly Ayarlanmadıysa kullanıcı düğümü havuzundan renk tonunu kaldırır. AKS, CriticalAddonsOnly müşteri podlarını sistem havuzundan uzak tutmak için taint kullanır. Bu yapılandırma AKS bileşenleri ve müşteri podları arasında net bir ayrım sağlar ve renk tonu toleransı olmayan CriticalAddonsOnly müşteri podlarının çıkarılmasını önler.
Küme kapsayıcılarının hazır olma veya canlılık yoklamalarının yapılandırıldığından emin olun Pod Yok
Kubernetes kümeleri Kapsayıcı Depolama Arabirimi (CSI) sürücüsü StorageClass kullanmalıdır StorageClass Yok
[Önizleme]: Kubernetes kümesi doğru Pod Kesintisi Bütçeleri uygulamalıdır Dağıtım, ReplicaSet, StatefulSet PodDisruptionBudget kaynağında 1 olarak ayarlar maxUnavailable .
[Önizleme]: Kubernetes küme hizmetleri benzersiz seçiciler kullanmalıdır Hizmet Yok
[Önizleme]: ReadOnlyRootFilesystem Pod'da belirtim true olarak ayarlandı Pod readOnlyRootFilesystem Pod belirtiminde true ayarlanmadıysa olarak ayarlanır. Bu yapılandırma, kapsayıcıların kök dosya sistemine yazmasını engeller.
[Önizleme]: RootfilesystemInitContainers Pod'da belirtim true olarak ayarlandı Pod rootFilesystemInitContainers Pod belirtiminde true ayarlanmadıysa olarak ayarlanır.
[Önizleme]: Kubernetes kümesi kapsayıcı görüntüleri en son görüntü etiketini içermemelidir Dağıtım, StatefulSet, ReplicationController, ReplicaSet Yok
[Önizleme]: Kubernetes kümesi kapsayıcı görüntüleri preStop kancasını içermelidir Dağıtım, StatefulSet, ReplicationController, ReplicaSet Yok

Dağıtım korumaları için bir fikir veya istek göndermek istiyorsanız AKS GitHub deposunda bir sorun açın ve başlığın başına ekleyin[deployment safeguards request].

Dağıtım korumalarını etkinleştirme

Not

dağıtım korumalarını kullanmak için Azure İlkesi ilk kez etkinleştirdiyseniz, Azure İlkesi geçerlilik kazanması için 20 dakikaya kadar beklemeniz gerekebilir.

Dağıtım koruma Enforcement düzeyini kullanmak, engellenen ve kapatılan dağıtımları kabul ettiğiniz anlamına gelir. etkinleştirmeden Enforcementönce bu ilkelerin AKS kümenizle nasıl çalışabileceğini göz önünde bulundurun.

Yeni kümede dağıtım korumalarını etkinleştirme

ve --safeguards-version bayraklarıyla komutunu --safeguards-level kullanarak yeni bir kümede az aks create dağıtım korumalarını etkinleştirin.

Uyumsuzluk uyarıları almak istiyorsanız değerini olarak Warningayarlayın--safeguards-level. Uyumsuz tüm dağıtımları reddetmek veya sessize almak istiyorsanız, olarak Enforcementayarlayın. Uyarı almak için öğesini "Uyarı" olarak ayarlayın --safeguards-level . Dağıtım korumalarına uymayan tüm dağıtımları reddetmek veya sessize almak için öğesini "Zorlama" olarak ayarlayın --safeguards-level . Dağıtım korumaları sürümünü ayarlamak için bayrağını --safeguards-version kullanın. Şu anda V2.0.0, dağıtım korumalarının en son sürümüdür.

az aks create \
    --name myAKSCluster \
    --resource-group myResourceGroup \
    --enable-addons azure-policy \
    --safeguards-level Warning \
    --safeguards-version v2.0.0 \
    --generate-ssh-keys

Mevcut bir kümede dağıtım korumalarını etkinleştirme

ve --safeguards-version bayraklarıyla komutunu --safeguards-level kullanarak Azure İlkesi eklentisinin etkinleştirildiği mevcut bir kümede az aks update dağıtım korumalarını etkinleştirin. Uyumsuzluk uyarıları almak istiyorsanız değerini olarak Warningayarlayın--safeguards-level. Uyumsuz tüm dağıtımları reddetmek veya sessize almak istiyorsanız, olarak Enforcementayarlayın.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement --safeguards-version v2.0.0

Mevcut bir kümenin dağıtım koruma düzeyini güncelleştirmek istiyorsanız, veya olarak ayarlanmış EnforcementWarning bayrağıyla --safeguards-level komutunu kullanınaz aks update.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement

Ad alanlarını dışlama

Ayrıca bazı ad alanlarını dağıtım korumalarının dışında tutabilirsiniz. Bir ad alanını dışladığınızda, bu ad alanı içindeki etkinlik dağıtım uyarılarını veya zorlamayı korur.

Örneğin, ve ns2ad alanlarını ns1 dışlamak için, aşağıdaki örnekte gösterildiği gibi bayrağıyla birlikte virgülle --safeguards-excluded-ns ayrılmış bir ad alanı listesi kullanın:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Warning --safeguards-version v2.0.0 --safeguards-excluded-ns ns1,ns2 

Dağıtım koruma sürümünüzü güncelleştirme

Not

v2.0.0, dağıtım korumalarının en son sürümüdür.

Bayrağı yeni sürüme az aks update ayarlanmış olarak komutunu --safeguards-version kullanarak dağıtım koruma sürümünüzü güncelleştirin. Aşağıdaki örnek, mevcut bir kümeyi 2.0.0 sürümünü kullanacak şekilde güncelleştirir:

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-version v2.0.0

Kümeler arasında uyumluluğu doğrulama

Kubernetes bildiriminizi dağıttığınızda, aşağıdaki örneklerde gösterildiği gibi küme dağıtım korumalarıyla uyumlu değilse CLI veya terminalinizde uyarılar veya olası bir reddetme iletisi görürsünüz:

Uyarı

$ kubectl apply -f pod.yml
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
Warning: [azurepolicy-k8sazurev3containerlimits-a8754961dbd4c1d8b49d] container <my-container> has no resource limits
Warning: [azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
pod/my-pod created

Zorlama

Dağıtım koruma mutasyonlarıyla bu düzey, Enforcement uygun olduğunda Kubernetes kaynaklarınızı sessize alır. Ancak Kubernetes kaynaklarınızın başarılı bir şekilde dağıtılması için tüm güvenlik önlemlerini geçirmesi gerekir. Herhangi bir koruma ilkesi başarısız olursa kaynağınız reddedilir ve dağıtılmaz.

$ kubectl apply -f pod.yml
Error from server (Forbidden): error when creating ".\pod.yml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerallowedimag-1ff6d14b2f8da22019d7] Container image my-image for container my-container has not been allowed.
[azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
[azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.

Kubernetes kaynaklarınız geçerli mutasyon korumalarına uyuyorsa ve diğer tüm koruma gereksinimlerini karşılıyorsa, aşağıdaki örnekte gösterildiği gibi başarıyla dağıtılacaktır:

$ kubectl apply -f pod.yml
pod/my-pod created

Azure İlkesi panosunu kullanarak kümeler arasında uyumluluğu doğrulama

Dağıtım korumalarının uygulandığını doğrulamak ve kümenizin uyumluluğunu denetlemek için kümenizin Azure portalı sayfasına gidin ve İlkeler'i seçin, ardından Azure İlkesi git'i seçin.

İlkeler ve girişimler listesinden dağıtım korumalarıyla ilişkili girişimi seçin. AKS kümeniz genelinde uyumluluk durumunu gösteren bir pano görürsünüz.

Not

AKS kümeniz genelinde uyumluluğu düzgün bir şekilde değerlendirmek için Azure İlkesi girişiminin kapsamının kümenizin kaynak grubuna göre belirlenmiş olması gerekir.

Dağıtım korumalarını devre dışı bırakma

komutunu kullanarak az aks update kümenizde dağıtım korumalarını devre dışı bırakın ve olarak ayarlayın --safeguards-levelOff.

az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Off

--

SSS

Azure İlkesi ile dağıtım korumalarını ilk kez etkinleştirdim. Neden hiç uyarı görmüyorum? Podlarım neden reddedilmiyor?

Azure İlkesi ilk kez etkinleştirildikten sonra kümenizle eşitleme 35 dakika kadar sürebilir.

Uyarı'dan zorlamaya geçiyorum. Bu hemen geçerli olacak mı?

Dağıtım koruma düzeylerini değiştirirken, yeni düzeyin geçerli olması için 15 dakikaya kadar beklemeniz gerekebilir.

Kendi mutasyonlarımı oluşturabilir miyim?

Hayır Koruma hakkında bir fikriniz varsa AKS GitHub deposunda bir sorun açın ve başlığın başına ekleyin[deployment safeguards request].

Zorlamada hangi mutasyonları seçip seçebilirim?

Hayır Dağıtım korumaları tamamen veya hiçbir şey değildir. Uyarı veya Zorlama'yı açtığınızda tüm korumalar etkin olur.

Dağıtım kaynağım en iyi yöntemleri takip etmese bile neden kabul edilir?

Dağıtım korumaları, Azure İlkesi denetimler aracılığıyla en iyi uygulama standartlarını uygular ve Kubernetes kaynaklarına karşı doğrulayan ilkelere sahiptir. Küme bileşenlerini değerlendirmek ve zorunlu kılmak için Azure İlkesi Ağ Geçidi Denetleyicisi'ni genişletir. Ağ geçidi denetleyicisi zorlaması şu anda bir fail-open modelde de çalışır. Ağ geçidi denetleyicisinin ağ çağrımıza yanıt vereceğinin garantisi olmadığından, reddetmenin dağıtımlarınızı engellememesi için doğrulamanın atlandığından emin olacağız.

Daha fazla bilgi edinmek için bkz . Ağ Geçidi Denetleyicisi'nde iş yükü doğrulama.

Sonraki adımlar

  • AKS kümesini çalıştırmaya yönelik en iyi yöntemler hakkında daha fazla bilgi edinin.