Kimlik bilgisi gerektirmeyen (credential-free) eklenti, görüntü çekme işlemleri için kimlik doğrulamayı otomatikleştirerek imagePullSecrets öğesini tekrar tekrar yapılandırma ihtiyacını ortadan kaldırır. Bu konu, eklentinin nasıl kurulacağını, yapılandırılacağını ve kullanılacağını yanı sıra dikkate alınması gereken önemli kullanım notlarını açıklar.
Çalışma prensibi
Görüntü kaynağı olarak Container Registry (ACR) kullandığınızda ve anonim görüntü çekmeyi etkinleştirmediğinizde, ACK kümenizin her görüntü çekme işlemi için kimlik doğrulaması yapmak üzere bir kullanıcı adı ve parola sağlaması gerekir. Yaygın çözüm, bu kimlik bilgilerini bir Secret içinde saklamaktır; ancak bu yaklaşımın birkaç dezavantajı bulunur:
Secret'lar Base64 kodlu düz metindir ve ifşa edilmeleri durumunda güvenlik riski oluşturur.
Her workload için
imagePullSecretsdeğerini manuel olarak belirtmeniz gerekir.Secret'lar ad alanları arasında paylaşılamaz.
Kimlik bilgisi gerektirmeyen eklenti şu şekilde çalışır:
Eklenti, ACR örneğinden geçici kimlik bilgileri alır.
Eklenti, geçici kimlik bilgilerini bir Secret'a kaydeder.
Eklenti, yapılandırmasında belirtilen ServiceAccount'larla bu Secret'ı ilişkilendirir.
Bu ServiceAccount'ları kullanan workload'lar, Secret'ta depolanan geçici kimlik bilgilerini kullanarak görüntüleri otomatik olarak çekebilir.
Kimlik bilgisi gerektirmeyen eklenti, birden fazla ad alanında ServiceAccount'ları yönetebilir ve geçici kimlik bilgilerini düzenli aralıklarla yenileyebilir. Bu sayede güvenlik riskleri azalır ve workload'lara manuel olarak imagePullSecrets ekleme zorunluluğu ortadan kalkar. Kimlik bilgisi gerektirmeyen eklenti ücretsizdir.
Eklenti karşılaştırması
ACK, aliyun-acr-credential-helper eklentisini yönetilen (managed) ve kendi kendine yönetilen (self-managed) olmak üzere iki sürümde sunar. Aynı anda yalnızca bir sürümü yükleyebilirsiniz. Aşağıdaki tabloda iki sürüm karşılaştırılmaktadır.
|
Öğe |
aliyun-acr-credential-helper (yönetilen) |
aliyun-acr-credential-helper (kendi kendine yönetilen) |
|
Desteklenen küme sürümleri |
ACK managed clusters, ACK serverless clusters veya ACK Edge clusters sürüm 1.22 veya üzeri |
ACK managed clusters veya ACK dedicated clusters sürüm 1.20 veya üzeri |
|
Özellikler |
|
|
Bir kümeyi yükseltmek için bkz. Manually upgrade a cluster .
Ön koşullar
Kümeniz, kimlik bilgisi gerektirmeyen eklenti tarafından desteklenen bir sürümü çalıştırıyor olmalıdır. Daha fazla bilgi için önceki tabloya bakın.
-
Bir ACR Enterprise Edition örneğiniz bulunmalıdır.
ÖnemliKimlik bilgisi gerektirmeyen eklenti yalnızca ACR Enterprise Edition örneklerini ve 8 Eylül 2024 veya önceki tarihlerde oluşturulan ACR Personal Edition örneklerini destekler. Kimlik bilgisi gerektirmeyen eklentiyi kullanamıyorsanız bkz. How do I use imagePullSecrets?.
Kimlik bilgisi gerektirmeyen eklentinin kullandığı RAM rolüne izinler atanmış olmalıdır. Daha fazla bilgi için bkz. Grant permissions.
-
ACR Enterprise Edition örneği ile ACK kümesi arasında ağ bağlantısı kurulmuş olmalıdır.
Yönetilen kimlik bilgisi gerektirmeyen eklentiyi kullanma
1. Adım: Eklentiyi yükleme
ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters seçeneğine tıklayın.
Clusters sayfasında kümenizin adına tıklayın. Sol gezinme bölmesinde Add-ons seçeneğine tıklayın.
Add-ons sayfasında Security sekmesine tıklayın, aliyun-acr-credential-helper (managed) kartını bulun ve ardından Install. seçeneğine tıklayın.
-
Install add-on aliyun-acr-credential-helper sayfasında AcrInstanceInfo ayarlarını ve diğer seçenekleri görüntüleyin. AcrInstanceInfo , eklentiyle ilişkili her bir ACR örneğinin ayarlarını içerir. Diğer seçenekler ise eklenti ayarlarıdır. Eklentinin izlediği ad alanlarını veya ServiceAccount'ları değiştirmeniz gerekmiyorsa varsayılan ayarları koruyabilirsiniz.
Eklenti yüklendikten sonra Add-ons sayfasındaki aliyun-acr-credential-helper (managed) kartında Configurations seçeneğine tıklayarak ayarları değiştirebilirsiniz.
ACR örneği ilişkilendirme ayarları:
AcrInstanceInfo
Açıklama
InstanceId
ACR örneğinin kimliği. Kimliği Container Registry konsolundan alabilirsiniz.
ÖnemliACR Personal Edition örnekleri için bu alanı boş bırakın. Bu alan ACR Enterprise Edition örnekleri için gereklidir.
regionId
ACR örneğinin dağıtıldığı bölgenin kimliği. Kimliği Container Registry konsolundan alabilirsiniz.
ÖnemliBu parametre, bölgeler arası görüntü çekme işlemleri için gereklidir.
domains
Kimlik bilgisi gerektirmeyen eklentinin ACR örneğine erişmek için kullandığı etki alanı adları. Varsayılan olarak bu, belirtilen ACR örneğinin tüm etki alanı adlarını (internet ve VPC) içerir. Birden çok etki alanı adı belirtmek için bunları virgülle (,) ayırın.
Hesaplar arası görüntü çekme ayarları
Bu ayarlar hesaplar arası görüntü çekme işlemleri için geçerlidir. Bu özelliğe ihtiyacınız yoksa alanları boş bırakın.
assumeRoleARN
Aynı hesap içi çekmeler için yapılandırma gerekmez. Hesaplar arası çekmeler için bkz. Pull images across accounts.
expireDuration
rrsaRoleARN
rrsaOIDCProviderRoleARN
2. Adım: Görüntü çekme
Kimlik bilgisi gerektirmeyen eklentiyi yükledikten ve yapılandırdıktan sonra, bir workload oluştururken eklentiyle ilişkili bir ServiceAccount belirtin. Bu sayede kimlik bilgisi gerektirmeyen görüntü çekme etkinleşir.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
serviceAccountName: my-service-account # Specify a ServiceAccount that is associated with the credential-free add-on.
containers:
- name: nginx
image: "******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest" # Specify the ACR image address.
ports:
- containerPort: 80
Kendi kendine yönetilen kimlik bilgisi gerektirmeyen eklentiyi kullanma
1. Adım: Eklentiyi yükleme
ACK konsolu üzerinde oturum açın. Sol gezinme bölmesinde Clusters seçeneğine tıklayın.
Clusters sayfasında kümenizin adına tıklayın. Sol gezinme bölmesinde Add-ons seçeneğine tıklayın.
Add-ons sayfasında Security sekmesine tıklayın, aliyun-acr-credential-helper kartını bulun ve ardından Install seçeneğine tıklayın.
-
Parameters sayfasında, tokenMode açılır listesinden bir izin modu seçin ve OK seçeneğine tıklayın. Eklenti yüklendikten sonra görüntü çekebilmek için yapılandırmanız gerekir. Daha fazla bilgi için bkz. Step 2: Update the add-on configuration (add an ACR instance).
tokenMode
Açıklama
auto
(Önerilir) Eklenti, küme oluşturma zamanını algılar ve otomatik olarak bir izin modu seçer. 3 Nisan 2023'ten önce oluşturulan kümeler workerRole modunu kullanır. 3 Nisan 2023'te veya sonrasında oluşturulan kümeler managedRole modunu kullanır.
Önemli3 Nisan 2023'te veya sonrasında yayınlanan aliyun-acr-credential-helper sürümleri, eklentinin bağlı olduğu RAM rolünü özelleştirmenize olanak tanıyan bir parametre sağlar. Daha fazla bilgi için bkz. [Product Change] Announcement on changing the permissions required by the aliyun-acr-credential-helper add-on.
managedRole
Eklenti, Ön koşullar bölümünde yetkilendirilen AliyunCSManagedAcrRole rolünü kullanarak izinleri alır.
workerRole
Eklenti, izinleri almak için küme worker RAM rolünü kullanır. Worker RAM rolüne belirli izinler atamanız gerekir.
ÖnemliBir rol üstlenerek hesaplar arası görüntü çekmeniz gerekiyorsa bu modu seçin.
2. Adım: Eklenti yapılandırmasını güncelleme
Kimlik bilgisi gerektirmeyen eklenti yüklendikten sonra, görüntü çekebilmek için bir ACR örneği eklemek üzere acr-configuration ConfigMap'ini yapılandırmanız gerekir. Bunu konsolu veya kubectl kullanarak yapabilirsiniz.
Konsol
Clusters sayfasında kümenizin adına tıklayın. Sol gezinme bölmesinde seçeneğine tıklayın.
-
ConfigMaps sayfasında, Namespace açılır listesinden kube-system seçeneğini belirleyin. Ardından acr-configuration ConfigMap'e tıklayın ve aşağıdaki tabloda açıklandığı gibi ayarları değiştirin.
Parametre
Açıklama
watch-namespace
Kimlik bilgisi gerektirmeyen görüntü çekmeyi etkinleştirmek istediğiniz ad alanları. Varsayılan değer default değeridir. Bu özelliği tüm ad alanları için etkinleştirmek üzere değeri all olarak ayarlayın. Birden çok ad alanı belirtmek için bunları virgülle (,) ayırın. Yalnızca iş ad alanlarınızı belirtmeniz ve sistem görüntüsü çekme işlemlerinin kesintiye uğramasını önlemek için
allveya küme sistemi bileşenlerine ait ad alanlarını kullanmamanız önerilir.acr-api-version
Varsayılan değeri koruyun.
expiring-threshold
Eklentideki kimlik bilgilerinin sona erme eşiği. Varsayılan değer
15m(15 dakika) değeridir.acr-registry-info
Çok satırlı YAML dizesi biçiminde ACR örneği bilgilerinden oluşan bir dizi. Her örnek üç parametreden oluşan bir küme ile yapılandırılır.
-
instanceId: ACR örneğinin kimliği. Kimliği Container Registry konsolundan alabilirsiniz.ÖnemliACR Personal Edition örnekleri için bu alanı boş bırakın. Bu alan ACR Enterprise Edition örnekleri için gereklidir.
-
regionId: ACR örneğinin dağıtıldığı bölgenin kimliği. Kimliği Container Registry konsolundan alabilirsiniz.ÖnemliBu parametre, bölgeler arası görüntü çekme işlemleri için gereklidir. Örnek bir yapılandırma için aşağıdaki bölüme bakın.
-
domains: Kimlik bilgisi gerektirmeyen eklentinin ACR örneğine erişmek için kullandığı etki alanı adları. Varsayılan olarak bu,instanceIdile belirtilen ACR örneğinin tüm etki alanı adlarını içerir. Birden çok etki alanı adı belirtmek için bunları virgülle (,) ayırın.
service-account
Kimlik bilgisi gerektirmeyen eklentiyle ilişkili ServiceAccount'lar. Birden çok ServiceAccount belirtmek için bunları virgülle (,) ayırın. Değeri default olarak ayarlarsanız eklenti, belirtilen her ad alanındaki varsayılan ServiceAccount ile ilişkilendirilir. Değeri
"*"olarak ayarlarsanız eklenti, belirtilen ad alanlarında tüm ServiceAccount'larla ilişkilendirilir. -
kubectl
-
acr-configurationConfigMap'ini düzenlemek için aşağıdaki komutu çalıştırın. Yapılandırma ayrıntıları için aşağıdaki tabloya bakın.kubectl edit cm acr-configuration -n kube-systemParametre anahtarı
Açıklama
Değer
service-account
Kimlik bilgisi gerektirmeyen eklentinin hedef aldığı ServiceAccount'lar.
Varsayılan değer default değeridir.
NotBirden çok ServiceAccount belirtmek için bunları virgülle (,) ayırın. Değeri
"*"olarak ayarlarsanız bu, belirtilen ad alanlarında tüm ServiceAccount'lar için geçerli olur.acr-registry-info
Çok satırlı YAML dizesi biçiminde ACR örneği bilgilerinden oluşan bir dizi. Her örnek üç parametreden oluşan bir küme ile yapılandırılır.
NotÖrnek bilgisi parametreleri:
-
instanceId: Örneğin kimliği. Bu, Enterprise Edition örnekleri için gereklidir.
-
regionId: İsteğe bağlı. Varsayılan olarak yerel bölge kullanılır.
-
domains: İsteğe bağlı. Varsayılan olarak ilgili örneğin tüm etki alanı adları kullanılır. Birden çok etki alanı adı belirtmek için bunları virgülle (,) ayırın.
ACR Enterprise Edition örneği için örnek yapılandırma:
- instanceId: <cri-instanceId> regionId: "cn-hangzhou" domains: "xxx.com,yyy.com"watch-namespace
Kimlik bilgisi gerektirmeyen görüntü çekmeyi etkinleştirmek istediğiniz ad alanları.
Varsayılan değer default değeridir. Bu özelliği tüm ad alanları için etkinleştirmek üzere değeri all olarak ayarlayın. Birden çok ad alanı belirtmek için bunları virgülle (,) ayırın.
NotYalnızca iş ad alanlarınızı belirtmeniz ve sistem görüntüsü çekme işlemlerinin kesintiye uğramasını önlemek için all veya küme sistemi bileşenlerine ait ad alanlarını kullanmamanız önerilir.
expiring-threshold
Yerel olarak önbelleğe alınan kimlik bilgilerinin sona erme eşiği.
Varsayılan değer
15m(15 dakika) değeridir. -
3. Adım: Görüntü çekme
Kimlik bilgisi gerektirmeyen eklentiyi yükledikten ve yapılandırdıktan sonra, bir workload oluştururken eklentiyle ilişkili bir ServiceAccount belirtin. Bu sayede kimlik bilgisi gerektirmeyen görüntü çekme etkinleşir.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
serviceAccountName: my-service-account # Specify a ServiceAccount that is associated with the credential-free add-on.
containers:
- name: nginx
image: "******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest" # Specify the ACR image address.
ports:
- containerPort: 80
SSS
ServiceAccount'ların hemen kullanılmasını etkinleştirme
Bu özellik, aliyun-acr-credential-helper v23.02.06.1-74e2172-aliyun veya sonraki bir sürümü gerektirir.
Etkinleştirildiğinde, kimlik bilgisi gerektirmeyen eklenti bir Webhook kullanarak kümedeki ServiceAccount değişikliklerini izler. Yeni bir ServiceAccount oluşturulduğunda eklenti, kimlik bilgisi gerektirmeyen Secret'ı hemen enjekte eder. Bu özellik, bir Helm Chart'in aynı anda hem bir ServiceAccount hem de bir Deployment oluşturduğu gibi, ServiceAccount'un oluşturulduktan hemen sonra kullanıldığı senaryolar için kullanışlıdır. Bu özellik eklenti performansını etkileyebilir ve genel kullanım için önerilmez.
Yönetilen eklenti
Bu özelliği etkinleştirmek için kümenizde acr-credential-helper-webhook eklentisini yükleyin:
ACK Clusters sayfasında kümenizin adına tıklayın. Sol gezinme bölmesinde Add-ons seçeneğine tıklayın.
Add-ons sayfasında Security sekmesine tıklayın, acr-credential-helper-webhook (managed) kartını bulun ve ardından Install. seçeneğine tıklayın.
Kendi kendine yönetilen eklenti
Bu özelliği etkinleştirmek için acr-configuration ConfigMap'ine aşağıdaki alanları ekleyin:
data:
webhook-configuration: |
enable: true
failure-policy: Ignore
timeout-seconds: 10
|
Parametre |
Açıklama |
|
|
Webhook özelliğinin etkinleştirilip etkinleştirilmeyeceğini belirtir.
|
|
|
ServiceAccount oluşturma sırasında oluşan özel durumların işlenme ilkesi.
Önemli
Küme API Server'ın bir sınırlaması nedeniyle, |
|
|
Tek bir ServiceAccount oluşturma isteği için zaman aşımı süresi. Zaman aşımı aşılırsa sistem, |
Görüntü çekme hatalarını giderme
Olası nedenlerden biri, kimlik bilgisi gerektirmeyen eklenti yapılandırmasının yanlış olmasıdır; örneğin:
Kimlik bilgisi gerektirmeyen eklentide yapılandırılan örnek bilgileri ACR örneğiyle eşleşmiyor.
Görüntü çekmek için kullanılan görüntü adresi, eklentinin örnek bilgilerinde belirtilen etki alanı adıyla eşleşmiyor.
Sorunu gidermek için bu konudaki adımları izleyin.
Eklenti doğru şekilde yapılandırıldığı halde görüntü çekme başarısız oluyorsa bunun nedeni, workload YAML'sinde manuel olarak belirtilen imagePullSecrets alanı ile kimlik bilgisi gerektirmeyen eklenti arasındaki bir çakışma olabilir. Bunu çözmek için imagePullSecrets alanını manuel olarak kaldırın ve Pod'u yeniden oluşturun.
imagePullSecrets nasıl kullanılır?
9 Eylül 2024 veya sonraki tarihlerde oluşturulan ACR Personal Edition örnekleri kimlik bilgisi gerektirmeyen eklentiyi desteklemez. Bu örnekler için kullanıcı adını ve parolayı bir Secret içinde saklamanızı ve bunu imagePullSecrets alanında referans olarak belirtmenizi öneririz.
Kimlik bilgisi gerektirmeyen eklenti, manuel olarak belirtilen
imagePullSecretsalanı ile uyumlu değildir.Secret, workload ile aynı ad alanında olmalıdır.
İlgili konular
Kimlik bilgisi gerektirmeyen eklentiyi kullanarak hesaplar arası görüntü çekmek için bkz. Pull images across accounts.
Kimlik bilgisi gerektirmeyen eklentinin değişiklik geçmişi için bkz. aliyun-acr-credential-helper.