Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Use the passwordless component to pull an image from an ACR Enterprise Edition instance in the same account

Dernière mise à jour :Aug 18, 2026

Le composant sans mot de passe automatise l'authentification pour le tirage d'images, éliminant ainsi la nécessité de configurer à plusieurs reprises les imagePullSecrets. Cette rubrique décrit comment installer, configurer et utiliser le composant sans mot de passe, et fournit des notes importantes.

Fonctionnement

Lorsque vous utilisez Container Registry (ACR) comme source d'images sans activer le tirage d'images anonyme, votre cluster ACK doit fournir un nom d'utilisateur et un mot de passe pour authentifier chaque tirage d'image. La solution courante consiste à stocker ces identifiants dans un Secret, mais cette approche présente plusieurs inconvénients :

  • Les Secrets sont encodés en Base64 en texte clair, ce qui pose un risque de sécurité en cas d'exposition.

  • Vous devez spécifier manuellement les imagePullSecrets pour chaque charge de travail.

  • Les Secrets ne peuvent pas être partagés entre les namespaces.

Le composant sans mot de passe fonctionne comme suit :

  1. Le composant sans mot de passe obtient des identifiants temporaires auprès de l'instance ACR.

  2. Le composant enregistre les identifiants temporaires dans un Secret.

  3. Le composant associe le Secret aux ServiceAccounts spécifiés dans sa configuration.

  4. Les charges de travail qui utilisent ces ServiceAccounts peuvent alors tirer automatiquement des images en utilisant les identifiants temporaires stockés dans le Secret.

Le composant sans mot de passe peut gérer les ServiceAccounts sur plusieurs namespaces et actualise automatiquement les identifiants temporaires selon une planification. Cela réduit les risques de sécurité et élimine la nécessité d'ajouter manuellement des imagePullSecrets à vos charges de travail. Le composant sans mot de passe est gratuit.

Comparaison des composants

ACK propose le composant aliyun-acr-credential-helper en deux éditions : gérée et autogérée. Vous ne pouvez installer qu'une seule édition à la fois. Le tableau suivant compare les deux éditions.

Élément

aliyun-acr-credential-helper (géré)

aliyun-acr-credential-helper (autogéré)

Versions de cluster prises en charge

Version 1.22 ou ultérieure des clusters ACK gérés, des clusters ACK serverless ou des clusters ACK Edge

Version 1.20 ou ultérieure des clusters ACK gérés ou des clusters ACK dédiés

Fonctionnalités

  • Aucune gestion autonome requise

  • Prend en charge les tirages d'images intercomptes via RRSA

  • Prend en charge la consultation des journaux du composant

  • Prend en charge les tirages d'images intercomptes via un rôle RAM de nœud de travail, RRSA ou une paire AccessKey

Pour mettre à niveau un cluster, consultez Mettre à niveau manuellement un cluster .

