Çekme gizli dizisi kullanarak Azure kapsayıcı kayıt defterinden Kubernetes kümesine görüntü çekme
Küçükube ve kind gibi "yerel" Kubernetes kümeleri de dahil olmak üzere herhangi bir Kubernetes kümesiyle kapsayıcı görüntülerinin kaynağı olarak azure kapsayıcı kayıt defterini kullanabilirsiniz. Bu makalede, Azure kapsayıcı kayıt defteri için kimlik bilgilerini kullanarak Kubernetes çekme gizli dizisi oluşturma adımları gösterilmektedir. Ardından, pod dağıtımındaki bir Azure kapsayıcı kayıt defterinden görüntü çekmek için gizli diziyi kullanın.
Bu örnek, Microsoft Entra hizmet sorumlusu kimlik bilgilerini kullanarak bir çekme gizli dizisi oluşturur. Ayrıca, depo kapsamlı erişim belirteci gibi diğer Azure kapsayıcı kayıt defteri kimlik bilgilerini kullanarak bir çekme gizli dizisi yapılandırabilirsiniz.
Dekont
Çekme gizli dizileri yaygın olarak kullanılır ancak ek yönetim yükü getirir. Azure Kubernetes Service kullanıyorsanız, her pod üzerinde ek imagePullSecrets
bir ayar olmadan görüntüyü güvenli bir şekilde çekmek için kümenin yönetilen kimliğini veya hizmet sorumlusunu kullanma gibi diğer seçenekleri öneririz.
Ön koşullar
Bu makalede, özel bir Azure kapsayıcı kayıt defteri oluşturduğunuz varsayılır. Ayrıca, komut satırı aracı aracılığıyla kubectl
çalışan ve erişilebilen bir Kubernetes kümeniz olması gerekir.
Hizmet sorumlusu oluşturma
Kapsayıcı kayıt defterinize erişimi olan bir hizmet sorumlusu oluşturmak için Azure Cloud Shell'de aşağıdaki betiği veya Azure CLI'nın yerel yüklemesini çalıştırın. Betik Bash kabuğu için biçimlendirilir.
Betiği çalıştırmadan önce değişkeni kapsayıcı kayıt defterinizin adıyla güncelleştirin ACR_NAME
. Değer SERVICE_PRINCIPAL_NAME
, Microsoft Entra kiracınızda benzersiz olmalıdır. "'http://acr-service-principal' already exists.
" hatası alırsanız hizmet sorumlusu için farklı bir ad belirtin.
Farklı izinler vermek istiyorsanız, isteğe bağlı olarak az ad sp create-for-rbac komutundaki değeri değiştirebilirsiniz--role
. Rollerin tam listesi için bkz . ACR rolleri ve izinleri.
Betiği çalıştırdıktan sonra hizmet sorumlusunun kimliğini ve parolasını not alın. Kimlik bilgilerine sahip olduktan sonra, uygulama ve hizmetlerinizi hizmet sorumlusu olarak kapsayıcı kayıt defterinizde kimlik doğrulaması yapmak üzere yapılandırabilirsiniz.
#!/bin/bash
# This script requires Azure CLI version 2.25.0 or later. Check version with `az --version`.
# Modify for your environment.
# ACR_NAME: The name of your Azure Container Registry
# SERVICE_PRINCIPAL_NAME: Must be unique within your AD tenant
ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_NAME=$servicePrincipal
# Obtain the full registry ID
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query "id" --output tsv)
# echo $registryId
# Create the service principal with rights scoped to the registry.
# Default permissions are for docker pull access. Modify the '--role'
# argument value as desired:
# acrpull: pull only
# acrpush: push and pull
# owner: push, pull, and assign roles
PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv)
USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)
# Output the service principal's credentials; use these in your services and
# applications to authenticate to the container registry.
echo "Service principal ID: $USER_NAME"
echo "Service principal password: $PASSWORD"
Mevcut hizmet sorumlusunu kullanma
Mevcut hizmet sorumlusuna kayıt defteri erişimi vermek için hizmet sorumlusuna yeni bir rol atamanız gerekir. Yeni bir hizmet sorumlusu oluştururken olduğu gibi çekme, gönderme ve çekme ve sahip erişimi de ve diğerleri arasında yer alabilirsiniz.
Aşağıdaki betik, değişkende SERVICE_PRINCIPAL_ID
belirttiğiniz bir hizmet sorumlusuna çekme izinleri vermek için az role assignment create komutunu kullanır. --role
Farklı bir erişim düzeyi vermek istiyorsanız değeri ayarlayın.
#!/bin/bash
# Modify for your environment. The ACR_NAME is the name of your Azure Container
# Registry, and the SERVICE_PRINCIPAL_ID is the service principal's 'appId' or
# one of its 'servicePrincipalNames' values.
ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_ID=$servicePrincipal
# Populate value required for subsequent command args
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query id --output tsv)
# Assign the desired role to the service principal. Modify the '--role' argument
# value as desired:
# acrpull: pull only
# acrpush: push and pull
# owner: push, pull, and assign roles
az role assignment create --assignee $SERVICE_PRINCIPAL_ID --scope $ACR_REGISTRY_ID --role acrpull
Hizmet sorumlusu parolasını kaydetmezseniz veya anımsamıyorsanız az ad sp credential reset komutuyla parolayı sıfırlayabilirsiniz :
az ad sp credential reset --name http://<service-principal-name> --query password --output tsv
Bu komut, hizmet sorumlunuz için yeni ve geçerli bir parola döndürür.
Görüntü çekme gizli dizisi oluşturma
Kubernetes, kayıt defterinizde kimlik doğrulaması yapmak için gereken bilgileri depolamak için bir görüntü çekme gizli dizisi kullanır. Azure kapsayıcı kayıt defteri için çekme gizli dizisi oluşturmak için hizmet sorumlusu kimliğini, parolasını ve kayıt defteri URL'sini sağlarsınız.
Aşağıdaki kubectl
komutla bir görüntü çekme gizli dizisi oluşturun:
kubectl create secret docker-registry <secret-name> \
--namespace <namespace> \
--docker-server=<container-registry-name>.azurecr.io \
--docker-username=<service-principal-ID> \
--docker-password=<service-principal-password>
konumu:
Değer | Tanım |
---|---|
secret-name |
Görüntü çekme gizli dizisinin adı( örneğin, acr-secret) |
namespace |
Gizli diziyi yerleştirecek Kubernetes ad alanı Yalnızca gizli diziyi varsayılan ad alanı dışında bir ad alanına yerleştirmek istiyorsanız gereklidir |
container-registry-name |
Azure kapsayıcı kayıt defterinizin adı, örneğin myregistry--docker-server , kayıt defteri oturum açma sunucusunun tam adıdır |
service-principal-ID |
Kubernetes tarafından kayıt defterinize erişmek için kullanılacak hizmet sorumlusunun kimliği |
service-principal-password |
Hizmet sorumlusu parolası |
Görüntü çekme gizli dizisini kullanma
Görüntü çekme gizli dizisini oluşturduktan sonra Kubernetes podları ve dağıtımları oluşturmak için kullanabilirsiniz. Dağıtım dosyasında altındaki imagePullSecrets
gizli dizinin adını belirtin. Örnek:
apiVersion: v1
kind: Pod
metadata:
name: my-awesome-app-pod
namespace: awesomeapps
spec:
containers:
- name: main-app-container
image: myregistry.azurecr.io/my-awesome-app:v1
imagePullPolicy: IfNotPresent
imagePullSecrets:
- name: acr-secret
Yukarıdaki örnekte, my-awesome-app:v1
Azure kapsayıcı kayıt defterinden çekilmesi gereken görüntünün adı ve acr-secret
kayıt defterine erişmek için oluşturduğunuz çekme gizli dizisinin adıdır. Pod'u dağıttığınızda Kubernetes, kümede zaten yoksa görüntüyü kayıt defterinizden otomatik olarak çeker.
Sonraki adımlar
- Hizmet sorumluları ve Azure Container Registry ile çalışma hakkında daha fazla bilgi için bkz . Hizmet sorumlularıyla Azure Container Registry kimlik doğrulaması
- Kubernetes belgelerinde görüntü çekme gizli dizileri hakkında daha fazla bilgi edinin
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin