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.0b1
aks-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
aks-preview
komutunu kullanarak CLI uzantısınıaz extension add
yükleyin.az extension add --name aks-preview
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
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.
komutunu kullanarak
az feature show
kayıt durumunu doğrulayın.az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
Durum Kayıtlı olarak yansıtıldığında, komutunu kullanarak Microsoft.ContainerService kaynak sağlayıcısının kaydını yenileyin
az 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 Warning
ayarlayın--safeguards-level
. Uyumsuz tüm dağıtımları reddetmek veya sessize almak istiyorsanız, olarak Enforcement
ayarlayı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 Warning
ayarlayın--safeguards-level
. Uyumsuz tüm dağıtımları reddetmek veya sessize almak istiyorsanız, olarak Enforcement
ayarlayı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ış Enforcement
Warning
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 ns2
ad 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-level
Off
.
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.
Azure Kubernetes Service