Prérequis

  • La version de votre cluster est prise en charge par le composant sans mot de passe. Pour plus d'informations, consultez le tableau précédent.

  • Vous disposez d'une instance ACR Enterprise Edition.

    Important
    • Le composant sans mot de passe prend uniquement en charge les instances ACR Enterprise Edition et les instances ACR Personal Edition créées le 8 septembre 2024 ou avant cette date. Si vous ne pouvez pas utiliser le composant sans mot de passe, consultez Comment utiliser imagePullSecrets ?.

  • Les autorisations sont accordées au rôle RAM utilisé par le composant sans mot de passe. Pour plus d'informations, consultez Accorder des autorisations.

  • La connectivité réseau est établie entre l'instance ACR Enterprise Edition et le cluster ACK.

    Configurer la connectivité réseau

    Avant de tirer une image, assurez-vous que l'instance ACR Enterprise Edition et le cluster ACK peuvent communiquer entre eux et que les noms de domaine requis peuvent être résolus. Vous pouvez utiliser l'une des méthodes suivantes pour tirer des images au sein du même compte :

    • Contrôle d'accès VPC ACR : si l'instance ACR Enterprise Edition et le cluster ACK se trouvent dans la même région, le cluster ACK peut accéder à l'instance ACR via un VPC. Pour plus d'informations, consultez Configurer le contrôle d'accès réseau.

    • Connexion d'appairage VPC : si l'instance ACR et le cluster ACK ne se trouvent pas dans le même VPC, vous pouvez utiliser une connexion d'appairage VPC pour connecter les deux VPC. Cela permet au cluster ACK d'accéder à l'instance ACR Enterprise Edition. L'appairage VPC est gratuit pour les VPC situés dans la même région, mais entraîne des frais pour les VPC situés dans des régions différentes. Pour plus d'informations, consultez Facturation. Les blocs CIDR des deux VPC ne doivent pas se chevaucher. Si les blocs CIDR utilisés se chevauchent, vous devez modifier l'architecture réseau existante.

      Procédure de connexion d'appairage VPC

      1. Activer la résolution de noms de domaine privés pour l'instance ACR

        Après avoir connecté l'instance ACR Enterprise Edition au VPC, vous pouvez accéder à l'instance au sein du VPC en utilisant son nom de domaine privé. Après la configuration, obtenez l'ID VPC et l'adresse IP privée de l'instance ACR Enterprise Edition.
      2. Obtenir le nom de domaine et l'adresse IP de l'instance ACR

        Obtenez le nom de domaine et l'adresse IP du service d'authentification utilisé pour accéder à l'instance ACR Enterprise Edition, ainsi que le nom de domaine et l'adresse IP du bucket OSS associé.
      3. Créer une connexion d'appairage VPC et configurer une table de routage

        Vous devez ajouter des entrées de routage pointant vers le VPC pair aux deux extrémités de la connexion d'appairage VPC pour permettre la communication privée entre les VPC du cluster ACK et de l'instance ACR Enterprise Edition. À l'extrémité du cluster ACK de la connexion d'appairage VPC, vous devez également configurer des entrées de routage pour l'adresse IP du service d'authentification et l'adresse IP du bucket OSS associé.
      4. Résoudre le nom de domaine de l'instance ACR pour le cluster ACK

        Utilisez des méthodes telles que l'ajout d'un enregistrement DNS privé ou l'utilisation d'un script de données personnalisées de pool de nœuds pour modifier par lot le fichier /etc/hosts . Cela permet de résoudre le nom de domaine de l'instance ACR vers son adresse IP privée, permettant au cluster ACK de transférer le trafic vers le VPC de l'instance ACR via les entrées de routage configurées.
    • Internet : si l'instance ACR Enterprise Edition et le cluster ACK peuvent tous deux accéder à Internet, les images peuvent être transférées via Internet. Pour plus d'informations, consultez Configurer le contrôle d'accès public pour une instance ACR et Activer l'accès Internet pour un cluster.

Utiliser le composant sans mot de passe géré

Étape 1 : Installer le composant

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Add-ons .

  3. Sur la page Add-ons, cliquez sur l'onglet Security, recherchez la carte aliyun-acr-credential-helper (managed), puis cliquez sur Install.

  4. Sur la page Install component aliyun-acr-credential-helper, consultez les paramètres AcrInstanceInfo et les autres options. AcrInstanceInfo contient les paramètres pour chaque instance ACR associée au composant. Les autres options correspondent aux paramètres du composant. Si vous n'avez pas besoin de modifier les namespaces ou les ServiceAccounts surveillés par le composant, vous pouvez conserver les paramètres par défaut.

    Après l'installation du composant, vous pouvez modifier ses paramètres en cliquant sur Configurations sur la carte aliyun-acr-credential-helper (managed) de la page Add-ons .

    Paramètres d'association d'instance ACR :

    AcrInstanceInfo

    Description

    InstanceId

    L'ID de l'instance ACR. Vous pouvez obtenir l'ID depuis la console Container Registry.

    Important

    Laissez ce champ vide pour les instances ACR Personal Edition. Ce champ est obligatoire pour les instances ACR Enterprise Edition.

    regionId

    L'ID de la région où l'instance ACR est déployée. Vous pouvez obtenir l'ID depuis la console Container Registry.

    Important

    Ce paramètre est requis pour les tirages d'images interrégions.

    domains

    Les noms de domaine utilisés par le composant sans mot de passe pour accéder à l'instance ACR. Par défaut, cela inclut tous les noms de domaine (Internet et VPC) de l'instance ACR spécifiée. Pour spécifier plusieurs noms de domaine, séparez-les par des virgules (,).

    Paramètres pour les tirages d'images intercomptes

    Ces paramètres s'appliquent aux tirages d'images intercomptes. Si vous n'avez pas besoin de cette fonctionnalité, laissez les champs vides.

    assumeRoleARN

    Aucune configuration n'est requise pour les tirages au sein du même compte. Pour les tirages intercomptes, consultez Tirer des images entre comptes.

    expireDuration

    rrsaRoleARN

    rrsaOIDCProviderRoleARN

    Paramètres du composant

    Paramètre

    Description

    Enable RRSA

    Sélectionnez cette case pour activer RRSA. Aucune configuration n'est requise pour les tirages au sein du même compte. Pour les tirages intercomptes, consultez Tirer des images entre comptes.

    watchNamespace

    Les namespaces dans lesquels vous souhaitez activer les tirages d'images sans mot de passe. La valeur par défaut est default. Définissez la valeur sur all pour activer cette fonctionnalité pour tous les namespaces. Pour spécifier plusieurs namespaces, séparez-les par des virgules (,). Nous vous recommandons de spécifier uniquement vos namespaces métier et d'éviter d'utiliser all ou les namespaces des composants système du cluster afin d'éviter toute perturbation des tirages d'images système.

    serviceAccount

    Spécifie le ServiceAccount auquel s'applique le composant sans mot de passe géré. La valeur par défaut est Default. Une valeur de Default applique le composant au ServiceAccount par défaut dans les namespaces spécifiés. Si vous définissez la valeur sur *, le composant s'applique à tous les ServiceAccounts du namespace spécifié. Pour spécifier plusieurs ServiceAccounts, séparez-les par une virgule (,).

    expiringThreshold

    Le seuil d'expiration des identifiants dans le composant. La valeur par défaut est 15m.

    notifyEmail

    Aucune configuration n'est requise.

