Tous les produits
Search
Centre de documentation

Container Service for Kubernetes:Extraire des images depuis une instance Container Registry sans utiliser de Secret

Dernière mise à jour :Aug 11, 2026

Le stockage des identifiants du registre dans des secrets Kubernetes engendre une surcharge liée à leur rotation et un risque de fuite. Elastic Container Instance (ECI) prend en charge l'authentification par rôle RAM pour l'extraction d'images, ce qui permet aux pods et aux caches d'images de s'authentifier auprès d'Alibaba Cloud Container Registry (ACR) sans aucun secret Kubernetes.

ACR propose des instances en édition personnelle et en édition professionnelle. Container Registry Enterprise Edition est une plateforme de niveau entreprise qui gère le cycle de vie des artefacts d'applications cloud native, notamment les images de conteneurs, les charts Helm et les artefacts Open Container Initiative (OCI). Elle est conçue pour les scénarios de déploiement à grande échelle.

Seules les images stockées dans des instances ACR prennent en charge l'extraction sans secret. Les images hébergées en dehors d'ACR (par exemple, les images Docker Hub) ne peuvent pas utiliser cette fonctionnalité.

Limites

  • Les annotations pour l'extraction sans secret prennent effet uniquement lors de la création d'un pod ou d'un cache d'images basé sur ECI. L'ajout ou la modification d'annotations sur un pod existant n'a aucun effet.

  • Ajoutez les annotations au bon emplacement dans votre manifeste. Pour un Deployment, ajoutez-les sous spec.template.metadata.annotations, et non sous metadata.annotations au niveau supérieur.

  • Les instances ACR Enterprise Edition utilisant un nom de domaine personnalisé ne sont pas activées par défaut pour l'extraction sans secret. Vous devez spécifier explicitement l'ID de l'instance à l'aide de l'annotation k8s.aliyun.com/acr-instance-ids.

Prérequis

Avant de commencer, assurez-vous que vous disposez des éléments suivants :

Choisir une méthode de configuration

La méthode dépend du fait que la ressource ECI et l'instance ACR appartiennent ou non au même compte Alibaba Cloud, ainsi que de l'édition d'ACR que vous utilisez.

Scénario

Comportement par défaut

Annotations requises

Même compte — Édition personnelle ou Enterprise Edition avec un nom de domaine par défaut

L'extraction sans secret est activée par défaut

Aucune annotation requise. Utilisez éventuellement k8s.aliyun.com/acr-service-arns pour restreindre les instances accessibles.

Même compte — Enterprise Edition avec un nom de domaine personnalisé

Non activé par défaut

k8s.aliyun.com/acr-instance-ids

Comptes différents — toute édition

Non activé par défaut

k8s.aliyun.com/acr-service-arns et k8s.aliyun.com/acr-user-arns (plus k8s.aliyun.com/acr-instance-ids si vous utilisez un nom de domaine personnalisé)

Restreindre les instances prenant en charge l'extraction sans secret (même compte)

Par défaut, ECI utilise le rôle lié au service AliyunServiceRoleForECI pour extraire des images. Ce rôle accorde l'accès à toutes les instances Personal Edition et à toutes les instances Enterprise Edition avec des noms de domaine par défaut dans le même compte. Pour limiter l'extraction à des instances spécifiques, créez un rôle RAM personnalisé et référencez-le dans votre manifeste.

