Le composant sans mot de passe automatise l'authentification pour le tirage d'images, éliminant ainsi la nécessité de configurer à plusieurs reprises les imagePullSecrets. Cette rubrique décrit comment installer, configurer et utiliser le composant sans mot de passe, et fournit des notes importantes.
Fonctionnement
Lorsque vous utilisez Container Registry (ACR) comme source d'images sans activer le tirage d'images anonyme, votre cluster ACK doit fournir un nom d'utilisateur et un mot de passe pour authentifier chaque tirage d'image. La solution courante consiste à stocker ces identifiants dans un Secret, mais cette approche présente plusieurs inconvénients :
Les Secrets sont encodés en Base64 en texte clair, ce qui pose un risque de sécurité en cas d'exposition.
Vous devez spécifier manuellement les
imagePullSecretspour chaque charge de travail.Les Secrets ne peuvent pas être partagés entre les namespaces.
Le composant sans mot de passe fonctionne comme suit :
Le composant sans mot de passe obtient des identifiants temporaires auprès de l'instance ACR.
Le composant enregistre les identifiants temporaires dans un Secret.
Le composant associe le Secret aux ServiceAccounts spécifiés dans sa configuration.
Les charges de travail qui utilisent ces ServiceAccounts peuvent alors tirer automatiquement des images en utilisant les identifiants temporaires stockés dans le Secret.
Le composant sans mot de passe peut gérer les ServiceAccounts sur plusieurs namespaces et actualise automatiquement les identifiants temporaires selon une planification. Cela réduit les risques de sécurité et élimine la nécessité d'ajouter manuellement des imagePullSecrets à vos charges de travail. Le composant sans mot de passe est gratuit.
Comparaison des composants
ACK propose le composant aliyun-acr-credential-helper en deux éditions : gérée et autogérée. Vous ne pouvez installer qu'une seule édition à la fois. Le tableau suivant compare les deux éditions.
Élément | aliyun-acr-credential-helper (géré) | aliyun-acr-credential-helper (autogéré) |
Versions de cluster prises en charge | Version 1.22 ou ultérieure des clusters ACK gérés, des clusters ACK serverless ou des clusters ACK Edge | Version 1.20 ou ultérieure des clusters ACK gérés ou des clusters ACK dédiés |
Fonctionnalités |
|
|
Pour mettre à niveau un cluster, consultez Mettre à niveau manuellement un cluster .
Prérequis
La version de votre cluster est prise en charge par le composant sans mot de passe. Pour plus d'informations, consultez le tableau précédent.
-
Vous disposez d'une instance ACR 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 Comment utiliser imagePullSecrets ?.
Les autorisations sont accordées au rôle RAM utilisé par le composant sans mot de passe. Pour plus d'informations, consultez Accorder des autorisations.
-
La connectivité réseau est établie entre l'instance ACR Enterprise Edition et le cluster ACK.
Utiliser le composant sans mot de passe géré
Étape 1 : Installer le composant
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.
-
Sur la page Install component aliyun-acr-credential-helper, consultez les paramètres AcrInstanceInfo et les autres options. AcrInstanceInfo contient les paramètres pour chaque instance ACR associée au composant. Les autres options correspondent aux paramètres du composant. Si vous n'avez pas besoin de modifier les namespaces ou les ServiceAccounts surveillés par le composant, vous pouvez conserver les paramètres par défaut.
Après l'installation du composant, vous pouvez modifier ses paramètres en cliquant sur Configurations sur la carte aliyun-acr-credential-helper (managed) de la page Add-ons .
Paramètres d'association d'instance ACR :
AcrInstanceInfo
Description
InstanceId
L'ID de l'instance ACR. Vous pouvez obtenir l'ID depuis la console Container Registry.
ImportantLaissez ce champ vide pour les instances ACR Personal Edition. Ce champ est obligatoire pour les instances ACR Enterprise Edition.
regionId
L'ID de la région où l'instance ACR est déployée. Vous pouvez obtenir l'ID depuis la console Container Registry.
ImportantCe paramètre est requis pour les tirages d'images interrégions.
domains
Les noms de domaine utilisés par le composant sans mot de passe pour accéder à l'instance ACR. Par défaut, cela inclut tous les noms de domaine (Internet et VPC) de l'instance ACR spécifiée. Pour spécifier plusieurs noms de domaine, séparez-les par des virgules (,).
Paramètres pour les tirages d'images intercomptes
Ces paramètres s'appliquent aux tirages d'images intercomptes. Si vous n'avez pas besoin de cette fonctionnalité, laissez les champs vides.
assumeRoleARN
Aucune configuration n'est requise pour les tirages au sein du même compte. Pour les tirages intercomptes, consultez Tirer des images entre comptes.
expireDuration
rrsaRoleARN
rrsaOIDCProviderRoleARN
Étape 2 : Tirer une image
Après avoir installé et configuré le composant sans mot de passe, spécifiez un ServiceAccount associé au composant lors de la création d'une charge de travail. Cela permet le tirage d'images sans mot de passe.
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 passwordless component.
containers:
- name: nginx
image: "******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest" # Specify the ACR image address.
ports:
- containerPort: 80
Utiliser le composant sans mot de passe autogéré
Étape 1 : Installer le composant
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, puis cliquez sur Install.
-
Sur la page Parameters, sélectionnez un mode d'autorisation dans la liste déroulante tokenMode et cliquez sur OK. Après l'installation du composant, vous devez le configurer avant de pouvoir tirer des images. Pour plus d'informations, consultez Étape 2 : Mettre à jour la configuration du composant (ajouter une instance ACR).
tokenMode
Description
auto
(Recommandé) Le composant détecte l'heure de création du cluster et choisit automatiquement un mode d'autorisation. Les clusters créés avant le 3 avril 2023 utilisent le mode workerRole. Les clusters créés le 3 avril 2023 ou après cette date utilisent le mode managedRole.
ImportantLes versions d'aliyun-acr-credential-helper publiées le 3 avril 2023 ou après cette date fournissent un paramètre qui vous permet de personnaliser le rôle RAM dont dépend le composant. Pour plus d'informations, consultez [Annonce de modification de produit] Annonce sur la modification des autorisations requises par le composant aliyun-acr-credential-helper.
managedRole
Le composant utilise le rôle AliyunCSManagedAcrRole autorisé dans les Prérequis pour obtenir des autorisations.
workerRole
Le composant utilise le rôle RAM de nœud de travail du cluster pour obtenir des autorisations. Vous devez accorder des autorisations spécifiques au rôle RAM de nœud de travail.
ImportantSélectionnez ce mode si vous devez tirer des images entre comptes en assumant un rôle.
Étape 2 : Mettre à jour la configuration du composant
Après l'installation du composant sans mot de passe, vous devez configurer le ConfigMap acr-configuration pour ajouter une instance ACR avant de pouvoir tirer des images. Vous pouvez procéder via la console ou kubectl.
Console
Sur la page Clusters, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur .
-
Sur la page ConfigMaps, sélectionnez kube-system dans la liste déroulante Namespace. Ensuite, cliquez sur le ConfigMap acr-configuration et modifiez les paramètres comme décrit dans le tableau suivant.
Paramètre
Description
watch-namespace
Les namespaces dans lesquels vous souhaitez activer les tirages d'images sans mot de passe. La valeur par défaut est default. Définissez la valeur sur all pour activer cette fonctionnalité pour tous les namespaces. Pour spécifier plusieurs namespaces, séparez-les par des virgules (,). Nous vous recommandons de spécifier uniquement vos namespaces métier et d'éviter d'utiliser
allou les namespaces des composants système du cluster afin d'éviter toute perturbation des tirages d'images système.acr-api-version
Conservez la valeur par défaut.
expiring-threshold
Le seuil d'expiration des identifiants dans le composant. La valeur par défaut est
15m(15 minutes).acr-registry-info
Un tableau d'informations d'instance ACR au format de chaîne YAML multiligne. Chaque instance est configurée avec un ensemble de trois paramètres.
instanceId: l'ID de l'instance ACR. Vous pouvez obtenir l'ID depuis la console Container Registry.ImportantLaissez ce champ vide pour les instances ACR Personal Edition. Ce champ est obligatoire pour les instances ACR Enterprise Edition.
regionId: l'ID de la région où l'instance ACR est déployée. Vous pouvez obtenir l'ID depuis la console Container Registry.ImportantCe paramètre est requis pour les tirages d'images interrégions. Pour un exemple de configuration, consultez la section ci-dessous.
domains: les noms de domaine utilisés par le composant sans mot de passe pour accéder à l'instance ACR. Par défaut, cela inclut tous les noms de domaine de l'instance ACR spécifiée parinstanceId. Pour spécifier plusieurs noms de domaine, séparez-les par des virgules (,).
service-account
Les ServiceAccounts associés au composant sans mot de passe. Pour spécifier plusieurs ServiceAccounts, séparez-les par des virgules (,). Si vous définissez la valeur sur default, le composant s'associe au ServiceAccount par défaut dans chaque namespace spécifié. Si vous définissez la valeur sur
"*", le composant s'associe à tous les ServiceAccounts dans les namespaces spécifiés.
kubectl
-
Exécutez la commande suivante pour modifier le ConfigMap
acr-configuration. Consultez le tableau suivant pour les détails de configuration.kubectl edit cm acr-configuration -n kube-systemClé de paramètre
Description
Valeur
service-account
Les ServiceAccounts ciblés par le composant sans mot de passe.
La valeur par défaut est default.
RemarquePour spécifier plusieurs ServiceAccounts, séparez-les par des virgules (,). Si vous définissez la valeur sur
"*", cela s'applique à tous les ServiceAccounts dans les namespaces spécifiés.acr-registry-info
Un tableau d'informations d'instance ACR au format de chaîne YAML multiligne. Chaque instance est configurée avec un ensemble de trois paramètres.
RemarqueParamètres d'information d'instance :
instanceId : l'ID de l'instance. Ceci est requis pour les instances Enterprise Edition.
regionId : facultatif. Par défaut, la région locale.
domains : facultatif. Par défaut, tous les noms de domaine de l'instance correspondante. Pour spécifier plusieurs noms de domaine, séparez-les par des virgules (,).
Exemple de configuration pour une instance ACR Enterprise Edition :
- instanceId: <cri-instanceId> regionId: "cn-hangzhou" domains: "xxx.com,yyy.com"watch-namespace
Les namespaces dans lesquels vous souhaitez activer les tirages d'images sans mot de passe.
La valeur par défaut est default. Définissez la valeur sur all pour activer cette fonctionnalité pour tous les namespaces. Pour spécifier plusieurs namespaces, séparez-les par des virgules (,).
RemarqueNous vous recommandons de spécifier uniquement vos namespaces métier et d'éviter d'utiliser all ou les namespaces des composants système du cluster afin d'éviter toute perturbation des tirages d'images système.
expiring-threshold
Le seuil d'expiration des identifiants mis en cache localement.
La valeur par défaut est
15m(15 minutes).
Étape 3 : Tirer une image
Après avoir installé et configuré le composant sans mot de passe, spécifiez un ServiceAccount associé au composant lors de la création d'une charge de travail. Cela permet le tirage d'images sans mot de passe.
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 passwordless component.
containers:
- name: nginx
image: "******.cn-hangzhou.cr.aliyuncs.com/nginx/nginx:latest" # Specify the ACR image address.
ports:
- containerPort: 80
FAQ
Activer l'utilisation immédiate des ServiceAccounts
Cette fonctionnalité nécessite aliyun-acr-credential-helper v23.02.06.1-74e2172-aliyun ou une version ultérieure.
Lorsqu'elle est activée, le composant sans mot de passe utilise un Webhook pour surveiller les modifications des ServiceAccounts dans le cluster. Lorsqu'un nouveau ServiceAccount est créé, le composant injecte immédiatement le Secret sans mot de passe. Cela s'avère utile dans les scénarios où un ServiceAccount est utilisé immédiatement après sa création, par exemple lorsqu'un Helm Chart crée simultanément un ServiceAccount et un Deployment. Cette fonctionnalité peut affecter les performances du composant et n'est pas recommandée pour une utilisation générale.
Composant géré
Pour activer cette fonctionnalité, installez le composant acr-credential-helper-webhook dans votre cluster :
Sur la page Clusters ACK, cliquez sur le nom de votre cluster. Dans le volet de navigation de gauche, cliquez sur Add-ons .
Sur la page , cliquez sur l'onglet Security, recherchez la carte acr-credential-helper-webhook (managed), puis cliquez sur Install.
Composant autogéré
Pour activer cette fonctionnalité, ajoutez les champs suivants au ConfigMap acr-configuration :
data:
webhook-configuration: |
enable: true
failure-policy: Ignore
timeout-seconds: 10
Paramètre | Description |
| Indique s'il faut activer la fonctionnalité Webhook.
|
| La politique de gestion des exceptions lors de la création de ServiceAccount.
Important En raison d'une limitation de l'API Server du cluster, si |
| Le délai d'expiration pour une demande unique de création de ServiceAccount. Si le délai est dépassé, le système répond selon le paramètre |
Dépanner les échecs de tirage d'images
Une cause possible est une configuration incorrecte du composant sans mot de passe, par exemple :
Les informations d'instance configurées dans le composant sans mot de passe ne correspondent pas à l'instance ACR.
L'adresse d'image utilisée pour le tirage ne correspond pas au nom de domaine spécifié dans les informations d'instance du composant.
Suivez les étapes de cette rubrique pour résoudre le problème.
Si le composant est correctement configuré mais que le tirage d'image échoue toujours, cela peut être dû à un conflit entre un champ imagePullSecrets spécifié manuellement dans le YAML de la charge de travail et le composant sans mot de passe. Pour résoudre ce problème, supprimez manuellement le champ imagePullSecrets et recréez le Pod.
Comment utiliser imagePullSecrets ?
Les instances ACR Personal Edition créées le 9 septembre 2024 ou après cette date ne prennent pas en charge le composant sans mot de passe. Pour ces instances, nous vous recommandons de stocker le nom d'utilisateur et le mot de passe dans un Secret et de le référencer dans le champ imagePullSecrets.
Le composant sans mot de passe est incompatible avec un champ
imagePullSecretsspécifié manuellement.Le Secret doit se trouver dans le même namespace que la charge de travail.
Rubriques connexes
Pour tirer des images entre comptes à l'aide du composant sans mot de passe, consultez Tirer des images entre comptes.
Pour l'historique des modifications du composant sans mot de passe, consultez aliyun-acr-credential-helper.