Étape 2 : Tirer une image

Après avoir installé et configuré le composant sans mot de passe, spécifiez un ServiceAccount associé au composant lors de la création d'une charge de travail. Cela permet le tirage d'images sans mot de passe.

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 passwordless component.
      containers:
      - name: nginx
        image: "******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest" # Specify the ACR image address.
        ports:
        - containerPort: 80

Utiliser le composant sans mot de passe autogéré

Étape 1 : Installer le composant

  1. Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.

  2. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Add-ons .

  3. Sur la page Add-ons, cliquez sur l'onglet Security, recherchez la carte aliyun-acr-credential-helper, puis cliquez sur Install.

  4. Sur la page Parameters, sélectionnez un mode d'autorisation dans la liste déroulante tokenMode et cliquez sur OK. Après l'installation du composant, vous devez le configurer avant de pouvoir tirer des images. Pour plus d'informations, consultez Étape 2 : Mettre à jour la configuration du composant (ajouter une instance ACR).

    tokenMode

    Description

    auto

    (Recommandé) Le composant détecte l'heure de création du cluster et choisit automatiquement un mode d'autorisation. Les clusters créés avant le 3 avril 2023 utilisent le mode workerRole. Les clusters créés le 3 avril 2023 ou après cette date utilisent le mode managedRole.

    Important

    Les versions d'aliyun-acr-credential-helper publiées le 3 avril 2023 ou après cette date fournissent un paramètre qui vous permet de personnaliser le rôle RAM dont dépend le composant. Pour plus d'informations, consultez [Annonce de modification de produit] Annonce sur la modification des autorisations requises par le composant aliyun-acr-credential-helper.

    managedRole

    Le composant utilise le rôle AliyunCSManagedAcrRole autorisé dans les Prérequis pour obtenir des autorisations.

    workerRole

    Le composant utilise le rôle RAM de nœud de travail du cluster pour obtenir des autorisations. Vous devez accorder des autorisations spécifiques au rôle RAM de nœud de travail.

    Sélectionner workerRole comme mode de composant

    Si vous sélectionnez workerRole comme mode d'autorisation du composant, le rôle RAM de nœud de travail du cluster doit disposer des autorisations suivantes. Pour savoir comment accorder des autorisations, consultez Gérer les autorisations de rôle RAM.

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "cr:GetAuthorizationToken",
                    "cr:ListInstanceEndpoint",
                    "cr:PullRepository"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
    Important

    Sélectionnez ce mode si vous devez tirer des images entre comptes en assumant un rôle.

Étape 2 : Mettre à jour la configuration du composant

Après l'installation du composant sans mot de passe, vous devez configurer le ConfigMap acr-configuration pour ajouter une instance ACR avant de pouvoir tirer des images. Vous pouvez procéder via la console ou kubectl.

