En un entorno de múltiples cuentas de Alibaba Cloud, es posible que un clúster de ACK y una instancia de ACR Enterprise Edition los administren cuentas distintas de diferentes unidades de negocio. Para que un clúster de ACK extraiga imágenes de contenedor de una instancia de ACR Enterprise Edition y despliegue cargas de trabajo, debe asegurarse de que exista conectividad de red y otorgar los permisos necesarios entre cuentas. Este tema explica cómo usar el componente sin contraseña aliyun-acr-credential-helper para extraer imágenes entre cuentas.
Guía de decisión
Primero, seleccione un método de conexión de red y un método de autorización de cuentas. Después, seleccione un componente sin contraseña que admita los métodos elegidos.
Para conocer los pasos detallados, siga las instrucciones de Configure network connections y Configure account authorization and the credential-free component , y luego Verify cross-account image pulling .
En este tema, el acceso entre cuentas se refiere al acceso entre diferentes cuentas de Alibaba Cloud (cuentas raíz), no entre RAM users (sub-accounts).
Requisitos previos
Al rol de RAM que utiliza el componente sin contraseña se le deben haber otorgado los permisos obligatorios.
-
Su clúster de ACK debe ser compatible con el componente sin contraseña.
-
aliyun-acr-credential-helper (administrado)
Versión 1.22 o posterior de clústeres administrados de ACK, clústeres serverless de ACK o clústeres de ACK Edge
-
aliyun-acr-credential-helper (autoadministrado)
Versión 1.20 o posterior de clústeres administrados de ACK o clústeres dedicados de ACK
-
-
La instancia de Container Registry (ACR) debe ser una instancia de Enterprise Edition.
ImportanteEl complemento sin contraseña solo admite instancias de ACR Enterprise Edition e instancias de ACR Personal Edition creadas el 8 de septiembre de 2024 o antes. Si no puede usar el complemento sin contraseña, consulte How do I use imagePullSecrets?.
Procedimiento
Paso 1: Configurar las conexiones de red
Cuando se extrae una imagen entre cuentas, el clúster de ACK que la solicita y la instancia de ACR Enterprise Edition que la aloja se encuentran en distintas VPC. Estas redes pertenecen a cuentas diferentes y también pueden ubicarse en regiones distintas. Antes de extraer la imagen, establezca la conectividad de red y asegúrese de que los nombres de dominio correspondientes se puedan resolver. Utilice uno de los siguientes métodos:
Conexión pública: configure un endpoint público para la instancia de ACR Enterprise Edition y habilite el acceso a la red pública del clúster de ACK. La imagen se transfiere por internet público. Este método es menos seguro y genera costos tanto por la dirección IP elástica como por el tráfico saliente.
Conexión de emparejamiento de VPC: utilice una conexión de emparejamiento de VPC para unir ambas redes. Esto permite que el clúster de ACK acceda a la instancia de ACR Enterprise Edition. Esta función es gratuita si las VPC están en la misma región, pero tiene costo cuando se ubican en regiones diferentes. El método requiere que los bloques CIDR de las dos VPC no se superpongan. Si ya existe una superposición importante en los bloques CIDR en uso, es posible que deba rediseñar su arquitectura de red actual.
Conexión de Cloud Enterprise Network (CEN): una instancia de CEN puede contener uno o más transit routers. Varios transit routers se interconectan mediante conexiones entre regiones para habilitar la comunicación de VPC en distintas regiones y cuentas.
Para consultar una comparación entre las conexiones de emparejamiento de VPC y CEN, consulte What are the differences between Cloud Enterprise Network and VPC Peering Connection?
|
Elemento de comparación |
Conexión pública |
Conexión de emparejamiento de VPC |
Cloud Enterprise Network (CEN) |
|
Tipo de red |
Pública |
Privada |
Privada |
|
Facturación |
Se generan cargos según billing methods of elastic IP addresses. |
|
Se generan cargos según billing rules de CEN. |
|
Funciones principales |
No requiere cambios en la arquitectura de red existente. Por motivos de seguridad, debe configurar reglas de entrada y salida, así como directivas de control de acceso. |
|
|
|
Procedimiento de configuración |
|
|
|
Paso 2: Configurar la autorización y el componente sin contraseña
A continuación se presentan tres métodos de autorización que le permiten extraer imágenes entre cuentas sin usar credenciales estáticas. Elija el método que mejor se adapte a sus necesidades.
|
Elemento de comparación |
RRSA |
Rol de RAM de Worker |
AccessKey de usuario de RAM |
|
Tipo de clúster |
Compatible con clústeres ACK Basic, clústeres ACK Pro, clústeres ACK Edge y clústeres ACK Serverless Pro de la versión 1.22 y posteriores. |
Compatible con clústeres ACK Basic, clústeres ACK Pro y clústeres ACK dedicated de la versión 1.20 y posteriores. |
Compatible con clústeres ACK Basic, clústeres ACK Pro y clústeres ACK dedicated de la versión 1.20 y posteriores. |
|
Componentes compatibles |
Para obtener más información sobre las diferencias entre estos componentes, consulte Comparison of password-free components. |
Componente aliyun-acr-credential-helper |
Componente aliyun-acr-credential-helper |
|
Granularidad de permisos |
Nivel de Pod (granularidad fina) |
Nivel de clúster (granularidad media) |
Nivel de cuenta (granularidad gruesa) |
|
Seguridad |
Alta. Este método proporciona control y aislamiento de permisos con granularidad fina. Utiliza credenciales temporales de STS (Security Token Service) y evita codificar de forma rígida los pares de AccessKey. |
Media. Todos los Pods comparten los mismos permisos, lo que puede generar privilegios excesivos. |
Baja. Existe un alto riesgo de filtración del par de AccessKey. |
|
Escenarios aplicables |
Recomendado para servicios sensibles a la seguridad y entornos de producción que requieren un control estricto de permisos. |
Más indicado para escenarios con requisitos de permisos uniformes, como entornos de desarrollo y prueba que necesitan un control moderado. |
Diseñado para despliegues rápidos o entornos de demostración. |
RRSA
En el clúster de ACK de la Cuenta A, configure un ServiceAccount específico para que asuma un rol de RAM de la Cuenta B. Este rol de RAM recibe los permisos necesarios, lo que permite al clúster de ACK extraer imágenes privadas de la instancia de ACR en la Cuenta B sin usar credenciales estáticas.
Para habilitar la función RRSA (RAM Roles for Service Accounts) en el componente sin contraseña, primero debe habilitar RRSA en el clúster y luego configurarla en el componente. Si ejecuta estos pasos en el orden incorrecto, deberá eliminar el Pod del componente sin contraseña para activar la función RRSA.
-
En la Cuenta A, habilite la función RRSA para el clúster de ACK y cree un rol de RAM con permisos de asunción de roles.
-
Habilite la función RRSA para el clúster de ACK.
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Cluster Information.
En la pestaña Basic Information, dentro de la sección Security and Auditing, haga clic en Enable junto a RRSA OIDC.
En el cuadro de diálogo Enable RRSA, haga clic en Confirm. Espere a que el estado del clúster cambie de Updating a Running. Con esto, RRSA queda habilitado.
Una vez habilitado RRSA, coloque el cursor sobre la etiqueta Enabled junto a RRSA OIDC en la sección Security and Auditing. Se mostrarán la URL y el ARN (Alibaba Cloud Resource Name) del proveedor de OIDC.
-
Create a RAM role for an OIDC identity provider y actualice su directiva de confianza con el siguiente contenido.
Reemplace
<oidc_issuer_url>con la URL del proveedor de OIDC que obtuvo en el paso anterior.Reemplace
<oidc_provider_arn>con el ARN del proveedor de OIDC que obtuvo en el paso 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" } -
Asigne la directiva de permisos
AliyunSTSAssumeRoleAccessal rol para otorgarle permisos de asunción de roles y, a continuación, registre su ARN. Para obtener más información, consulte Manage permissions for a RAM role.En la página de detalles del rol, vaya a la pestaña Authorization y haga clic en Authorize.
En el panel Authorize, dentro de Policies, busque y seleccione la directiva AliyunSTSAssumeRoleAccess y, después, haga clic en OK.
En la página de detalles del rol, dentro de la sección Basic Information, consulte y registre el ARN del rol de RAM. Para ver instrucciones detalladas, consulte How do I view the ARN of a RAM role?
-
-
En la Cuenta B, cree un rol de RAM con permisos para extraer imágenes privadas y configúrelo para que el rol de RAM de la Cuenta A pueda asumirlo.
-
Create a RAM role for a trusted Alibaba Cloud account. Edite la directiva de confianza con el siguiente script para permitir que el rol de la Cuenta A lo asuma.
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "<ARN of the role created in Account A>" ] } } ], "Version": "1" } -
Create a custom permission policy con el siguiente contenido y attach it to the RAM role para otorgar permisos de obtención de información de la instancia y extracción de imágenes.
{ "Version": "1", "Statement": [ { "Action": [ "cr:GetAuthorizationToken", "cr:ListInstanceEndpoint", "cr:PullRepository" ], "Resource": "*", "Effect": "Allow" } ] } -
Set the maximum session duration for the RAM role a un valor de entre 3,600 y 43,200 segundos. El valor predeterminado es 3,600 segundos.
Asegúrese de que este valor coincida con el
expireDurationde la configuración del componente descrita más adelante. El valor deexpireDurationno puede superar la duración máxima de la sesión. En la página de detalles del rol, dentro de la sección Basic Information, consulte y registre el ARN del rol de RAM.
-
-
En la Cuenta A, instale el componente sin contraseña para el clúster de ACK y modifique su configuración.
Para obtener más información sobre las diferencias entre los siguientes componentes, consulte Comparison of password-free components .
Componente administrado
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Add-ons .
En la página Add-ons, haga clic en la pestaña Security, busque la tarjeta aliyun-acr-credential-helper (managed) y, a continuación, haga clic en Install.
-
En el cuadro de diálogo aliyun-acr-credential-helper Parameter Configuration, seleccione Enable RRSA. Después, haga clic en Add, introduzca los siguientes parámetros y haga clic en Confirm.
Configuración de la instancia de ACR Enterprise Edition:
Parámetro
Descripción
Ejemplo
instanceId
El ID de la instancia de ACR. Para especificar varios ID, sepárelos con comas (,).
cri-XXXXX
regionId
El ID de la región de la instancia de ACR.
cn-hangzhou
domains
Los nombres de dominio utilizados para acceder a la instancia de ACR. Introduzca todos los nombres de dominio de acceso (públicos y de VPC) de la instancia. Para especificar varios nombres de dominio, sepárelos con comas (,).
XXXXX-registry.cn-hangzhou.cr.aliyuncs.com
assumeRoleARN
El ARN del rol de RAM que creó en la Cuenta B.
acs:ram::100XXXXXXXX9630:role/XXXX
expireDuration
El periodo de validez de las credenciales temporales para el acceso entre cuentas. Introduzca la duración máxima de sesión del rol de RAM que creó en la Cuenta B.
3600
rrsaRoleARN
El ARN del rol de RAM que creó en la Cuenta A.
acs:ram::128XXXXXXXXXX09011:role/XXXX
rrsaOIDCProviderRoleARN
El ARN del proveedor del clúster de ACK. Introduzca el provider ARN del proveedor de identidades RRSA OIDC del clúster de ACK en la Cuenta A.
acs:ram::128XXXXXXXXXX09011:oidc-provider/ack-rrsa-c8864XXXXXXXXXXXXXXXXXX99356a636
Para obtener información sobre otros parámetros, consulte Component configuration .
aliyun-acr-credential-helper
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Add-ons .
En la página Add-ons, haga clic en la pestaña Security, busque el componente aliyun-acr-credential-helper y haga clic en Install. En el cuadro de diálogo que aparece, establezca la opción tokenMode en auto y, a continuación, haga clic en OK.
-
Modifique el ConfigMap del componente sin contraseña.
En el panel de navegación izquierdo, seleccione .
-
En la página ConfigMaps, seleccione kube-system en la lista desplegable Namespace. Luego, busque acr-configuration y haga clic en Edit YAML en la columna Actions. Actualice la configuración con base en el siguiente ejemplo.
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.
Rol de RAM de Worker
En el clúster de ACK de la Cuenta A, configure el rol de RAM de Worker predeterminado del clúster para que asuma un rol de RAM de la Cuenta B con permisos para extraer imágenes. Esto permite que el clúster de ACK acceda a las imágenes privadas de la Cuenta B y las extraiga.
-
En la Cuenta A, consulte el rol de RAM de Worker del clúster y otórguele permisos de asunción de roles.
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Cluster Information.
En la página Cluster Information, haga clic en la pestaña Basic Information. En la sección Cluster Resources, haga clic en el enlace situado a la derecha de Worker RAM Role.
-
Asigne la directiva de permisos
AliyunSTSAssumeRoleAccessal rol para otorgarle permisos de asunción de roles y, a continuación, registre su ARN. Para obtener más información, consulte Manage permissions for a RAM role.En la página de detalles del rol, vaya a la pestaña Authorization y haga clic en Authorize.
En el panel Authorize, dentro de Policies, busque y seleccione la directiva AliyunSTSAssumeRoleAccess y, después, haga clic en OK.
En la página de detalles del rol, dentro de la sección Basic Information, consulte y registre el ARN del rol de RAM. Para ver instrucciones detalladas, consulte How do I view the ARN of a RAM role?
-
En la Cuenta B, cree un rol de RAM con permisos para extraer imágenes privadas y configúrelo para que el rol de RAM de Worker del clúster de ACK en la Cuenta A pueda asumirlo.
-
Create a custom permission policy con el siguiente contenido y attach it to the RAM role para otorgar permisos de obtención de información de la instancia y extracción de imágenes.
{ "Version": "1", "Statement": [ { "Action": [ "cr:GetAuthorizationToken", "cr:ListInstanceEndpoint", "cr:PullRepository" ], "Resource": "*", "Effect": "Allow" } ] } -
En la página de detalles del rol de RAM, haga clic en la pestaña Trust Policy y seleccione Edit Trust Policy con el siguiente contenido. Esto permite que el rol de RAM de Worker del clúster de ACK en la Cuenta A asuma el rol de RAM en la Cuenta B.
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "<ARN of the role created under Account A>" ] } } ], "Version": "1" } En la página de detalles del rol, dentro de la sección Basic Information, consulte y registre el ARN del rol de RAM. Para ver instrucciones detalladas, consulte How do I view the ARN of a RAM role?
-
En la Cuenta A, instale el componente sin contraseña para el clúster de ACK y modifique su configuración.
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Add-ons .
En la página Add-ons, haga clic en la pestaña Security, busque el componente aliyun-acr-credential-helper y haga clic en Install. En el cuadro de diálogo que aparece, establezca la opción tokenMode en workerRole y, a continuación, haga clic en Confirm.
-
Modifique el ConfigMap del componente sin contraseña.
En el panel de navegación izquierdo, seleccione .
-
En la página ConfigMaps, seleccione kube-system en la lista desplegable Namespace. Luego, busque acr-configuration y haga clic en Edit YAML en la columna Actions. Actualice la configuración con base en el siguiente ejemplo.
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 usuario de RAM
En el clúster de ACK de la Cuenta A, el componente sin contraseña almacena el AccessKey ID (AK) y el AccessKey Secret (SK) de un usuario de RAM de la Cuenta B para extraer imágenes privadas de dicha cuenta. Aunque este método es sencillo de configurar, representa un riesgo de seguridad porque el par de AccessKey se almacena en texto plano.
-
En la Cuenta B, cree un usuario de RAM y asegúrese de que tenga los permisos cr.** necesarios.
-
Create a custom permission policy con el siguiente contenido y attach it to the RAM user para otorgar permisos de obtención de información de la instancia y extracción de imágenes.
{ "Version": "1", "Statement": [ { "Action": [ "cr:GetAuthorizationToken", "cr:ListInstanceEndpoint", "cr:PullRepository" ], "Resource": "*", "Effect": "Allow" } ] } Create an AccessKey pair y registre el AccessKey ID y el AccessKey Secret.
-
En la Cuenta A, instale el componente sin contraseña para el clúster de ACK y modifique su configuración.
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Cluster Information.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Add-ons .
En la página Add-ons, haga clic en la pestaña Security, busque el componente aliyun-acr-credential-helper y haga clic en Install. En el cuadro de diálogo que aparece, establezca la opción tokenMode en auto y, a continuación, haga clic en OK.
-
Modifique el ConfigMap del componente sin contraseña.
En el panel de navegación izquierdo, seleccione .
En la página ConfigMaps, seleccione kube-system en la lista desplegable Namespace. Luego, busque acr-configuration y haga clic en Edit YAML en la columna Actions. Actualice la configuración con base en el siguiente ejemplo.
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.
Paso 3: Comprobar la extracción de imágenes entre cuentas
Este proceso de comprobación es solo para fines demostrativos. Para obtener instrucciones detalladas, consulte Build an image y Create a workload.
-
En la instancia de ACR Enterprise Edition de la Cuenta B, obtenga la dirección Public endpoint o VPC de la imagen del contenedor, según lo requiera.
Vaya a la página Basic Information del repositorio de imágenes de destino. Las direcciones de los endpoints están disponibles en el lado derecho de la página.
-
En el clúster de ACK de la Cuenta A, vaya a y cree una carga de trabajo mediante la imagen del contenedor.
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 -
Un evento de Pod con el mensaje
Successfully pulled image "XXX" in XXXs (XXXs including waiting). Image size: XXX bytes.indica que el componente sin contraseña extrajo correctamente la imagen entre cuentas.En la página de detalles de la carga de trabajo, dentro de la pestaña Pods, confirme que el estado del Pod sea Running y que la columna Image muestre la dirección del repositorio de imágenes entre cuentas, como
test332-registry.cn-hangzhou.cr.aliyuncs.com/instance/test:v1.
Preguntas frecuentes
Resolver conflictos de IP en el bloque CIDR 100.0.0.0/8
Las IP de autenticación y del dominio de OSS se resuelven en el bloque CIDR 100.0.0.0/8. Si su red interna utiliza este rango, se producirán conflictos de IP.
Conflicto con el nombre de dominio de autenticación
Resuelva este conflicto al habilitar que la instancia asuma el control del dominio de autenticación. Esto le permite acceder al servicio únicamente con el nombre de dominio de la instancia.
Inicie sesión en la consola de Container Registry.
En la barra de navegación superior, seleccione una región.
En la página Instances, haga clic en la instancia de Enterprise Edition que desea gestionar.
-
En el panel de navegación izquierdo de la página de gestión de la instancia, elija . En la página Domain, active el interruptor Instance Taking over Authentication Domain Name.
ImportantePara habilitar la toma de control del dominio de autenticación, debe enviar un ticket para agregar su instancia de Enterprise Edition a la lista de permitidos.
En el cuadro de diálogo Confirm to Enable Instance Taking over Authentication Domain Name, haga clic en Confirm.
Conflicto con el nombre de dominio de OSS
Para resolver este conflicto, access OSS resources over a private network by using PrivateLink y luego apunte el nombre de dominio de OSS al nombre de dominio de PrivateLink mediante un registro CNAME.