Dans un environnement multi-comptes Alibaba Cloud, un cluster ACK et une instance ACR Enterprise Edition peuvent être gérés par des comptes différents appartenant à des unités commerciales distinctes. Pour permettre à un cluster ACK de tirer des images de conteneur depuis une instance ACR Enterprise Edition et de déployer des charges de travail, vous devez garantir la connectivité réseau et accorder les autorisations inter-comptes requises. Cette rubrique explique comment utiliser le composant sans mot de passe aliyun-acr-credential-helper pour tirer des images entre comptes.
Guide de décision
Commencez par sélectionner une méthode de connexion réseau et une méthode d'autorisation de compte. Ensuite, choisissez un composant sans identifiant qui prend en charge les méthodes sélectionnées.
Pour obtenir les étapes détaillées, suivez les instructions dans Configurer les connexions réseau et Configurer l'autorisation de compte et le composant sans identifiant , puis Vérifier le tirage d'images inter-comptes .
Dans cette rubrique, l'accès inter-comptes fait référence à l'accès entre différents comptes Alibaba Cloud (comptes racine), et non entre utilisateurs RAM (sous-comptes).
Prérequis
Le rôle RAM utilisé par le composant sans mot de passe a reçu les autorisations requises.
-
Votre cluster ACK doit prendre en charge le composant sans mot de passe.
-
aliyun-acr-credential-helper (géré)
Version 1.22 ou ultérieure des clusters ACK managés, des clusters ACK serverless ou des clusters ACK Edge
-
aliyun-acr-credential-helper (auto-géré)
Version 1.20 ou ultérieure des clusters ACK managés ou des clusters ACK dédiés
-
-
L'instance Container Registry (ACR) doit être une instance Enterprise Edition.
ImportantLe composant sans mot de passe prend uniquement en charge les instances ACR Enterprise Edition et les instances ACR Personal Edition créées le 8 septembre 2024 ou avant cette date. Si vous ne pouvez pas utiliser le composant sans mot de passe, consultez la section Comment utiliser imagePullSecrets ?.
Procédure
Étape 1 : Configurer les connexions réseau
Lorsque vous tirez une image entre différents comptes, le cluster ACK qui tire l'image et l'instance ACR Enterprise Edition qui héberge l'image se trouvent dans des VPC distincts appartenant à des comptes différents. Ils peuvent également être situés dans des régions différentes. Avant de tirer l'image, vous devez établir la connectivité réseau et vous assurer que les noms de domaine pertinents peuvent être résolus. Vous pouvez utiliser l'une des méthodes suivantes :
Connexion publique : Configurez un endpoint public pour l'instance ACR Enterprise Edition et activez l'accès au réseau public pour le cluster ACK. L'image est transférée via Internet public. Cette méthode est moins sécurisée et engendre des coûts pour l'adresse IP élastique ainsi que pour le trafic sortant.
Appairage de VPC : Utilisez un appairage de VPC pour connecter les deux VPC, ce qui permet au cluster ACK d'accéder à l'instance ACR Enterprise Edition. Cette fonctionnalité est gratuite si les VPC se trouvent dans la même région, mais facturée s'ils sont dans des régions différentes. Cette méthode exige que les deux VPC aient des blocs CIDR non chevauchants. S'il existe un chevauchement important des blocs CIDR déjà utilisés, vous devrez peut-être repenser votre architecture réseau existante.
Connexion Cloud Enterprise Network (CEN) : Une instance CEN peut contenir un ou plusieurs routeurs de transit. Plusieurs routeurs de transit peuvent être interconnectés via des connexions interrégionales pour permettre la communication entre VPC dans différentes régions et comptes.
Pour une comparaison entre les appairages de VPC et CEN, consultez Quelles sont les différences entre Cloud Enterprise Network et l'appairage de VPC ?
|
Élément de comparaison |
Connexion publique |
Appairage de VPC |
Cloud Enterprise Network (CEN) |
|
Type de réseau |
Public |
Privé |
Privé |
|
Facturation |
Des frais sont facturés selon les méthodes de facturation des adresses IP élastiques. |
|
Des frais sont facturés selon les règles de facturation de CEN. |
|
Fonctionnalités clés |
Ne nécessite aucune modification de votre architecture réseau existante. Pour des raisons de sécurité, vous devez configurer des règles entrantes et sortantes ainsi que des politiques de contrôle d'accès. |
|
|
|
Procédure de configuration |
|
|
|
Étape 2 : Configurer l'autorisation et le composant sans mot de passe
Les trois méthodes d'autorisation suivantes vous permettent de tirer des images entre comptes sans utiliser d'identifiants statiques. Choisissez la méthode qui correspond le mieux à vos besoins.
|
Élément de comparaison |
RRSA |
Rôle RAM Worker |
AccessKey utilisateur RAM |
|
Type de cluster |
Prend en charge les clusters ACK Basic, les clusters ACK Pro, les clusters ACK Edge et les clusters ACK Serverless Pro en version v1.22 et ultérieure. |
Prend en charge les clusters ACK Basic, les clusters ACK Pro et les clusters ACK dédiés en version v1.20 et ultérieure. |
Prend en charge les clusters ACK Basic, les clusters ACK Pro et les clusters ACK dédiés en version v1.20 et ultérieure. |
|
Composants pris en charge |
Pour plus d'informations sur les différences entre ces composants, consultez la section Comparaison des composants sans mot de passe. |
Composant aliyun-acr-credential-helper |
Composant aliyun-acr-credential-helper |
|
Granularité des permissions |
Niveau Pod (granularité fine) |
Niveau Cluster (granularité moyenne) |
Niveau Compte (granularité grossière) |
|
Sécurité |
Élevée. Cette méthode offre un contrôle et une isolation des permissions à granularité fine. Elle utilise des identifiants temporaires provenant de STS (Security Token Service) et évite le codage en dur des paires AccessKey. |
Moyenne. Tous les Pods partagent les mêmes permissions, ce qui peut entraîner des privilèges excessifs. |
Faible. Risque élevé de fuite de paires AccessKey. |
|
Scénarios applicables |
Convient aux services sensibles à la sécurité et aux environnements de production nécessitant un contrôle strict des permissions. |
Convient aux scénarios avec des exigences de permissions uniformes, tels que les environnements de développement et de test nécessitant un contrôle modéré des permissions. |
Convient aux déploiements rapides ou aux environnements de démonstration. |
RRSA
Dans le cluster ACK sous le Compte A, vous configurez un ServiceAccount spécifique pour assumer un rôle RAM du Compte B. Ce rôle RAM reçoit les permissions nécessaires, permettant au cluster ACK de tirer des images privées depuis l'instance ACR du Compte B sans utiliser d'identifiants statiques.
Pour activer la fonctionnalité RRSA (RAM Roles for Service Accounts) pour le composant sans mot de passe, vous devez d'abord activer RRSA pour le cluster, puis configurer RRSA pour le composant. Si vous effectuez ces étapes dans le mauvais ordre, vous devez supprimer le Pod du composant sans mot de passe pour activer la fonctionnalité RRSA.
-
Sous le Compte A, activez la fonctionnalité RRSA pour le cluster ACK et créez un rôle RAM avec des permissions d'assumption de rôle.
-
Activez la fonctionnalité RRSA pour le cluster ACK.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Cluster Information.
Dans l'onglet Basic Information, dans la section Security and Auditing, cliquez sur Enable à côté de RRSA OIDC.
Dans la boîte de dialogue Enable RRSA, cliquez sur Confirm. Attendez que l'état du cluster passe de Updating à Running. RRSA est désormais activé.
Une fois RRSA activé, survolez l'étiquette Enabled à côté de RRSA OIDC dans la section Security and Auditing. L'URL et le nom de ressource Alibaba Cloud (ARN) du fournisseur OIDC s'affichent.
-
Créer un rôle RAM pour un fournisseur d'identité OIDC et mettez à jour sa stratégie de confiance avec le contenu suivant.
Remplacez
<oidc_issuer_url>par l'URL du fournisseur OIDC que vous avez obtenue à l'étape précédente.Remplacez
<oidc_provider_arn>par l'ARN du fournisseur OIDC que vous avez obtenu à l'étape précédente.
{ "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" } -
Attachez la stratégie d'autorisation
AliyunSTSAssumeRoleAccessau rôle pour lui accorder les autorisations d'assumer un rôle, puis notez son ARN. Pour plus d'informations, consultez Gérer les autorisations d'un rôle RAM.Sur la page des détails du rôle, sous l'onglet Authorization, cliquez sur Authorize.
Dans le panneau Authorize, sous Policies, recherchez et sélectionnez la stratégie AliyunSTSAssumeRoleAccess, puis cliquez sur OK.
Sur la page des détails du rôle, dans la section Basic Information, consultez et notez l'ARN du rôle RAM. Pour obtenir des instructions détaillées, consultez Comment afficher l'ARN d'un rôle RAM ?
-
-
Sous Account B, créez un rôle RAM disposant des autorisations nécessaires pour tirer des images privées, et configurez-le de manière à ce qu'il puisse être assumé par le rôle RAM du Account A.
-
Créer un rôle RAM pour un compte Alibaba Cloud de confiance. Modifiez la stratégie de confiance avec le script suivant pour autoriser l'assumption de rôle par le rôle du Account A.
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "<ARN of the role created in Account A>" ] } } ], "Version": "1" } -
Créer une stratégie d'autorisation personnalisée avec le contenu suivant et attachez-la au rôle RAM pour accorder les autorisations permettant d'obtenir les informations de l'instance et de tirer des images.
{ "Version": "1", "Statement": [ { "Action": [ "cr:GetAuthorizationToken", "cr:ListInstanceEndpoint", "cr:PullRepository" ], "Resource": "*", "Effect": "Allow" } ] } -
Définir la durée maximale de session pour le rôle RAM sur une valeur comprise entre 3 600 et 43 200 secondes. La valeur par défaut est de 3 600 secondes.
Assurez-vous que cette valeur correspond au paramètre
expireDurationdans la configuration du composant décrite ci-après. La valeur deexpireDurationne peut pas dépasser la durée maximale de session. Sur la page des détails du rôle, dans la section Basic Information, consultez et notez l'ARN du rôle RAM.
-
-
Sous Account A, installez le composant sans mot de passe pour le cluster ACK et modifiez sa configuration.
Pour plus d'informations sur les différences entre les composants suivants, consultez Comparaison des composants sans mot de passe .
Composant géré
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Add-ons .
Sur la page Add-ons, cliquez sur l'onglet Security, recherchez la carte aliyun-acr-credential-helper (managed), puis cliquez sur Install.
-
Dans la boîte de dialogue aliyun-acr-credential-helper Parameter Configuration, sélectionnez Enable RRSA. Ensuite, cliquez sur Add, saisissez les paramètres suivants et cliquez sur Confirm.
Configuration de l'instance ACR Enterprise Edition :
Parameter
Description
Example
instanceId
L'ID de l'instance ACR. Pour spécifier plusieurs ID, séparez-les par des virgules (,).
cri-XXXXX
regionId
L'ID de région de l'instance ACR.
cn-hangzhou
domains
Les noms de domaine utilisés pour accéder à l'instance ACR. Saisissez tous les noms de domaine d'accès (public et VPC) de l'instance ACR. Pour spécifier des noms de domaine spécifiques, séparez-les par des virgules (,).
XXXXX-registry.cn-hangzhou.cr.aliyuncs.com
assumeRoleARN
L'ARN du rôle RAM que vous avez créé dans le Account B.
acs:ram::100XXXXXXXX9630:role/XXXX
expireDuration
La période de validité des identifiants temporaires pour l'accès intercomptes. Saisissez la durée maximale de session du rôle RAM que vous avez créé sous le Account B.
3600
rrsaRoleARN
L'ARN du rôle RAM que vous avez créé dans le Account A.
acs:ram::128XXXXXXXXXX09011:role/XXXX
rrsaOIDCProviderRoleARN
L'ARN du fournisseur du cluster ACK. Saisissez l'ARN du fournisseur du fournisseur d'identité RRSA OIDC pour le cluster ACK sous le Account A.
acs:ram::128XXXXXXXXXX09011:oidc-provider/ack-rrsa-c8864XXXXXXXXXXXXXXXXXX99356a636
Pour plus d'informations sur les autres paramètres, consultez Configuration du composant .
aliyun-acr-credential-helper
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Add-ons .
Sur la page Add-ons, cliquez sur l'onglet Security, recherchez le composant aliyun-acr-credential-helper et cliquez sur Install. Dans la boîte de dialogue qui s'affiche, définissez l'option tokenMode sur auto, puis cliquez sur OK.
-
Modifiez le ConfigMap du composant sans mot de passe.
Dans le volet de navigation de gauche, choisissez .
-
Sur la page ConfigMaps, sélectionnez kube-system dans la liste déroulante Namespace. Ensuite, recherchez acr-configuration et cliquez sur Edit YAML dans la colonne Actions. Mettez à jour la configuration en vous basant sur l'exemple suivant.
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.
Rôle RAM Worker
Dans le cluster ACK sous le Account A, configurez le rôle RAM Worker par défaut du cluster pour qu'il assume un rôle RAM du Account B disposant des autorisations nécessaires pour tirer des images. Cela permet au cluster ACK d'accéder aux images privées du Account B et de les tirer.
-
Sous le Account A, affichez le rôle RAM Worker du cluster et accordez-lui les autorisations d'assumer un rôle.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Cluster Information.
Sur la page Cluster Information, cliquez sur l'onglet Basic Information. Dans la section Cluster Resources, cliquez sur le lien situé à droite de Worker RAM Role.
-
Attachez la stratégie d'autorisation
AliyunSTSAssumeRoleAccessau rôle pour lui accorder les autorisations d'assumer un rôle, puis notez son ARN. Pour plus d'informations, consultez Gérer les autorisations d'un rôle RAM.Sur la page des détails du rôle, sous l'onglet Authorization, cliquez sur Authorize.
Dans le panneau Authorize, sous Policies, recherchez et sélectionnez la stratégie AliyunSTSAssumeRoleAccess, puis cliquez sur OK.
Sur la page des détails du rôle, dans la section Basic Information, consultez et notez l'ARN du rôle RAM. Pour obtenir des instructions détaillées, consultez Comment afficher l'ARN d'un rôle RAM ?
-
Sous le Account B, créez un rôle RAM disposant des autorisations nécessaires pour tirer des images privées, et configurez-le de manière à ce qu'il puisse être assumé par le rôle RAM Worker du cluster ACK dans le Account A.
Créer un rôle RAM pour un compte Alibaba Cloud de confiance.
-
Créer une stratégie d'autorisation personnalisée avec le contenu suivant et attachez-la au rôle RAM pour accorder les autorisations permettant d'obtenir les informations de l'instance et de tirer des images.
{ "Version": "1", "Statement": [ { "Action": [ "cr:GetAuthorizationToken", "cr:ListInstanceEndpoint", "cr:PullRepository" ], "Resource": "*", "Effect": "Allow" } ] } -
Sur la page des détails du rôle RAM, cliquez sur l'onglet Trust Policy et Edit Trust Policy avec le contenu suivant. Cela permet au rôle RAM Worker du cluster ACK dans le Account A d'assumer le rôle RAM dans le Account B.
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "<ARN of the role created under Account A>" ] } } ], "Version": "1" } Sur la page des détails du rôle, dans la section Basic Information, consultez et notez l'ARN du rôle RAM. Pour obtenir des instructions détaillées, consultez Comment afficher l'ARN d'un rôle RAM ?
-
Sous le Account A, installez le composant sans mot de passe pour le cluster ACK et modifiez sa configuration.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Add-ons .
Sur la page Add-ons, cliquez sur l'onglet Security, recherchez le composant aliyun-acr-credential-helper et cliquez sur Install. Dans la boîte de dialogue qui s'affiche, définissez l'option tokenMode sur workerRole, puis cliquez sur Confirm.
-
Modifiez le ConfigMap du composant sans mot de passe.
Dans le volet de navigation de gauche, choisissez .
-
Sur la page ConfigMaps, sélectionnez kube-system dans la liste déroulante Namespace. Ensuite, recherchez acr-configuration et cliquez sur Edit YAML dans la colonne Actions. Mettez à jour la configuration en vous basant sur l'exemple suivant.
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.
Clé d'accès utilisateur RAM
Dans le cluster ACK sous le Account A, le composant sans mot de passe stocke l'ID de clé d'accès (AK) et la clé d'accès secrète (SK) d'un utilisateur RAM du Account B pour tirer des images privées depuis le Account B. Bien que cette méthode soit simple à configurer, elle présente un risque de sécurité car la paire de clés d'accès est stockée en texte clair.
-
Sous le Account B, créez un utilisateur RAM et assurez-vous qu'il dispose des autorisations cr.** nécessaires.
-
Créer une stratégie d'autorisation personnalisée avec le contenu suivant et attachez-la à l'utilisateur RAM pour accorder les autorisations permettant d'obtenir les informations de l'instance et de tirer des images.
{ "Version": "1", "Statement": [ { "Action": [ "cr:GetAuthorizationToken", "cr:ListInstanceEndpoint", "cr:PullRepository" ], "Resource": "*", "Effect": "Allow" } ] } Créer une paire de clés d'accès et notez l'AccessKey ID et l'AccessKey Secret.
-
Sous le Account A, installez le composant sans mot de passe pour le cluster ACK et modifiez sa configuration.
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Cluster Information.
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Add-ons .
Sur la page Add-ons, cliquez sur l'onglet Security, recherchez le composant aliyun-acr-credential-helper et cliquez sur Install. Dans la boîte de dialogue qui s'affiche, définissez l'option tokenMode sur auto, puis cliquez sur OK.
-
Modifiez le ConfigMap du composant sans mot de passe.
Dans le volet de navigation de gauche, choisissez .
Sur la page ConfigMaps, sélectionnez kube-system dans la liste déroulante Namespace. Ensuite, recherchez acr-configuration et cliquez sur Edit YAML dans la colonne Actions. Mettez à jour la configuration en vous basant sur l'exemple suivant.
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.
Étape 3 : Vérifier le tirage d'images entre comptes
Cette procédure de vérification est fournie à titre d'exemple. Pour des instructions détaillées, consultez les rubriques Créer une image et Créer une charge de travail.
-
Dans l'instance ACR Enterprise Edition du Compte B, récupérez l'Public endpoint ou l'adresse VPC de l'image de conteneur, selon vos besoins.
Accédez à la page Basic Information du dépôt d'images cible. Les adresses des endpoints sont affichées sur le côté droit de la page.
-
Dans le cluster ACK du Compte A, accédez à et créez une charge de travail en utilisant l'image de conteneur.
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 événement Pod affichant le message
Successfully pulled image "XXX" in XXXs (XXXs including waiting). Image size: XXX bytes.indique que le composant sans mot de passe a correctement tiré l'image entre les comptes.Sur la page des détails de la charge de travail, dans l'onglet Pods, vérifiez que le statut du Pod est Running et que la colonne Image affiche l'adresse du dépôt d'images inter-comptes, par exemple
test332-registry.cn-hangzhou.cr.aliyuncs.com/instance/test:v1.
FAQ
Résoudre les conflits d'adresses IP dans le bloc CIDR 100.0.0.0/8
Les adresses IP des domaines d'authentification et d'OSS se résolvent vers le bloc CIDR 100.0.0.0/8. Si votre réseau interne utilise cette plage, des conflits d'adresses IP surviendront.
Conflit de nom de domaine d'authentification
Pour résoudre ce conflit, activez la prise en charge du domaine d'authentification par l'instance. Cela vous permet d'accéder au service en utilisant uniquement le nom de domaine de l'instance.
Connectez-vous à la console Container Registry.
Dans la barre de navigation supérieure, sélectionnez une région.
Sur la page Instances, cliquez sur l'instance Enterprise Edition que vous souhaitez gérer.
-
Dans le volet de navigation de gauche de la page de gestion de l'instance, choisissez . Sur la page Domain, activez l'option Instance Taking over Authentication Domain Name.
ImportantPour activer la prise en charge du domaine d'authentification, vous devez soumettre un ticket afin d'ajouter votre instance Enterprise Edition à la liste d'autorisation.
Dans la boîte de dialogue Confirm to Enable Instance Taking over Authentication Domain Name, cliquez sur Confirm.
Conflit de nom de domaine OSS
Pour résoudre ce conflit, accédez aux ressources OSS via un réseau privé en utilisant PrivateLink, puis pointez le nom de domaine OSS vers le nom de domaine PrivateLink à l'aide d'un enregistrement CNAME.