Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Extraer imágenes de una instancia de Container Registry sin usar un Secret

Última actualización: Sep 05, 2026

Almacenar credenciales de registro en Secrets de Kubernetes implica una sobrecarga por rotación y el riesgo de fugas de credenciales. Elastic Container Instance (ECI) admite la identidad basada en roles de RAM para la extracción de imágenes, lo que permite a los pods y a las cachés de imágenes autenticarse en Alibaba Cloud Container Registry (ACR) sin necesidad de ningún Secret de Kubernetes.

ACR ofrece instancias Personal Edition y Enterprise Edition. Container Registry Enterprise Edition es una plataforma de nivel empresarial que gestiona el ciclo de vida de los artefactos de aplicaciones nativas de la nube, incluidas imágenes de contenedores, gráficos de Helm y artefactos de Open Container Initiative (OCI). Está diseñada para escenarios de despliegue a gran escala.

Solo las imágenes almacenadas en instancias de ACR admiten la extracción sin Secret. Las imágenes alojadas fuera de ACR (por ejemplo, imágenes de Docker Hub) no pueden utilizar esta función.

Limitaciones

  • Las anotaciones para la extracción sin Secret surten efecto solo cuando se crea un pod basado en ECI o una caché de imágenes. Agregar o modificar anotaciones en un pod existente no tiene ningún efecto.

  • Agregue las anotaciones en la ubicación correcta de su manifiesto. Para un Deployment, agréguelas bajo spec.template.metadata.annotations, no bajo el metadata.annotations de nivel superior.

  • Las instancias de ACR Enterprise Edition que utilizan un nombre de dominio personalizado no tienen habilitada la extracción sin Secret de forma predeterminada. Debe especificar explícitamente el ID de la instancia mediante la anotación k8s.aliyun.com/acr-instance-ids.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

Elegir un método de configuración

El método depende de si el recurso de ECI y la instancia de ACR pertenecen a la misma cuenta de Alibaba Cloud, así como de la edición de ACR que utilice.

Scenario

Default behavior

Annotations required

Misma cuenta — Personal Edition o Enterprise Edition con nombre de dominio predeterminado

La extracción sin Secret está habilitada de forma predeterminada

Ninguna obligatoria. Opcionalmente, use k8s.aliyun.com/acr-service-arns para restringir las instancias accesibles.

Misma cuenta — Enterprise Edition con nombre de dominio personalizado

No habilitada de forma predeterminada

k8s.aliyun.com/acr-instance-ids

Cuentas diferentes — cualquier edición

No habilitada de forma predeterminada

k8s.aliyun.com/acr-service-arns y k8s.aliyun.com/acr-user-arns (además de k8s.aliyun.com/acr-instance-ids si usa un nombre de dominio personalizado)

Restringir qué instancias admiten la extracción sin Secret (misma cuenta)

De forma predeterminada, ECI utiliza el rol vinculado al servicio AliyunServiceRoleForECI para extraer imágenes. Este rol otorga acceso a todas las instancias Personal Edition y a todas las instancias Enterprise Edition con nombres de dominio predeterminados en la misma cuenta. Para restringir la extracción a instancias específicas, cree un rol de RAM personalizado y refiéralo en su manifiesto.

Paso 1: Crear un rol de RAM y adjuntar una política personalizada

  1. Cree un rol de RAM para un servicio de confianza de Alibaba Cloud. Consulte Crear un rol de RAM para un servicio de confianza de Alibaba Cloud. Utilice la siguiente configuración:

    Parameter

    Value

    Entidad de confianza

    Alibaba Cloud Service

    Tipo de rol

    Normal Service Role

    Nombre del rol de RAM

    acr-test (ejemplo)

    Servicio de confianza

    ECI

  2. Cree una política personalizada que restrinja la extracción a una instancia específica de ACR. Consulte Crear una política personalizada. El siguiente ejemplo permite cr:Get* y cr:List* en todos los recursos, y cr:Pull* solo en la instancia especificada:

    {
        "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****"
                ]
            }
        ]
    }

    Para obtener detalles sobre la sintaxis de las políticas, consulte Elementos de política.

  3. Adjunte la política personalizada al rol de RAM. Consulte Otorgar permisos a un rol de RAM.

  4. Abra la página de detalles del rol acr-test, compruebe los permisos adjuntos y copie el Nombre de Recurso de Alibaba Cloud (ARN) del rol.

    ACR-RAM0.png

