O add-on sem credenciais automatiza a autenticação para o pull de imagens, eliminando a necessidade de configurar imagePullSecrets repetidamente. Este tópico descreve como instalar, configurar e usar o add-on, além de notas de uso importantes.
Como funciona
Ao usar o Container Registry (ACR) como source de imagens sem ativar o pull anônimo de imagens, seu cluster ACK deve fornecer um nome de usuário e uma senha para autenticar cada pull de imagem. A solução comum é armazenar essas credenciais em um Secret, mas essa abordagem tem várias desvantagens:
Os Secrets são textos simples codificados em Base64, o que representa um risco de segurança se expostos.
É necessário especificar
imagePullSecretsmanualmente para cada workload.Os Secrets não podem ser compartilhados entre namespaces.
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 especificados em sua configuração.
Os workloads que usam esses ServiceAccounts podem então fazer o pull de imagens automaticamente usando as credenciais temporárias armazenadas no Secret.
O add-on sem credenciais permite que você gerencie ServiceAccounts em vários namespaces e atualize periodicamente as credenciais temporárias. Isso reduz os riscos de segurança e elimina a necessidade de adicionar imagePullSecrets manualmente aos seus workloads. O add-on sem credenciais é gratuito.
Comparação de add-ons
O ACK fornece 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 edições.
|
Item |
aliyun-acr-credential-helper (managed) |
aliyun-acr-credential-helper (self-managed) |
|
Versões de cluster suportadas |
Versão 1.22 ou posterior de clusters ACK gerenciados, clusters ACK serverless ou clusters ACK Edge |
Versão 1.20 ou posterior de clusters ACK gerenciados ou clusters ACK dedicados |
|
Recursos |
|
|
Para atualizar um cluster, consulte Manually upgrade a cluster .
Pré-requisitos
Seu cluster executa uma versão suportada pelo add-on sem credenciais. Para mais informações, consulte 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. Se você não puder usar o add-on sem credenciais, consulte How do I use imagePullSecrets?.
As permissões são concedidas à função RAM usada pelo add-on sem credenciais. Para mais informações, consulte Conceder permissões.
-
A conectividade de rede está estabelecida entre a instância do ACR Enterprise Edition e o cluster ACK.
Usar o add-on sem credenciais gerenciado
Etapa 1: Instale o add-on
Faça login no console do 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 guia 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. AcrInstanceInfo contém as configurações para cada instância do ACR associada ao add-on. As outras opções são configurações do add-on. Se você não precisar alterar os namespaces ou ServiceAccounts que o add-on monitora, poderá manter as configurações padrão.
Após a instalação do add-on, você pode alterar suas configurações clicando em Configurations no cartão aliyun-acr-credential-helper (managed) na página Add-ons .
Configurações de associação de instância do ACR:
AcrInstanceInfo
Descrição
InstanceId
O id da instância do ACR. Você pode obter o 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
O id da região onde a instância do ACR está implantada. Você pode obter o id no console do Container Registry.
ImportanteEste parâmetro é obrigatório para o pull de imagens entre regiões.
domains
Os nomes de domínio usados pelo add-on sem credenciais para acessar a instância do ACR. Por padrão, isso inclui todos os nomes de domínio (internet e VPC) da instância do ACR especificada. Para especificar vários nomes de domínio, separe-os por vírgulas (,).
Configurações para pull de imagens entre contas
Essas configurações se aplicam ao pull de imagens entre contas. Se você não precisar desse recurso, deixe os campos em branco.
assumeRoleARN
Nenhuma configuração é necessária para o pull na mesma conta. Para o pull entre contas, consulte Pull images across accounts.
expireDuration
rrsaRoleARN
rrsaOIDCProviderRoleARN
Etapa 2: Fazer o pull de uma imagem
Após instalar e configurar o add-on sem credenciais, especifique um ServiceAccount associado ao add-on ao criar um workload. Isso ativa 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: Instale o add-on
Faça login no console do 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 guia 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 do add-on, você precisa configurar o ConfigMap antes de poder fazer o pull de 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 o horário de criação do cluster e escolhe automaticamente um 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.
ImportanteAs versõ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 usa a função RAM de worker do cluster para obter permissões. Você precisa conceder permissões específicas à função RAM de worker.
ImportanteSelecione este modo se precisar fazer o pull de imagens entre contas assumindo uma função.
Etapa 2: Atualize a configuração do add-on
Após a instalação do add-on sem credenciais, configure o ConfigMap acr-configuration para adicionar uma instância do ACR antes de poder fazer o pull de imagens. Você pode fazer isso usando o console ou o 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
Os namespaces onde você deseja ative o pull de imagens sem credenciais. O valor padrão é default. Defina o valor como all para ative esse recurso para todos os namespaces. Para especificar vários namespaces, separe-os por vírgulas (,). Recomendamos que você especifique apenas seus namespaces de negócios e evite usar
allou namespaces para componentes do sistema do cluster para evitar interrupções no pull de imagens do sistema.acr-api-version
Mantenha o valor padrão.
expiring-threshold
O limiar de expiração para credenciais no add-on. O valor padrão é
15m(15 minutos).acr-registry-info
Uma matriz de informações da instância do ACR no formato de string YAML de várias linhas. Cada instância é configurada com um conjunto de três parâmetros.
-
instanceId: O id da instância do ACR. Você pode obter o 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: O id da região onde a instância do ACR está implantada. Você pode obter o id no console do Container Registry.ImportanteEste parâmetro é obrigatório para o pull de imagens entre regiões. Para um exemplo de configuração, consulte a seção abaixo.
-
domains: Os nomes de domínio usados pelo add-on sem credenciais para acessar a instância do ACR. Por padrão, isso inclui todos os nomes de domínio da instância do ACR especificada porinstanceId. Para especificar vários nomes de domínio, separe-os por vírgulas (,).
service-account
Os ServiceAccounts associados ao add-on sem credenciais. Para especificar vários ServiceAccounts, separe-os por vírgulas (,). Se você definir o valor como default, o add-on se associa ao ServiceAccount padrão em cada namespace especificado. Se você definir o valor como
"*", o add-on se associa a todos os ServiceAccounts nos namespaces especificados. -
kubectl
-
Execute o seguinte comando e edite o ConfigMap
acr-configuration. Consulte a tabela a seguir para obter detalhes da configuração.kubectl edit cm acr-configuration -n kube-systemChave do parâmetro
Descrição
Valor
service-account
Os ServiceAccounts que o add-on sem credenciais tem como alvo.
O valor padrão é default.
NotaPara especificar vários ServiceAccounts, separe-os por vírgulas (,). Se você definir o valor como
"*", ele se aplicará a todos os ServiceAccounts nos namespaces especificados.acr-registry-info
Uma matriz de informações da instância do ACR no formato de string YAML de várias linhas. Cada instância é configurada com um conjunto de três parâmetros.
NotaParâmetros de informações da instância:
-
instanceId: O id da instância. Isso é obrigatório para instâncias Enterprise Edition.
-
regionId: Opcional. O padrão é a região local.
-
domains: Opcional. O padrão são todos os nomes de domínio da instância correspondente. Para especificar vários nomes de domínio, 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
Os namespaces onde você deseja ative o pull de imagens sem credenciais.
O valor padrão é default. Defina o valor como all para ative esse recurso para todos os namespaces. Para especificar vários namespaces, separe-os por vírgulas (,).
NotaRecomendamos que você especifique apenas seus namespaces de negócios e evite usar all ou namespaces para componentes do sistema do cluster para evitar interrupções no pull de imagens do sistema.
expiring-threshold
O limiar de expiração para credenciais armazenadas em cache localmente.
O valor padrão é
15m(15 minutos). -
Etapa 3: Fazer o pull de uma imagem
Após instalar e configurar o add-on sem credenciais, especifique um ServiceAccount associado ao add-on ao crie um workload. Isso ativa 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
Ative o uso imediato de ServiceAccounts
Este recurso requer 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 do ServiceAccount no cluster. Quando um novo ServiceAccount é criado, o add-on injeta imediatamente o Secret sem credenciais. Isso é útil para cenários em que um ServiceAccount é usado imediatamente após a criação, como quando um Helm Chart cria um ServiceAccount e um Deployment simultaneamente. Este recurso pode afetar o desempenho do add-on e não é recomendado para uso geral.
Add-on gerenciado
Para ative este recurso, instale o add-on acr-credential-helper-webhook em seu cluster:
Na página Clusters do ACK, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Add-ons.
Na página Add-ons, clique na guia Security, localize o cartão acr-credential-helper-webhook (managed) e clique em Install.
Add-on autogerenciado
Para ative 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 |
|
|
Especifica se deve ative o recurso Webhook.
|
|
|
A política para lidar com exceções durante a criação do ServiceAccount.
Importante
Devido a uma limitação do API Server do cluster, se |
|
|
O período de tempo limite para uma única solicitação de criação de ServiceAccount. Se o tempo limite for excedido, o sistema responderá de acordo com a configuração de |
Solucionar problemas de falhas no pull de imagens
Uma possível causa é uma configuração incorreta do add-on sem credenciais, por exemplo:
As informações da instância configuradas no add-on sem credenciais 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 neste tópico para solucionar o problema.
Se o add-on estiver configurado corretamente, mas o pull da imagem ainda falhar, isso pode ser devido a um conflito entre um campo imagePullSecrets especificado manualmente no YAML do workload e o add-on sem credenciais. Para resolver isso, remova manualmente o campo imagePullSecrets e recrie o Pod.
Como uso imagePullSecrets?
As 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 que você armazene o nome de usuário e a senha em um Secret e faça referência a ele 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 fazer o pull de imagens entre contas usando o add-on sem credenciais, consulte Pull images across accounts.
Para o histórico de alterações do add-on sem credenciais, consulte aliyun-acr-credential-helper.