Em um ambiente multiconta da Alibaba Cloud, um cluster ACK e uma instância do ACR Enterprise Edition podem ser gerenciados por contas diferentes de unidades de negócios distintas. Para permitir que um cluster ACK faça pull de imagens de contêiner de uma instância do ACR Enterprise Edition e implante cargas de trabalho, garanta a conectividade de rede e conceda as permissões entre contas necessárias. Este tópico explica como usar o componente sem senha aliyun-acr-credential-helper para fazer pull de imagens entre contas.
Guia de decisão
Primeiro, selecione um método de conexão de rede e um método de autorização de conta. Em seguida, escolha um componente sem credenciais compatível com os métodos selecionados.
Para obter instruções detalhadas, siga as etapas em Configurar conexões de rede e Configurar autorização de conta e componente sem credenciais e, em seguida, Verificar o pull de imagens entre contas .
Neste tópico, o acesso entre contas refere-se ao acesso entre contas da Alibaba Cloud (contas raiz) diferentes, e não entre usuários RAM (subcontas).
Pré-requisitos
A função RAM usada pelo componente sem senha recebeu as permissões necessárias.
-
Seu cluster ACK deve oferecer suporte ao componente sem senha.
-
aliyun-acr-credential-helper (gerenciado)
Versão 1,22 ou posterior de clusters gerenciados ACK, clusters serverless ACK ou clusters ACK Edge
-
aliyun-acr-credential-helper (autogerenciado)
Versão 1,20 ou posterior de clusters gerenciados ACK ou clusters dedicados ACK
-
-
A instância do Container Registry (ACR) deve ser uma instância Enterprise Edition.
ImportanteO componente sem senha oferece suporte apenas a instâncias do ACR Enterprise Edition e instâncias do ACR Personal Edition criadas até 8 de setembro de 2024. Caso não possa usar o componente sem senha, consulte Como uso imagePullSecrets?.
Procedimento
Etapa 1: Configurar conexões de rede
Ao fazer pull de uma imagem entre contas, o cluster ACK solicitante e a instância do ACR Enterprise Edition hospedeira estão em VPCs diferentes, pertencentes a contas distintas e possivelmente em regiões diferentes. Antes de fazer o pull da imagem, estabeleça a conectividade de rede e garanta a resolução dos nomes de domínio relevantes. Utilize um dos seguintes métodos:
Conexão pública: Configure um endpoint público para a instância do ACR Enterprise Edition e ative o acesso à rede pública para o cluster ACK. A transferência da imagem ocorre pela internet pública. Este método é menos seguro e gera custos tanto para o endereço IP elástico quanto para o tráfego de saída.
Conexão de peering de VPC: Use uma conexão de peering de VPC para conectar as duas VPCs, permitindo que o cluster ACK acesse a instância do ACR Enterprise Edition. Esse recurso é gratuito se as VPCs estiverem na mesma região, mas será cobrado se estiverem em regiões diferentes. Este método exige que as duas VPCs tenham blocos CIDR sem sobreposição. Se houver sobreposição significativa nos blocos CIDR já em uso, talvez seja necessário redesenhar sua arquitetura de rede existente.
Conexão via Cloud Enterprise Network (CEN): Uma instância CEN pode conter um ou mais roteadores de trânsito. Vários roteadores de trânsito podem ser interconectados por meio de conexões entre regiões para habilitar a comunicação de VPC entre diferentes regiões e contas.
Para comparar conexões de peering de VPC e CEN, consulte Quais são as diferenças entre Cloud Enterprise Network e VPC Peering Connection?
|
Item de comparação |
Conexão pública |
Conexão de peering de VPC |
Cloud Enterprise Network (CEN) |
|
Tipo de rede |
Pública |
Privada |
Privada |
|
Faturamento |
As taxas são cobradas com base nos métodos de faturamento de endereços IP elásticos. |
|
As taxas são cobradas com base nas regras de faturamento do CEN. |
|
Recursos principais |
Não requer alterações na arquitetura de rede existente. Por questões de segurança, configure regras de entrada e saída, além de políticas de controle de acesso. |
|
|
|
Procedimento de configuração |
|
|
|
Etapa 2: Configurar autorização e componente sem senha
Os três métodos de autorização a seguir permitem fazer pull de imagens entre contas sem usar credenciais estáticas. Escolha o método que melhor atende aos seus requisitos.
|
Item de comparação |
RRSA |
Função RAM de Worker |
AccessKey de usuário RAM |
|
Tipo de cluster |
Compatível com clusters ACK Basic, clusters ACK Pro, clusters ACK Edge e clusters ACK Serverless Pro v1.22 e posteriores. |
Compatível com clusters ACK Basic, clusters ACK Pro e clusters dedicados ACK v1.20 e posteriores. |
Compatível com clusters ACK Basic, clusters ACK Pro e clusters dedicados ACK v1.20 e posteriores. |
|
Componentes suportados |
Para mais informações sobre as diferenças entre esses componentes, consulte Comparação de componentes sem senha. |
Componente aliyun-acr-credential-helper |
Componente aliyun-acr-credential-helper |
|
Granularidade de permissão |
Nível de Pod (granularidade fina) |
Nível de cluster (granularidade média) |
Nível de conta (granularidade grossa) |
|
Segurança |
Alta. Este método fornece controle e isolamento de permissões de granularidade fina. Ele usa credenciais temporárias do STS (Security Token Service) e evita a codificação fixa de pares AccessKey. |
Média. Todos os Pods compartilham as mesmas permissões, o que pode levar a privilégios excessivos. |
Baixa. Alto risco de vazamento do par AccessKey. |
|
Cenários aplicáveis |
Indicado para serviços sensíveis à segurança e ambientes de produção que exigem controle rigoroso de permissões. |
Recomendado para cenários com requisitos uniformes de permissão, como ambientes de desenvolvimento e teste que precisam de controle moderado de permissões. |
Ideal para implantações rápidas ou ambientes de demonstração. |
RRSA
No cluster ACK sob a Conta A, configure uma ServiceAccount específica para assumir uma função RAM da Conta B. Essa função RAM recebe as permissões necessárias, permitindo que o cluster ACK faça pull de imagens privadas da instância do ACR na Conta B sem usar credenciais estáticas.
Para ativar o recurso RRSA (RAM Roles for Service Accounts) no componente sem senha, primeiro ative o RRSA para o cluster e depois configure o RRSA para o componente. Se você executar essas etapas na ordem errada, exclua o Pod do componente sem senha para ativar o recurso RRSA.
-
Na Conta A, ative o recurso RRSA para o cluster ACK e crie uma função RAM com permissões de assunção de função.
-
Ative o recurso RRSA para o cluster ACK.
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 Cluster Information.
-
Criar uma função RAM para um provedor de identidade OIDC e atualize sua política de confiança com o seguinte conteúdo.
Substitua
<oidc_issuer_url>pela URL do provedor OIDC obtida na etapa anterior.Substitua
<oidc_provider_arn>pelo ARN do provedor OIDC obtido na etapa anterior.
{ "Statement": [ { "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "oidc:aud": "sts.aliyuncs.com", "oidc:iss": "<oidc_issuer_url>", "oidc:sub": "system:serviceaccount:kube-system:aliyun-acr-credential-helper" } }, "Effect": "Allow", "Principal": { "Federated": [ "<oidc_provider_arn>" ] } } ], "Version": "1" } -
Anexe a política de permissão
AliyunSTSAssumeRoleAccessà função para conceder permissões de assunção de função e registre seu ARN. Para mais informações, consulte Gerenciar permissões para uma função RAM.Na página de detalhes da função, na aba Authorization, clique em Authorize.
No painel Authorize, em Policies, localize e selecione a política AliyunSTSAssumeRoleAccess e clique em OK.
Na página de detalhes da função, na seção Basic Information, visualize e registre o ARN da função RAM. Para instruções detalhadas, consulte Como visualizo o ARN de uma função RAM?
-
-
Na Conta B, crie uma função RAM com permissões para fazer pull de imagens privadas e configure-a para ser assumida pela função RAM da Conta A.
-
Criar uma função RAM para uma conta confiável da Alibaba Cloud. Edite a política de confiança com o script a seguir para permitir a assunção de função pela função da Conta A.
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "<ARN of the role created in Account A>" ] } } ], "Version": "1" } -
Crie uma política de permissão personalizada com o seguinte conteúdo e anexe-a à função RAM para conceder permissões de obtenção de informações da instância e pull de imagens.
{ "Version": "1", "Statement": [ { "Action": [ "cr:GetAuthorizationToken", "cr:ListInstanceEndpoint", "cr:PullRepository" ], "Resource": "*", "Effect": "Allow" } ] } -
Defina a duração máxima da sessão para a função RAM com um valor entre 3.600 e 43.200 segundos. O padrão é 3.600 segundos.
Garanta que este valor corresponda ao parâmetro
expireDurationna configuração do componente descrita posteriormente. O valor deexpireDurationnão pode exceder a duração máxima da sessão. Na página de detalhes da função, na seção Basic Information, visualize e registre o ARN da função RAM.
-
-
Na Conta A, instale o componente sem senha para o cluster ACK e modifique sua configuração.
Para mais informações sobre as diferenças entre os componentes a seguir, consulte Comparação de componentes sem senha .
Componente gerenciado
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 caixa de diálogo aliyun-acr-credential-helper Parameter Configuration, selecione Enable RRSA. Em seguida, clique em Add, insira os parâmetros a seguir e clique em Confirm.
Configuração da instância do ACR Enterprise Edition:
Parâmetro
Descrição
Exemplo
instanceId
O ID da instância do ACR. Para especificar vários IDs, separe-os por vírgulas (,).
cri-XXXXX
regionId
O ID da região da instância do ACR.
cn-hangzhou
domains
Os nomes de domínio usados para acessar a instância do ACR. Insira todos os nomes de domínio de acesso (públicos e VPC) para a instância do ACR. Para especificar nomes de domínio específicos, separe-os por vírgulas (,).
XXXXX-registry.cn-hangzhou.cr.aliyuncs.com
assumeRoleARN
O ARN da função RAM criada na Conta B.
acs:ram::100XXXXXXXX9630:role/XXXX
expireDuration
O período de validade das credenciais temporárias para acesso entre contas. Insira a duração máxima da sessão da função RAM criada na Conta B.
3600
rrsaRoleARN
O ARN da função RAM criada na Conta A.
acs:ram::128XXXXXXXXXX09011:role/XXXX
rrsaOIDCProviderRoleARN
O ARN do provedor do cluster ACK. Insira o ARN do provedor do provedor de identidade OIDC RRSA para o cluster ACK na Conta A.
acs:ram::128XXXXXXXXXX09011:oidc-provider/ack-rrsa-c8864XXXXXXXXXXXXXXXXXX99356a636
Para informações sobre outros parâmetros, consulte Configuração do componente .
aliyun-acr-credential-helper
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 componente aliyun-acr-credential-helper e clique em Install. Na caixa de diálogo exibida, defina a opção tokenMode como auto e clique em OK.
-
Modifique o ConfigMap do componente sem senha.
No painel de navegação à esquerda, escolha .
-
Na página ConfigMaps, selecione kube-system na lista suspensa Namespace. Em seguida, localize acr-configuration e clique em Edit YAML na coluna Actions. Atualize a configuração com base no exemplo a seguir.
data: service-account: "default" watch-namespace: "all" expiring-threshold: "15m" notify-email: "c*@example.com" acr-registry-info: | - instanceId: "cri-xxx" # ACR instance ID. regionId: "cn-hangzhou" # ACR instance region ID. domains: "xxxxx-registry.cn-hangzhou.cr.aliyuncs.com" # ACR instance access domain name. rrsaRoleARN: "<ARN of the role created under Account A>" rrsaOIDCProviderRoleARN: "<OIDC Provider ARN from the cluster's Basic Information page in the ACK console under Account A>" assumeRoleARN: "<ARN of the role created under Account B>" expireDuration: 3600 # Maximum session duration for the RAM role under Account B. Default: 3600. rrsa: | enable: true # Enable the RRSA feature for the password-free component.
Função RAM de Worker
No cluster ACK sob a Conta A, configure a função RAM de Worker padrão do cluster para assumir uma função RAM da Conta B que tenha permissões para fazer pull de imagens. Isso permite que o cluster ACK acesse e faça pull de imagens privadas da Conta B.
-
Na Conta A, visualize a função RAM de Worker do cluster e conceda a ela permissões de assunção de função.
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 Cluster Information.
Na página Cluster Information, clique na aba Basic Information. Na seção Cluster Resources, clique no link à direita de Worker RAM Role.
-
Anexe a política de permissão
AliyunSTSAssumeRoleAccessà função para conceder permissões de assunção de função e registre seu ARN. Para mais informações, consulte Gerenciar permissões para uma função RAM.Na página de detalhes da função, na aba Authorization, clique em Authorize.
No painel Authorize, em Policies, localize e selecione a política AliyunSTSAssumeRoleAccess e clique em OK.
Na página de detalhes da função, na seção Basic Information, visualize e registre o ARN da função RAM. Para instruções detalhadas, consulte Como visualizo o ARN de uma função RAM?
-
Na Conta B, crie uma função RAM com permissões para fazer pull de imagens privadas e configure-a para ser assumida pela função RAM de Worker do cluster ACK na Conta A.
Criar uma função RAM para uma conta confiável da Alibaba Cloud.
-
Crie uma política de permissão personalizada com o seguinte conteúdo e anexe-a à função RAM para conceder permissões de obtenção de informações da instância e pull de imagens.
{ "Version": "1", "Statement": [ { "Action": [ "cr:GetAuthorizationToken", "cr:ListInstanceEndpoint", "cr:PullRepository" ], "Resource": "*", "Effect": "Allow" } ] } -
Na página de detalhes da função RAM, clique na aba Trust Policy e em Edit Trust Policy com o seguinte conteúdo. Isso permite que a função RAM de Worker do cluster ACK na Conta A assuma a função RAM na Conta B.
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "<ARN of the role created under Account A>" ] } } ], "Version": "1" } Na página de detalhes da função, na seção Basic Information, visualize e registre o ARN da função RAM. Para instruções detalhadas, consulte Como visualizo o ARN de uma função RAM?
-
Na Conta A, instale o componente sem senha para o cluster ACK e modifique sua configuração.
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 componente aliyun-acr-credential-helper e clique em Install. Na caixa de diálogo exibida, defina a opção tokenMode como workerRole e clique em Confirm.
-
Modifique o ConfigMap do componente sem senha.
No painel de navegação à esquerda, escolha .
-
Na página ConfigMaps, selecione kube-system na lista suspensa Namespace. Em seguida, localize acr-configuration e clique em Edit YAML na coluna Actions. Atualize a configuração com base no exemplo a seguir.
data: service-account: "default" watch-namespace: "all" expiring-threshold: "15m" notify-email: "c*@example.com" acr-registry-info: | - instanceId: "cri-xxx" # ACR Enterprise Edition instance ID. regionId: "cn-hangzhou" # ACR Enterprise Edition region ID. domains: "xxxxx-registry.cn-hangzhou.cr.aliyuncs.com" # ACR Enterprise Edition access domain name. assumeRoleARN: "<ARN of the role created under Account B>" expireDuration: 3600 # Maximum session duration for the RAM role under Account B. Default: 3600.
AccessKey de usuário RAM
No cluster ACK sob a Conta A, o componente sem senha armazena o AccessKey ID (AK) e o AccessKey Secret (SK) de um usuário RAM da Conta B para fazer pull de imagens privadas da Conta B. Embora este método seja simples de configurar, ele apresenta um risco de segurança porque o par AccessKey é armazenado em texto simples.
-
Na Conta B, crie um usuário RAM e garanta que ele tenha as permissões cr.** necessárias.
-
Crie uma política de permissão personalizada com o seguinte conteúdo e anexe-a ao usuário RAM para conceder permissões de obtenção de informações da instância e pull de imagens.
{ "Version": "1", "Statement": [ { "Action": [ "cr:GetAuthorizationToken", "cr:ListInstanceEndpoint", "cr:PullRepository" ], "Resource": "*", "Effect": "Allow" } ] } Crie um par AccessKey e registre o AccessKey ID e o AccessKey Secret.
-
Na Conta A, instale o componente sem senha para o cluster ACK e modifique sua configuração.
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 Cluster Information.
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 componente aliyun-acr-credential-helper e clique em Install. Na caixa de diálogo exibida, defina a opção tokenMode como auto e clique em OK.
-
Modifique o ConfigMap do componente sem senha.
No painel de navegação à esquerda, escolha .
Na página ConfigMaps, selecione kube-system na lista suspensa Namespace. Em seguida, localize acr-configuration e clique em Edit YAML na coluna Actions. Atualize a configuração com base no exemplo a seguir.
data: service-account: "default" watch-namespace: "all" expiring-threshold: "15m" notify-email: "c*@example.com" acr-registry-info: | - instanceId: "" # ACR Enterprise Edition instance ID. regionId: "cn-hangzhou" # ACR Enterprise Edition region ID. customAccessKey: "xxxxx" # AccessKey ID of the RAM user under Account B. customAccessKeySecret: "xxxxxx" # AccessKey Secret of the RAM user under Account B.
Etapa 3: Verificar o pull de imagens entre contas
Este processo de verificação serve apenas para demonstração. Para instruções detalhadas, consulte Compilar uma imagem e Criar uma carga de trabalho.
-
Na instância do ACR Enterprise Edition sob a Conta B, obtenha o endereço do Public endpoint ou da VPC da imagem de contêiner conforme necessário.
Acesse a página Basic Information do repositório de imagens de destino. Os endereços de endpoint estão disponíveis no lado direito da página.
-
No cluster ACK sob a Conta A, acesse e crie uma carga de trabalho usando a imagem de contêiner.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment-basic labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: ******.cn-hangzhou.cr.aliyuncs.com/instance/instancetest:v1 # Specify the ACR image address from Account B ports: - containerPort: 80 -
Um evento de Pod com a mensagem
Successfully pulled image "XXX" in XXXs (XXXs including waiting). Image size: XXX bytes.indica que o componente sem senha fez pull da imagem entre contas com sucesso.Na página de detalhes da carga de trabalho, na aba Pods, confirme se o status do Pod é Running e se a coluna Image exibe o endereço do repositório de imagens entre contas, como
test332-registry.cn-hangzhou.cr.aliyuncs.com/instance/test:v1.
FAQ
Resolver conflitos de IP no bloco CIDR 100.0.0.0/8
Os IPs de autenticação e de domínio OSS resolvem para o bloco CIDR 100.0.0.0/8. Se sua rede interna usar esse intervalo, ocorrerão conflitos de IP.
Conflito de nome de domínio de autenticação
Resolva esse conflito ativando a instância para assumir o controle do domínio de autenticação. Isso permite acessar o serviço usando apenas o nome de domínio da instância.
Faça login no console do Container Registry.
Na barra de navegação superior, selecione uma região.
Na página Instances, clique na instância Enterprise Edition que deseja gerenciar.
-
No painel de navegação à esquerda da página de gerenciamento da instância, escolha . Na página Domain, ative o interruptor Instance Taking over Authentication Domain Name.
ImportantePara ativar a assunção do domínio de autenticação, você deve enviar um ticket para adicionar sua instância Enterprise Edition à lista de permissões.
Na caixa de diálogo Confirm to Enable Instance Taking over Authentication Domain Name, clique em Confirm.
Conflito de nome de domínio OSS
Para resolver esse conflito, acesse recursos OSS por uma rede privada usando PrivateLink e aponte o nome de domínio OSS para o nome de domínio PrivateLink com um registro CNAME.