Todos os produtos
Search
Central de documentação

Elastic Container Instance:Obter imagens de uma instância do Container Registry sem usar Secret

Última atualização: Jul 05, 2026

Armazenar credenciais de registro em Secrets do Kubernetes gera sobrecarga na rotação e risco de vazamento. O Elastic Container Instance (ECI) oferece suporte à identidade baseada em função RAM para obtenção de imagens, permitindo que pods e caches de imagem se autentiquem no Alibaba Cloud Container Registry (ACR) sem nenhum Secret do Kubernetes.

O ACR disponibiliza instâncias Personal Edition e Enterprise Edition. O Container Registry Enterprise Edition é uma plataforma de nível empresarial que gerencia o ciclo de vida de artefatos de aplicações nativas da nuvem, incluindo imagens de contêiner, gráficos Helm e artefatos da Open Container Initiative (OCI). Essa solução foi projetada para cenários de implantação em grande escala.

Apenas imagens armazenadas em instâncias do ACR permitem obtenção sem Secret. Imagens hospedadas fora do ACR (por exemplo, imagens do Docker Hub) não oferecem suporte a esse recurso.

Limitações

  • As anotações para obtenção sem Secret entram em vigor apenas durante a criação de um pod baseado em ECI ou de um cache de imagem. Adicionar ou modificar anotações em um pod existente não surte efeito.

  • Adicione as anotações no local correto do manifesto. Em um Deployment, insira-as em spec.template.metadata.annotations, e não no nível superior em metadata.annotations.

  • Instâncias do ACR Enterprise Edition com nome de domínio personalizado não têm a obtenção sem Secret ativada por padrão. Especifique explicitamente o ID da instância usando a anotação k8s.aliyun.com/acr-instance-ids.

Pré-requisitos

Antes de começar, verifique se você possui:

Escolha um método de configuração

O método depende de o recurso ECI e a instância do ACR pertencerem à mesma conta Alibaba Cloud e da edição do ACR utilizada.

Cenário

Comportamento padrão

Anotações necessárias

Mesma conta — Personal Edition ou Enterprise Edition com nome de domínio padrão

Obtenção sem Secret ativada por padrão

Nenhuma obrigatória. Opcionalmente, use k8s.aliyun.com/acr-service-arns para restringir as instâncias acessíveis.

Mesma conta — Enterprise Edition com nome de domínio personalizado

Não ativado por padrão

k8s.aliyun.com/acr-instance-ids

Contas diferentes — qualquer edição

Não ativado por padrão

k8s.aliyun.com/acr-service-arns e k8s.aliyun.com/acr-user-arns (além de k8s.aliyun.com/acr-instance-ids se estiver usando um nome de domínio personalizado)

Restringir quais instâncias permitem obtenção sem Secret (mesma conta)

Por padrão, o ECI usa a função vinculada ao serviço AliyunServiceRoleForECI para obter imagens. Essa função concede acesso a todas as instâncias Personal Edition e a todas as instâncias Enterprise Edition com nomes de domínio padrão na mesma conta. Para restringir a obtenção a instâncias específicas, crie uma função RAM personalizada e referencie-a no manifesto.

Etapa 1: Crie uma função RAM e anexar uma política personalizada

  1. Crie uma função RAM para um serviço confiável da Alibaba Cloud. Consulte Criar uma função RAM para um serviço confiável da Alibaba Cloud. Use as seguintes configurações:

    Parâmetro

    Valor

    Entidade confiável

    Alibaba Cloud Service

    Tipo de função

    Normal Service Role

    Nome da função RAM

    acr-test (exemplo)

    Serviço confiável

    ECI

  2. Crie uma política personalizada que restrinja a obtenção a uma instância específica do ACR. Consulte Criar uma política personalizada. O exemplo a seguir permite cr:Get* e cr:List* em todos os recursos, e cr:Pull* apenas na instância 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 detalhes sobre a sintaxe da política, consulte Elementos de política.

  3. Anexe a política personalizada à função RAM. Consulte Conceder permissões a uma função RAM.

  4. Abra a página de detalhes da função acr-test, verifique as permissões anexadas e copie o ARN (Alibaba Cloud Resource Name) da função.

    ACR-RAM0.png