Étape 1 : Créer un rôle RAM et attacher une politique personnalisée

  1. Créez un rôle RAM pour un service Alibaba Cloud de confiance. Consultez la rubrique Créer un rôle RAM pour un service Alibaba Cloud de confiance. Utilisez les paramètres suivants :

    Paramètre

    Valeur

    Entité de confiance

    Service Alibaba Cloud

    Type de rôle

    Rôle de service normal

    Nom du rôle RAM

    acr-test (exemple)

    Service de confiance

    ECI

  2. Créez une politique personnalisée qui limite l'extraction à une instance ACR spécifique. Consultez la rubrique Créer une politique personnalisée. L'exemple suivant autorise cr:Get* et cr:List* sur toutes les ressources, et cr:Pull* uniquement sur l'instance spécifiée :

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "cr:Get*",
                    "cr:List*"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "cr:Pull*"
                ],
                "Resource": [
                    "acs:cr:cn-hangzhou:1609982529******:instance/cri-nwj395hgf6f3****"
                ]
            }
        ]
    }

    Pour plus de détails sur la syntaxe des politiques, consultez la rubrique Éléments de politique.

  3. Attachez la politique personnalisée au rôle RAM. Consultez la rubrique Accorder des autorisations à un rôle RAM.

  4. Ouvrez la page des détails du rôle acr-test, vérifiez les autorisations attachées et copiez le nom de ressource Alibaba Cloud (ARN) du rôle.

    ACR-RAM0.png

Étape 2 : Référencer le rôle RAM dans votre manifeste

Ajoutez l'annotation k8s.aliyun.com/acr-service-arns pour spécifier le rôle RAM lors de la création d'un pod ECI ou d'un cache d'images.

Exemple : Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true"
      annotations:
        k8s.aliyun.com/acr-service-arns: "acs:ram::1609982529******:role/acr-test" # ARN of the RAM role
    spec:
      containers:
      - name: nginx
        image: test****-registry.cn-hangzhou.cr.aliyuncs.com/eci_test/nginx:1.0   # Image in the instance the role is allowed to pull from
        ports:
        - containerPort: 80

Spécifier une instance Enterprise Edition avec un nom de domaine personnalisé (même compte)

Si vous utilisez une instance ACR Enterprise Edition avec un nom de domaine personnalisé, ajoutez l'annotation k8s.aliyun.com/acr-instance-ids pour spécifier l'instance. L'annotation accepte un ou plusieurs ID d'instance.

Les instances Enterprise Edition peuvent être utilisées entre différentes régions. Pour référencer une instance située dans une région différente de celle de votre pod, préfixez l'ID de région à l'ID de l'instance. Exemple : cn-beijing:cri-j36zhodptmyq**** .

Exemple : Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true"
      annotations:
        k8s.aliyun.com/acr-instance-ids: "cri-j36zhodptmyq****"   # ACR Enterprise Edition instance ID
    spec:
      containers:
      - name: nginx
        image: test****-registry.example.com/eci_test/nginx:1.0   # Image in the Enterprise Edition instance with a custom domain name
        ports:
        - containerPort: 80

Exemple : ImageCache

apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
  name: imagecache-sample
  annotations:
    k8s.aliyun.com/acr-instance-ids: "cri-j36zhodptmyq****"   # ACR Enterprise Edition instance ID
spec:
  images:
  - test****-registry.example.com/eci_test/nginx:1.0
  imagePullSecrets:
  - default:secret1
  - default:secret2
  - kube-system:secret3
  imageCacheSize: 25
  retentionDays: 7

Extraire des images entre comptes

Si l'instance ACR et la ressource ECI appartiennent à des comptes Alibaba Cloud différents, configurez des rôles RAM dans les deux comptes pour établir une chaîne de confiance.