Paso 2: Referenciar el rol de RAM en su manifiesto

Agregue la anotación k8s.aliyun.com/acr-service-arns para especificar el rol de RAM al crear un pod de ECI o una caché de imágenes.

Ejemplo: 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

Especificar una instancia Enterprise Edition con nombre de dominio personalizado (misma cuenta)

Si utiliza una instancia de ACR Enterprise Edition con un nombre de dominio personalizado, agregue la anotación k8s.aliyun.com/acr-instance-ids para especificar la instancia. La anotación acepta uno o más IDs de instancia.

Las instancias Enterprise Edition pueden utilizarse entre regiones. Para referenciar una instancia en una región diferente a la de su pod, anteponga el ID de región al ID de la instancia. Ejemplo: cn-beijing:cri-j36zhodptmyq**** .

Ejemplo: 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

Ejemplo: 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

Extraer imágenes entre cuentas

Si la instancia de ACR y el recurso de ECI pertenecen a diferentes cuentas de Alibaba Cloud, configure roles de RAM en ambas cuentas para establecer una cadena de confianza.

La configuración involucra dos cuentas:

  • Cuenta A: la cuenta donde se crea el recurso de ECI (pod o caché de imágenes).

  • Cuenta B: la cuenta donde se aloja la instancia de ACR.

Paso 1: Crear roles de RAM en ambas cuentas

En la Cuenta A (cuenta de ECI):

  1. Cree un rol de RAM para un servicio de confianza de Alibaba Cloud. Consulte Crear un rol de RAM para un servicio de confianza de Alibaba Cloud. Utilice la siguiente configuración:

    Parameter

    Value

    Trusted entity

    Alibaba Cloud Service

    Role type

    Normal Service Role

    RAM role name

    role-assume (ejemplo)

    Trusted service

    ECI

  2. Otorgue al rol role-assume permiso para llamar a la API AssumeRole de Security Token Service (STS). Establezca el tipo de política en system policy y el nombre de la política en AliyunSTSAssumeRoleAccess. Consulte Otorgar permisos a un rol de RAM.

  3. Abra la página de detalles del rol role-assume. Compruebe los permisos y la política de confianza, y luego copie el ARN.

    • Permisos y ARN:

      免密拉取ACR-RAM1.png

    • Política de confianza:

      免密拉取ACR-RAM2.png

En la Cuenta B (cuenta de ACR):

  1. Cree un rol de RAM para una cuenta de confianza de Alibaba Cloud. Consulte Crear un rol de RAM para una cuenta de confianza de Alibaba Cloud. Utilice la siguiente configuración:

    Parameter

    Value

    Trusted entity

    Alibaba Cloud Account

    RAM role name

    role-acr (ejemplo)

    Trusted account

    Other Alibaba Cloud Account — introduzca el ID de la Cuenta A

  2. Otorgue al rol role-acr permiso para extraer imágenes de ACR. Establezca el tipo de política en system policy y el nombre de la política en AliyunContainerRegistryFullAccess. Consulte Otorgar permisos a un rol de RAM.

  3. Edite la política de confianza de role-acr para restringir la asunción únicamente a role-assume. De forma predeterminada, todos los usuarios de RAM y roles de RAM en la Cuenta A pueden asumir role-acr. Para limitar esto, establezca el campo RAM en el elemento Principal con el ARN de role-assume:

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

    Consulte Editar la política de confianza de un rol de RAM.

  4. Compruebe los permisos y la política de confianza, y luego copie el ARN de role-acr.

    • Permisos y ARN:

      免密拉取ACR-RAM3.png

    • Política de confianza:

      免密拉取ACR-RAM4.png

Paso 2: Referenciar ambos roles de RAM en su manifiesto

Agregue las anotaciones k8s.aliyun.com/acr-service-arns y k8s.aliyun.com/acr-user-arns para especificar los roles de RAM de ambas cuentas. Si la instancia de ACR utiliza un nombre de dominio personalizado, agregue también k8s.aliyun.com/acr-instance-ids.

Las instancias Enterprise Edition pueden utilizarse entre regiones. Para referenciar una instancia en una región diferente a la de su pod, anteponga el ID de región al ID de la instancia. Ejemplo: cn-beijing:cri-j36zhodptmyq**** .

Ejemplo: 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

Ejemplo: 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

Temas relacionados