Etapa 2: Referenciar a função RAM no manifesto

Adicione a anotação k8s.aliyun.com/acr-service-arns para especificar a função RAM ao criar um pod ECI ou cache de imagem.

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

Especifique uma instância Enterprise Edition com nome de domínio personalizado (mesma conta)

Se você utilizar uma instância do ACR Enterprise Edition com nome de domínio personalizado, adicione a anotação k8s.aliyun.com/acr-instance-ids para especificar a instância. A anotação aceita um ou mais IDs de instância.

Instâncias Enterprise Edition podem ser usadas entre regiões. Para referenciar uma instância em uma região diferente da do seu pod, adicione o prefixo do ID da região ao ID da instância. Exemplo: cn-beijing:cri-j36zhodptmyq**** .

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

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

Obter imagens entre contas

Se a instância do ACR e o recurso ECI pertencerem a contas Alibaba Cloud diferentes, configure funções RAM em ambas as contas para estabelecer uma cadeia de confiança.

A configuração envolve duas contas:

  • Conta A: conta onde o recurso ECI (pod ou cache de imagem) é criado.

  • Conta B: conta onde a instância do ACR está hospedada.

Etapa 1: Crie funções RAM em ambas as contas

Na Conta A (conta ECI):

  1. Crie uma função RAM para um serviço confiável da Alibaba Cloud. Consulte Criar uma função RAM para um serviço confiável da Alibaba Cloud. Use as seguintes configurações:

    Parâmetro

    Valor

    Entidade confiável

    Alibaba Cloud Service

    Tipo de função

    Normal Service Role

    Nome da função RAM

    role-assume (exemplo)

    Serviço confiável

    ECI

  2. Conceda à função role-assume permissão para chamar a API AssumeRole do Security Token Service (STS). Defina o tipo de política como system policy e o nome da política como AliyunSTSAssumeRoleAccess. Consulte Conceder permissões a uma função RAM.

  3. Abra a página de detalhes da função role-assume. Verifique as permissões e a política de confiança e copie o ARN.

    • Permissões e ARN:

      免密拉取ACR-RAM1.png

    • Política de confiança:

      免密拉取ACR-RAM2.png

Na Conta B (conta ACR):

  1. Crie uma função RAM para uma conta confiável da Alibaba Cloud. Consulte Criar uma função RAM para uma conta confiável da Alibaba Cloud. Use as seguintes configurações:

    Parâmetro

    Valor

    Entidade confiável

    Alibaba Cloud Account

    Nome da função RAM

    role-acr (exemplo)

    Conta confiável

    Other Alibaba Cloud Account — insira o ID da Conta A

  2. Conceda à função role-acr permissão para obter imagens do ACR. Defina o tipo de política como system policy e o nome da política como AliyunContainerRegistryFullAccess. Consulte Conceder permissões a uma função RAM.

  3. Edite a política de confiança de role-acr para restringir a assunção apenas a role-assume. Por padrão, todos os usuários RAM e funções RAM na Conta A podem assumir role-acr. Para limitar isso, defina o campo RAM no elemento Principal como o ARN de role-assume:

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

    Consulte Editar a política de confiança de uma função RAM.

  4. Verifique as permissões e a política de confiança e copie o ARN de role-acr.

    • Permissões e ARN:

      免密拉取ACR-RAM3.png

    • Política de confiança:

      免密拉取ACR-RAM4.png

Etapa 2: Referenciar ambas as funções RAM no manifesto

Adicione as anotações k8s.aliyun.com/acr-service-arns e k8s.aliyun.com/acr-user-arns para especificar as funções RAM de ambas as contas. Se a instância do ACR usar um nome de domínio personalizado, adicione também k8s.aliyun.com/acr-instance-ids.

Instâncias Enterprise Edition podem ser usadas entre regiões. Para referenciar uma instância em uma região diferente da do seu pod, adicione o prefixo do ID da região ao ID da instância. Exemplo: cn-beijing:cri-j36zhodptmyq**** .

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

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

Tópicos relacionados