La configuration implique deux comptes :

  • Compte A : le compte dans lequel la ressource ECI (pod ou cache d'images) est créée.

  • Compte B : le compte dans lequel l'instance ACR est hébergée.

Étape 1 : Créer des rôles RAM dans les deux comptes

Dans le Compte A (compte ECI) :

  1. Créez un rôle RAM pour un service Alibaba Cloud de confiance. Consultez la rubrique Créer un rôle RAM pour un service Alibaba Cloud de confiance. Utilisez les paramètres suivants :

    Paramètre

    Valeur

    Entité de confiance

    Service Alibaba Cloud

    Type de rôle

    Rôle de service normal

    Nom du rôle RAM

    role-assume (exemple)

    Service de confiance

    ECI

  2. Accordez au rôle role-assume l'autorisation d'appeler l'API AssumeRole du Security Token Service (STS). Définissez le type de politique sur system policy et le nom de la politique sur AliyunSTSAssumeRoleAccess. Consultez la rubrique Accorder des autorisations à un rôle RAM.

  3. Ouvrez la page des détails du rôle role-assume. Vérifiez les autorisations et la politique de confiance, puis copiez l'ARN.

    • Autorisations et ARN :

      免密拉取ACR-RAM1.png

    • Politique de confiance :

      免密拉取ACR-RAM2.png

Dans le Compte B (compte ACR) :

  1. Créez un rôle RAM pour un compte Alibaba Cloud de confiance. Consultez la rubrique Créer un rôle RAM pour un compte Alibaba Cloud de confiance. Utilisez les paramètres suivants :

    Paramètre

    Valeur

    Entité de confiance

    Compte Alibaba Cloud

    Nom du rôle RAM

    role-acr (exemple)

    Compte de confiance

    Autre compte Alibaba Cloud — saisissez l'ID du Compte A

  2. Accordez au rôle role-acr l'autorisation d'extraire des images depuis ACR. Définissez le type de politique sur system policy et le nom de la politique sur AliyunContainerRegistryFullAccess. Consultez la rubrique Accorder des autorisations à un rôle RAM.

  3. Modifiez la politique de confiance de role-acr pour restreindre l'assomption au seul rôle role-assume. Par défaut, tous les utilisateurs RAM et rôles RAM du Compte A peuvent assumer le rôle role-acr. Pour limiter cela, définissez le champ RAM dans l'élément Principal sur l'ARN de role-assume :

    "Principal": {
        "RAM": [
            "acs:ram::1609982529******:role/role-assume"
        ]
    }

    Consultez la rubrique Modifier la politique de confiance d'un rôle RAM.

  4. Vérifiez les autorisations et la politique de confiance, puis copiez l'ARN de role-acr.

    • Autorisations et ARN :

      免密拉取ACR-RAM3.png

    • Politique de confiance :

      免密拉取ACR-RAM4.png

Étape 2 : Référencer les deux rôles RAM dans votre manifeste

Ajoutez les annotations k8s.aliyun.com/acr-service-arns et k8s.aliyun.com/acr-user-arns pour spécifier les rôles RAM des deux comptes. Si l'instance ACR utilise un nom de domaine personnalisé, ajoutez également k8s.aliyun.com/acr-instance-ids.

Les instances Enterprise Edition peuvent être utilisées entre différentes régions. Pour référencer une instance située dans une région différente de celle de votre pod, préfixez l'ID de région à l'ID de l'instance. Exemple : cn-beijing:cri-j36zhodptmyq**** .

Exemple : Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
  labels:
    app: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx-test
      labels:
        app: nginx
        alibabacloud.com/eci: "true"
      annotations:
        k8s.aliyun.com/acr-instance-ids: "cri-j36zhodptmyq****"                        # ACR instance ID
        k8s.aliyun.com/acr-service-arns: "acs:ram::1609982529******:role/role-assume"   # ARN of role-assume in Account A
        k8s.aliyun.com/acr-user-arns: "acs:ram::1298452580******:role/role-acr"         # ARN of role-acr in Account B
    spec:
      containers:
      - name: nginx
        image: test****-registry.example.com/eci_test/nginx:1.0   # Image in the Enterprise Edition instance with a custom domain name
        ports:
        - containerPort: 80

Exemple : ImageCache

apiVersion: eci.alibabacloud.com/v1
kind: ImageCache
metadata:
  name: imagecache-sample
  annotations:
    k8s.aliyun.com/acr-instance-ids: "cri-j36zhodptmyq****"
    k8s.aliyun.com/acr-service-arns: "acs:ram::1609982529******:role/role-assume"
    k8s.aliyun.com/acr-user-arns: "acs:ram::1298452580******:role/role-acr"
spec:
  images:
  - test****-registry.example.com/eci_test/nginx:1.0   # Image in the Enterprise Edition instance with a custom domain name
  imagePullSecrets:
  - default:secret1
  - default:secret2
  - kube-system:secret3
  imageCacheSize: 25
  retentionDays: 7

Rubriques connexes