Le module complémentaire sans identifiants 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 ce module, ainsi que les notes d'utilisation 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
imagePullSecretspour chaque charge de travail.Les Secrets ne peuvent pas être partagés entre les namespaces.
Le module complémentaire sans identifiants fonctionne comme suit :
Le module obtient des identifiants temporaires auprès de l'instance ACR.
Le module enregistre les identifiants temporaires dans un Secret.
Le module associe le Secret aux ServiceAccounts spécifiés dans sa configuration.
Les charges de travail utilisant ces ServiceAccounts peuvent alors tirer automatiquement des images en utilisant les identifiants temporaires stockés dans le Secret.
Le module complémentaire sans identifiants peut gérer les ServiceAccounts sur plusieurs namespaces et actualiser périodiquement les identifiants temporaires. Cela réduit les risques de sécurité et élimine la nécessité d'ajouter manuellement imagePullSecrets à vos charges de travail. Le module complémentaire sans identifiants est gratuit.
Comparaison des modules complémentaires
ACK propose le module complémentaire 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 managés, des clusters ACK serverless ou des clusters ACK Edge |
Version 1.20 ou ultérieure des clusters ACK managés ou des clusters ACK dédiés |
|
Fonctionnalités |
|
|
Pour mettre à niveau un cluster, consultez Mettre à niveau manuellement un cluster .
Prérequis
Votre cluster exécute une version prise en charge par le module complémentaire sans identifiants. Pour plus d'informations, consultez le tableau précédent.
-
Vous disposez d'une instance ACR Enterprise Edition.
ImportantLe module complémentaire sans identifiants 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 module complémentaire sans identifiants, consultez Comment utiliser imagePullSecrets ?.
Les autorisations sont accordées au rôle RAM utilisé par le module complémentaire sans identifiants. 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 module complémentaire sans identifiants géré
Étape 1 : Installer le module complémentaire
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 (géré), puis cliquez sur Install.
-
Sur la page Installer le module complémentaire aliyun-acr-credential-helper, consultez les paramètres AcrInstanceInfo et les autres options. AcrInstanceInfo contient les paramètres de chaque instance ACR associée au module complémentaire. Les autres options correspondent aux paramètres du module complémentaire. Si vous n'avez pas besoin de modifier les namespaces ou les ServiceAccounts surveillés par le module, vous pouvez conserver les paramètres par défaut.
Une fois le module complémentaire installé, vous pouvez modifier ses paramètres en cliquant sur Configurations sur la carte aliyun-acr-credential-helper (géré) 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 module complémentaire sans identifiants 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 module complémentaire sans identifiants, spécifiez un ServiceAccount associé au module lors de la création d'une charge de travail. Cela permet le tirage d'images sans identifiants.
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
Utiliser le module complémentaire sans identifiants autogéré
Étape 1 : Installer le module complémentaire
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. Une fois le module complémentaire installé, vous devez le configurer avant de pouvoir tirer des images. Pour plus d'informations, consultez Étape 2 : Mettre à jour la configuration du module complémentaire (ajouter une instance ACR).
tokenMode
Description
auto
(Recommandé) Le module 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 module complémentaire. Pour plus d'informations, consultez [Modification du produit] Annonce concernant la modification des autorisations requises par le module complémentaire aliyun-acr-credential-helper.
managedRole
Le module utilise le rôle AliyunCSManagedAcrRole autorisé dans les Prérequis pour obtenir les autorisations.
workerRole
Le module utilise le rôle RAM de nœud de calcul du cluster pour obtenir les autorisations. Vous devez accorder des autorisations spécifiques au rôle RAM de nœud de calcul.
ImportantSélectionnez ce mode si vous devez tirer des images entre comptes en assumant un rôle.
Étape 2 : Mettre à jour la configuration du module complémentaire
Une fois le module complémentaire sans identifiants installé, 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 le tirage d'images sans identifiants. 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 module complémentaire. 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 module complémentaire sans identifiants 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 module complémentaire sans identifiants. Pour spécifier plusieurs ServiceAccounts, séparez-les par des virgules (,). Si vous définissez la valeur sur default, le module s'associe au ServiceAccount par défaut dans chaque namespace spécifié. Si vous définissez la valeur sur
"*", le module s'associe à tous les ServiceAccounts dans les namespaces spécifiés. -
kubectl
-
Exécutez la commande suivante pour modifier le ConfigMap
acr-configuration. Reportez-vous au 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 module complémentaire sans identifiants.
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 le tirage d'images sans identifiants.
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 module complémentaire sans identifiants, spécifiez un ServiceAccount associé au module lors de la création d'une charge de travail. Cela permet le tirage d'images sans identifiants.
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
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 module complémentaire sans identifiants utilise un Webhook pour surveiller les modifications des ServiceAccounts dans le cluster. Lorsqu'un nouveau ServiceAccount est créé, le module injecte immédiatement le Secret sans identifiants. 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 module complémentaire et n'est pas recommandée pour une utilisation générale.
Module complémentaire géré
Pour activer cette fonctionnalité, installez le module complémentaire 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 Add-ons, cliquez sur l'onglet Security, recherchez la carte acr-credential-helper-webhook (géré), puis cliquez sur Install.
Module complémentaire 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 du serveur API 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 module complémentaire sans identifiants, par exemple :
Les informations d'instance configurées dans le module complémentaire sans identifiants 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 module.
Suivez les étapes de cette rubrique pour résoudre le problème.
Si le module est correctement configuré mais que le tirage d'images é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 module complémentaire sans identifiants. 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 module complémentaire sans identifiants. 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 module complémentaire sans identifiants 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 module complémentaire sans identifiants, consultez Tirer des images entre comptes.
Pour l'historique des modifications du module complémentaire sans identifiants, consultez aliyun-acr-credential-helper.