Console

  1. Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Configurations > ConfigMaps.

  2. Sur la page ConfigMaps, sélectionnez kube-system dans la liste déroulante Namespace. Ensuite, cliquez sur le ConfigMap acr-configuration et modifiez les paramètres comme décrit dans le tableau suivant.

    Paramètre

    Description

    watch-namespace

    Les namespaces dans lesquels vous souhaitez activer les tirages d'images sans mot de passe. La valeur par défaut est default. Définissez la valeur sur all pour activer cette fonctionnalité pour tous les namespaces. Pour spécifier plusieurs namespaces, séparez-les par des virgules (,). Nous vous recommandons de spécifier uniquement vos namespaces métier et d'éviter d'utiliser all ou les namespaces des composants système du cluster afin d'éviter toute perturbation des tirages d'images système.

    acr-api-version

    Conservez la valeur par défaut.

    expiring-threshold

    Le seuil d'expiration des identifiants dans le composant. La valeur par défaut est 15m (15 minutes).

    acr-registry-info

    Un tableau d'informations d'instance ACR au format de chaîne YAML multiligne. Chaque instance est configurée avec un ensemble de trois paramètres.

    • instanceId : l'ID de l'instance ACR. Vous pouvez obtenir l'ID depuis la console Container Registry.

      Important

      Laissez ce champ vide pour les instances ACR Personal Edition. Ce champ est obligatoire pour les instances ACR Enterprise Edition.

    • regionId : l'ID de la région où l'instance ACR est déployée. Vous pouvez obtenir l'ID depuis la console Container Registry.

      Important

      Ce paramètre est requis pour les tirages d'images interrégions. Pour un exemple de configuration, consultez la section ci-dessous.

    • domains : les noms de domaine utilisés par le composant sans mot de passe pour accéder à l'instance ACR. Par défaut, cela inclut tous les noms de domaine de l'instance ACR spécifiée par instanceId. Pour spécifier plusieurs noms de domaine, séparez-les par des virgules (,).

    Exemple de configuration pour les tirages interrégions

    Lors de l'utilisation de plusieurs instances ACR dans différentes régions, vous devez spécifier l'ID et la région pour chaque instance.

    data:
            service-account: "default"
            watch-namespace: "all"
            expiring-threshold: "15m"
            notify-email: "c*@aliyuncs.com"
            acr-registry-info: |
              - instanceId: "cri-instanceId"
                regionId: "cn-beijing"
              - instanceId: "cri-instanceId"
                regionId: "cn-hangzhou"      

    service-account

    Les ServiceAccounts associés au composant sans mot de passe. Pour spécifier plusieurs ServiceAccounts, séparez-les par des virgules (,). Si vous définissez la valeur sur default, le composant s'associe au ServiceAccount par défaut dans chaque namespace spécifié. Si vous définissez la valeur sur "*", le composant s'associe à tous les ServiceAccounts dans les namespaces spécifiés.

kubectl

  1. Exécutez la commande suivante pour modifier le ConfigMap acr-configuration. Consultez le tableau suivant pour les détails de configuration.

    kubectl edit cm acr-configuration -n kube-system

    Clé de paramètre

    Description

    Valeur

    service-account

    Les ServiceAccounts ciblés par le composant sans mot de passe.

    La valeur par défaut est default.

    Remarque

    Pour spécifier plusieurs ServiceAccounts, séparez-les par des virgules (,). Si vous définissez la valeur sur "*", cela s'applique à tous les ServiceAccounts dans les namespaces spécifiés.

    acr-registry-info

    Un tableau d'informations d'instance ACR au format de chaîne YAML multiligne. Chaque instance est configurée avec un ensemble de trois paramètres.

    Remarque

    Paramètres d'information d'instance :

    • instanceId : l'ID de l'instance. Ceci est requis pour les instances Enterprise Edition.

    • regionId : facultatif. Par défaut, la région locale.

    • domains : facultatif. Par défaut, tous les noms de domaine de l'instance correspondante. Pour spécifier plusieurs noms de domaine, séparez-les par des virgules (,).

    Exemple de configuration pour une instance ACR Enterprise Edition :

    - instanceId: <cri-instanceId>
      regionId: "cn-hangzhou"
      domains: "xxx.com,yyy.com"

    watch-namespace

    Les namespaces dans lesquels vous souhaitez activer les tirages d'images sans mot de passe.

    La valeur par défaut est default. Définissez la valeur sur all pour activer cette fonctionnalité pour tous les namespaces. Pour spécifier plusieurs namespaces, séparez-les par des virgules (,).

    Remarque

    Nous vous recommandons de spécifier uniquement vos namespaces métier et d'éviter d'utiliser all ou les namespaces des composants système du cluster afin d'éviter toute perturbation des tirages d'images système.

    expiring-threshold

    Le seuil d'expiration des identifiants mis en cache localement.

    La valeur par défaut est 15m (15 minutes).

Étape 3 : Tirer une image

Après avoir installé et configuré le composant sans mot de passe, spécifiez un ServiceAccount associé au composant lors de la création d'une charge de travail. Cela permet le tirage d'images sans mot de passe.

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 passwordless component.
      containers:
      - name: nginx
        image: "******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest" # Specify the ACR image address.
        ports:
        - containerPort: 80

