Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Kubernetes Service'te (AKS) çakışan istekleri önlemek için eTag'ler (Varlık Etiketleri), eşzamanlılık denetimini etkinleştiren benzersiz tanımlayıcılar işlevi görür. Kümeye bir istek yapıldığında sistem, sağlanan eTag'in veritabanında depolanan en son sürümle eşleşip eşleşmediğini denetler. Uyuşmazlık varsa, istek erken aşamada başarısız olur ve böylece istenmeyen üzerine yazmaların önüne geçilir.
eTag Başlıklarını Kullanma
Üst bilgiler aracılığıyla eTag uygulamak için iki seçenek vardır:
–-if-match Üst bilgi: İşlemin yalnızca var olan eTag bu üst bilgide sağlanan değerle eşleşiyorsa gerçekleştirilmesini sağlar.
–-if-none-match Üst bilgi: İşlemin yalnızca eTag'lerden hiçbiri bu üst bilgide sağlanan değerle eşleşmiyorsa gerçekleştirilmesini sağlar. Bu üst bilgi türü yalnızca boş veya bir * olabilir.
Mevcut ETag'leri bulma
Mevcut ETag'i görmek için kümenize veya düğüm havuzunuza bir LIST ya da bir GET çağrısı yapabilirsiniz. ETag aşağıdaki örneğe benzer:
"agentPoolProfiles": [
{"eTag": "5e5ffdce-356b-431b-b050-81b45eef2a12"}
]
Mevcut ETag'leri ne değiştirir?
ETag'ler hem küme hem de aracı havuzu düzeylerinde bulunabilir. Gerçekleştirdiğiniz işlemlerin kapsamına bağlı olarak ilgili eTag'i geçirebilirsiniz. Küme düzeyinde bir işlem gerçekleştirdiğinizde hem küme düzeyinde eTag hem de aracı havuzu eTag'i güncelleştirilir. Aracı havuzu işlemi gerçekleştirdiğinizde, yalnızca aracı havuzu eTag'i güncelleştirilir.
İşlem üst bilgilerine ETag'ler ekleme
Üst bilgilerin kullanılması tercihe bağlıdır. Aşağıdaki örnekler, –-if-match ve -–if-none-match üst bilgilerinin nasıl kullanılacağını göstermektedir.
Örnek 1: Aşağıdaki CLI komutu, eTag ile eşleşiyorsa mevcut bir kümeyi MyManagedCluster siler yvjvt
Aks kümesini eTag'ini kullanarak silmek istediğinizi varsayalım. (Örnek göstermesi için, kaynaktan aldığınız gerçek eTag değeriyle "yvjvt" değerini değiştirin.)
az aks delete -g $RG_NAME -n $CLUSTER_NAME --if-match "yvjvt"
Örnek 2: Aşağıdaki CLI komutu yeni bir küme oluşturur. Başlıkta * sağlanmışsa –if-none-match, bu, kaynağın mevcut olmadığını doğrulamak anlamına gelir.
İlk olarak bir kaynak grubu oluşturun:
export RANDOM_SUFFIX=$(head -c 3 /dev/urandom | xxd -p)
export RG_NAME="my-resource-group$RANDOM_SUFFIX"
export REGION="eastus2"
az group create --name $RG_NAME --location $REGION
Ardından, benzersiz olduğundan emin olmak için rastgele bir sonek içeren yeni bir AKS kümesi oluşturun:
export CLUSTER_NAME="my-managed-cluster$RANDOM_SUFFIX"
az aks create -g $RG_NAME -n $CLUSTER_NAME --location $REGION --if-none-match "*"
Sonuçlar:
{
"aadProfile": null,
"addonProfiles": null,
"agentPoolProfiles": [
{
"eTag": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
...
}
],
"apiServerAccessProfile": null,
"autoScalerProfile": null,
...
"name": "my-managed-clusterxxx",
...
"provisioningState": "Succeeded",
...
"resourceGroup": "my-resource-groupxxx",
...
}
Yapılandırmalar ve Beklenen Davranış
Aşağıdaki tabloda, farklı eTag yapılandırmalarına ve kaynak varlığına göre HTTP işlemlerinin (PUT, PATCH ve DELETE) beklenen davranışı özetlenmektedir. Bunlar, --if-match veya --if-none-match başlıklarının yanıt durum kodlarını nasıl etkilediğini gösterir, eşzamanlılık kontrolü sağlayarak istenmeyen değişiklikleri önler.
| KOYMAK | Kaynak yok | Kaynak mevcut |
|---|---|---|
--if-match = "" |
201 – Oluşturuldu | 200 - Tamam |
--if-match = "*" |
412 - Önkoşul Başarısız Oldu | 200 - Tamam |
--if-match = "xyz" |
412 - Önkoşul Başarısız Oldu | 200 - Tamam VEYA 412 - Önkoşul Başarısız Oldu |
--if-none-match = "*" |
201 - Oluşturuldu | 412 - Önkoşul Başarısız Oldu |
| YAMA | Kaynak yok | Kaynak mevcut |
|---|---|---|
--if-match = "" |
404 - Bulunamadı | 200 - Tamam |
--if-match = "*" |
404 - Bulunamadı | 200 - Tamam |
--if-match = "xyz" |
404 - Bulunamadı | 200 - Tamam VEYA 412 - Önkoşul Başarısız Oldu |
| SİLMEK | Kaynak yok | Kaynak mevcut |
|---|---|---|
--if-match = "" |
204 - İçerik Yok | 200 - Tamam |
--if-match = "*" |
204 - İçerik Yok | 200 - Tamam |
--if-match = "xyz" |
204 - İçerik Yok | 200 - Tamam VEYA 412 - Önkoşul Başarısız Oldu |
Yaygın Sorunlar ve Önerilen Risk Azaltmaları
Senaryo 1: BadRequest – --if-none-match başlık boş değil veya * olarak ayarlanmamış
Bu, ön kontrol denetimlerinden geçemiyor. Üst --if-none-match bilgi yalnızca boş olabilir veya bir * değeri alabilir.
Senaryo 2: BadRequest - --if-match başlık boş değil VE --if-none-match başlık *
Bu, ön kontrol denetimlerinden geçemiyor. Her iki üst bilgi de aynı anda kullanılamaz.
Senaryo 3: PreConditionFailed - --if-none-match is * ve verilen kaynak zaten var
Eğer * üstbilgisinde herhangi bir (joker karakter) değeri geçirilirse ve kaynak zaten mevcutsa, istek reddedilir.
Senaryo 4: PreConditionFailed - Üst bilgi değeri --if-match kaynağın en son eTag değeriyle eşleşmiyor
Sağlanan üst bilgi eTag değeriyle eşleşmiyorsa istek reddedilir. Kaynakta en son eTag'i almak ve istekteki üst bilgi değerini güncelleştirmek için yeni bir GET işlemi gereklidir.