O add-on sem credenciais automatiza a autenticação para puxar imagens e elimina a necessidade de configurar repetidamente o imagePullSecrets. Este tópico descreve como instalar, configurar e usar esse recurso, além de apresentar notas importantes sobre seu uso.
Como funciona
Ao utilizar o Container Registry (ACR) como fonte de imagens sem habilitar o acesso anônimo, seu cluster ACK precisa fornecer nome de usuário e senha para autenticar cada operação de pull. A solução comum é armazenar essas credenciais em um Secret, mas essa abordagem apresenta várias desvantagens:
Os Secrets são textos simples codificados em Base64, o que representa um risco de segurança caso sejam expostos.
Você deve especificar manualmente o
imagePullSecretspara cada workload.Não é possível compartilhar Secrets entre namespaces diferentes.
O add-on sem credenciais funciona da seguinte forma:
O add-on obtém credenciais temporárias da instância do ACR.
O add-on salva as credenciais temporárias em um Secret.
O add-on associa o Secret aos ServiceAccounts definidos em sua configuração.
Workloads que utilizam esses ServiceAccounts conseguem puxar imagens automaticamente por meio das credenciais temporárias armazenadas no Secret.
Esse add-on gerencia ServiceAccounts em múltiplos namespaces e renova periodicamente as credenciais temporárias. Tal mecanismo reduz riscos de segurança e remove a obrigação de adicionar manualmente o imagePullSecrets aos seus workloads. O uso do add-on sem credenciais é gratuito.
Comparação entre add-ons
O ACK oferece o add-on aliyun-acr-credential-helper em duas edições: gerenciada e autogerenciada. Você pode instalar apenas uma edição por vez. A tabela a seguir compara as duas versões.
|
Item |
aliyun-acr-credential-helper (gerenciado) |
aliyun-acr-credential-helper (autogerenciado) |
|
Versões de cluster suportadas |
Versão 1,22 ou posterior de clusters gerenciados ACK, clusters serverless ACK ou clusters ACK Edge |
Versão 1,20 ou posterior de clusters gerenciados ACK ou clusters dedicados ACK |
|
Recursos |
|
|
Para atualizar um cluster, consulte Manually upgrade a cluster .
Pré-requisitos
O cluster executa uma versão compatível com o add-on sem credenciais. Para mais detalhes, veja a tabela anterior.
-
Você possui uma instância do ACR Enterprise Edition.
ImportanteO add-on sem credenciais suporta apenas instâncias do ACR Enterprise Edition e instâncias do ACR Personal Edition criadas até 8 de setembro de 2024. Caso não possa utilizar este add-on, consulte How do I use imagePullSecrets?.
A função RAM utilizada pelo add-on sem credenciais tem as permissões adequadas. Para mais informações, consulte Conceder permissões.
-
Há conectividade de rede entre a instância do ACR Enterprise Edition e o cluster ACK.
Usar o add-on sem credenciais gerenciado
Etapa 1: Instalar o add-on
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Add-ons .
Na página Add-ons, clique na aba Security, localize o cartão aliyun-acr-credential-helper (managed) e clique em Install.
-
Na página Install add-on aliyun-acr-credential-helper, visualize as configurações de AcrInstanceInfo e outras opções. O campo AcrInstanceInfo contém as definições de cada instância do ACR associada ao add-on. As demais opções referem-se às configurações gerais do componente. Caso não precise alterar os namespaces ou ServiceAccounts monitorados, mantenha as configurações padrão.
Após a instalação, altere as configurações clicando em Configurations no cartão aliyun-acr-credential-helper (managed) dentro da página Add-ons .
Configurações de associação de instância ACR:
AcrInstanceInfo
Descrição
InstanceId
ID da instância do ACR. Obtenha esse ID no console do Container Registry.
ImportanteDeixe este campo em branco para instâncias do ACR Personal Edition. Este campo é obrigatório para instâncias do ACR Enterprise Edition.
regionId
ID da região onde a instância do ACR está implantada. Obtenha esse ID no console do Container Registry.
ImportanteEste parâmetro é obrigatório para pulls de imagens entre regiões.
domains
Nomes de domínio usados pelo add-on sem credenciais para acessar a instância do ACR. Por padrão, inclui todos os domínios (internet e VPC) da instância especificada. Para definir múltiplos domínios, separe-os por vírgulas (,).
Configurações para pull de imagens entre contas
Estas configurações aplicam-se a pulls de imagens entre contas. Se não precisar desse recurso, deixe os campos em branco.
assumeRoleARN
Nenhuma configuração é necessária para pulls na mesma conta. Para pulls entre contas, consulte Pull images across accounts.
expireDuration
rrsaRoleARN
rrsaOIDCProviderRoleARN
Etapa 2: Puxar uma imagem
Após instalar e configurar o add-on sem credenciais, especifique um ServiceAccount associado ao add-on ao criar um workload. Isso habilita o pull de imagens sem credenciais.
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 credential-free add-on.
containers:
- name: nginx
image: "******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest" # Specify the ACR image address.
ports:
- containerPort: 80
Usar o add-on sem credenciais autogerenciado
Etapa 1: Instalar o add-on
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Add-ons .
Na página Add-ons, clique na aba Security, localize o cartão aliyun-acr-credential-helper e clique em Install.
-
Na página Parameters, selecione um modo de permissão na lista suspensa tokenMode e clique em OK. Após a instalação, configure o add-on antes de puxar imagens. Para mais informações, consulte Step 2: Update the add-on configuration (add an ACR instance).
tokenMode
Descrição
auto
(Recomendado) O add-on detecta a data de criação do cluster e escolhe automaticamente o modo de permissão. Clusters criados antes de 3 de abril de 2023 usam o modo workerRole. Clusters criados em ou após 3 de abril de 2023 usam o modo managedRole.
ImportanteVersões do aliyun-acr-credential-helper lançadas em ou após 3 de abril de 2023 fornecem um parâmetro que permite personalizar a função RAM da qual o add-on depende. Para mais informações, consulte [Product Change] Announcement on changing the permissions required by the aliyun-acr-credential-helper add-on.
managedRole
O add-on usa a função AliyunCSManagedAcrRole autorizada em Prerequisites para obter permissões.
workerRole
O add-on utiliza a função RAM de worker do cluster para obter permissões. Conceda permissões específicas à função RAM de worker.
ImportanteSelecione este modo se precisar puxar imagens entre contas assumindo uma função.
Etapa 2: Atualizar a configuração do add-on
Depois de instalar o add-on sem credenciais, configure o ConfigMap acr-configuration para adicionar uma instância do ACR antes de puxar imagens. Realize essa tarefa via console ou kubectl.
Console
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
-
Na página ConfigMaps, selecione kube-system na lista suspensa Namespace. Em seguida, clique no ConfigMap acr-configuration e modifique as configurações conforme descrito na tabela a seguir.
Parâmetro
Descrição
watch-namespace
Namespaces onde deseja habilitar o pull de imagens sem credenciais. O valor padrão é default. Defina como all para ativar esse recurso em todos os namespaces. Para especificar vários namespaces, separe-os por vírgulas (,). Recomendamos especificar apenas seus namespaces de negócios e evitar o uso de
allou namespaces de componentes do sistema para evitar interrupções nos pulls de imagens do sistema.acr-api-version
Mantenha o valor padrão.
expiring-threshold
Limiar de expiração das credenciais no add-on. O valor padrão é
15m(15 minutos).acr-registry-info
Array de informações da instância do ACR no formato de string YAML multilinha. Cada instância é configurada com um conjunto de três parâmetros.
-
instanceId: ID da instância do ACR. Obtenha esse ID no console do Container Registry.ImportanteDeixe este campo em branco para instâncias do ACR Personal Edition. Este campo é obrigatório para instâncias do ACR Enterprise Edition.
-
regionId: ID da região onde a instância do ACR está implantada. Obtenha esse ID no console do Container Registry.ImportanteEste parâmetro é obrigatório para pulls de imagens entre regiões. Para um exemplo de configuração, veja a seção abaixo.
-
domains: Nomes de domínio usados pelo add-on sem credenciais para acessar a instância do ACR. Por padrão, inclui todos os domínios da instância especificada porinstanceId. Para definir múltiplos domínios, separe-os por vírgulas (,).
service-account
ServiceAccounts associados ao add-on sem credenciais. Para especificar vários ServiceAccounts, separe-os por vírgulas (,). Se definido como default, o add-on se associa ao ServiceAccount padrão em cada namespace especificado. Se definido como
"*", o add-on se associa a todos os ServiceAccounts nos namespaces indicados. -
kubectl
-
Execute o comando a seguir para editar o ConfigMap
acr-configuration. Consulte a tabela abaixo para detalhes da configuração.kubectl edit cm acr-configuration -n kube-systemChave do parâmetro
Descrição
Valor
service-account
ServiceAccounts alvo do add-on sem credenciais.
O valor padrão é default.
NotaPara especificar vários ServiceAccounts, separe-os por vírgulas (,). Se definido como
"*", aplica-se a todos os ServiceAccounts nos namespaces especificados.acr-registry-info
Array de informações da instância do ACR no formato de string YAML multilinha. Cada instância é configurada com um conjunto de três parâmetros.
NotaParâmetros de informação da instância:
-
instanceId: ID da instância. Obrigatório para instâncias Enterprise Edition.
-
regionId: Opcional. Assume como padrão a região local.
-
domains: Opcional. Assume como padrão todos os nomes de domínio da instância correspondente. Para especificar múltiplos domínios, separe-os por vírgulas (,).
Exemplo de configuração para uma instância do ACR Enterprise Edition:
- instanceId: <cri-instanceId> regionId: "cn-hangzhou" domains: "xxx.com,yyy.com"watch-namespace
Namespaces onde deseja habilitar o pull de imagens sem credenciais.
O valor padrão é default. Defina como all para ativar esse recurso em todos os namespaces. Para especificar vários namespaces, separe-os por vírgulas (,).
NotaRecomendamos especificar apenas seus namespaces de negócios e evitar o uso de all ou namespaces de componentes do sistema para evitar interrupções nos pulls de imagens do sistema.
expiring-threshold
Limiar de expiração para credenciais armazenadas em cache localmente.
O valor padrão é
15m(15 minutos). -
Etapa 3: Puxar uma imagem
Após instalar e configurar o add-on sem credenciais, especifique um ServiceAccount associado ao add-on ao criar um workload. Isso habilita o pull de imagens sem credenciais.
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 credential-free add-on.
containers:
- name: nginx
image: "******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest" # Specify the ACR image address.
ports:
- containerPort: 80
Perguntas frequentes
Habilitar uso imediato de ServiceAccounts
Este recurso requer a versão aliyun-acr-credential-helper v23.02.06.1-74e2172-aliyun ou posterior.
Quando ativado, o add-on sem credenciais usa um Webhook para monitorar alterações nos ServiceAccounts do cluster. Ao criar um novo ServiceAccount, o add-on injeta imediatamente o Secret sem credenciais. Isso é útil em cenários onde um ServiceAccount é utilizado logo após sua criação, como quando um Helm Chart cria simultaneamente um ServiceAccount e um Deployment. Esse recurso pode afetar o desempenho do add-on e não é recomendado para uso geral.
Managed add-on
Para ativar este recurso, instale o add-on acr-credential-helper-webhook no seu cluster:
Na página Clusters ACK, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Add-ons .
Na página Add-ons, clique na aba Security, localize o cartão acr-credential-helper-webhook (managed) e clique em Install.
Self-managed add-on
Para ativar este recurso, adicione os seguintes campos ao ConfigMap acr-configuration:
data:
webhook-configuration: |
enable: true
failure-policy: Ignore
timeout-seconds: 10
|
Parâmetro |
Descrição |
|
|
Define se o recurso Webhook deve ser ativado.
|
|
|
Política para tratamento de exceções durante a criação do ServiceAccount.
Importante
Devido a uma limitação do API Server do cluster, se |
|
|
Tempo limite para uma única solicitação de criação de ServiceAccount. Se o tempo for excedido, o sistema responde conforme a configuração de |
Solucionar falhas no pull de imagens
Uma causa possível é a configuração incorreta do add-on sem credenciais, por exemplo:
As informações da instância configuradas no add-on não correspondem à instância do ACR.
O endereço da imagem usado para o pull não corresponde ao nome de domínio especificado nas informações da instância do add-on.
Siga as etapas deste tópico para solucionar o problema.
Se o add-on estiver configurado corretamente, mas o pull da imagem ainda falhar, pode haver um conflito entre um campo imagePullSecrets especificado manualmente no YAML do workload e o add-on sem credenciais. Para resolver, remova manualmente o campo imagePullSecrets e recrie o Pod.
Como usar imagePullSecrets?
Instâncias do ACR Personal Edition criadas em ou após 9 de setembro de 2024 não suportam o add-on sem credenciais. Para essas instâncias, recomendamos armazenar o nome de usuário e a senha em um Secret e referenciá-lo no campo imagePullSecrets.
O add-on sem credenciais é incompatível com um campo
imagePullSecretsespecificado manualmente.O Secret deve estar no mesmo namespace do workload.
Tópicos relacionados
Para puxar imagens entre contas usando o add-on sem credenciais, consulte Pull images across accounts.
Para ver o histórico de alterações do add-on sem credenciais, consulte aliyun-acr-credential-helper.