FAQ

Activer l'utilisation immédiate des ServiceAccounts

Important

Cette fonctionnalité nécessite aliyun-acr-credential-helper v23.02.06.1-74e2172-aliyun ou une version ultérieure.

Lorsqu'elle est activée, le composant sans mot de passe utilise un Webhook pour surveiller les modifications des ServiceAccounts dans le cluster. Lorsqu'un nouveau ServiceAccount est créé, le composant injecte immédiatement le Secret sans mot de passe. Cela s'avère utile dans les scénarios où un ServiceAccount est utilisé immédiatement après sa création, par exemple lorsqu'un Helm Chart crée simultanément un ServiceAccount et un Deployment. Cette fonctionnalité peut affecter les performances du composant et n'est pas recommandée pour une utilisation générale.

Composant géré

Pour activer cette fonctionnalité, installez le composant acr-credential-helper-webhook dans votre cluster :

  1. Sur la page Clusters ACK, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Add-ons .

  2. Sur la page , cliquez sur l'onglet Security, recherchez la carte acr-credential-helper-webhook (managed), puis cliquez sur Install.

Composant autogéré

Pour activer cette fonctionnalité, ajoutez les champs suivants au ConfigMap acr-configuration :

data:
  webhook-configuration: |
    enable: true
    failure-policy: Ignore
    timeout-seconds: 10

Paramètre

Description

enable

Indique s'il faut activer la fonctionnalité Webhook.

  • true : active la fonctionnalité.

  • false : désactive la fonctionnalité.

failure-policy

La politique de gestion des exceptions lors de la création de ServiceAccount.

  • Ignore : ignore l'exception et permet la création normale du ServiceAccount. Le Secret de tirage d'image peut ne pas être attaché.

  • Fail : interrompt la création du ServiceAccount en cas d'exception. Cela n'est pas recommandé car cela peut entraîner des échecs de déploiement.

Important

En raison d'une limitation de l'API Server du cluster, si timeout-seconds est défini sur 15, failure-policy est défini sur Fail et que vous créez continuellement 10 ServiceAccounts par seconde, la création des ServiceAccounts échouera.

timeout-seconds

Le délai d'expiration pour une demande unique de création de ServiceAccount. Si le délai est dépassé, le système répond selon le paramètre failure-policy. La valeur par défaut est de 10 secondes (s).

Dépanner les échecs de tirage d'images

Une cause possible est une configuration incorrecte du composant sans mot de passe, par exemple :

  • Les informations d'instance configurées dans le composant sans mot de passe ne correspondent pas à l'instance ACR.

  • L'adresse d'image utilisée pour le tirage ne correspond pas au nom de domaine spécifié dans les informations d'instance du composant.

Suivez les étapes de cette rubrique pour résoudre le problème.

Si le composant est correctement configuré mais que le tirage d'image échoue toujours, cela peut être dû à un conflit entre un champ imagePullSecrets spécifié manuellement dans le YAML de la charge de travail et le composant sans mot de passe. Pour résoudre ce problème, supprimez manuellement le champ imagePullSecrets et recréez le Pod.

Comment utiliser imagePullSecrets ?

Les instances ACR Personal Edition créées le 9 septembre 2024 ou après cette date ne prennent pas en charge le composant sans mot de passe. Pour ces instances, nous vous recommandons de stocker le nom d'utilisateur et le mot de passe dans un Secret et de le référencer dans le champ imagePullSecrets.

Important
  • Le composant sans mot de passe est incompatible avec un champ imagePullSecrets spécifié manuellement.

  • Le Secret doit se trouver dans le même namespace que la charge de travail.

Exemple d'utilisation d'imagePullSecrets

Exécutez la commande suivante et remplacez les paramètres pour créer un Secret avec votre nom d'utilisateur et votre mot de passe.

kubectl create secret docker-registry image-secret-1 \
  --docker-server=<registry-server> \
  --docker-username=<name> \
  --docker-password=<password> \
  --docker-email=<email>

Utilisez le Secret dans votre charge de travail :

apiVersion: apps/v1
kind: Deployment 
metadata:
  name: nginx-test
  namespace: default 
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx 
    spec:
      imagePullSecrets:
      - name: image-secret-1  # Use the Secret created in the previous step.
      containers:
      - name: nginx 
        image: <acrID>.cr.aliyuncs.com/<repo>/nginx:latest  # Replace with the ACR image address.

Rubriques connexes