J'ai un dépôt Docker privé avec un tas d'images. J'utilise Helm pour les déployer sur un cluster Kubernetes.
Helm values.yaml contient les informations d'identification du référentiel:
image:
repository: <repo>
tag: <version tag>
pullPolicy: IfNotPresent
imageCredentials:
registry: <repo>
username: <username>
password: <pw>
Après avoir fait l'installation de la barre
helm install myhelmchart --values values.yaml --version
l'état du pod est Init: ErrImagePull. kubectl describe pods donne cette erreur:
Impossible d'extraire l'image "image: tag": erreur rpc: code = inconnu desc = réponse d'erreur du démon: obtenir [image]/manifestes/[version]: non autorisé: authentification requise
Cela dépend de la sortie de votre graphique de barre. Vous pouvez utiliser helm template
pour voir les ressources kubernetes résultantes sans les déployer réellement. L'utilisation d'une image à partir d'un registre de docker privé se résume à deux étapes:
Assurez-vous que vous disposez d'une ressource secret
pour le référentiel privé. Notez que le type ici est kubernetes.io/dockerconfigjson
ou kubernetes.io/dockercfg
.
La façon de créer ceci avec des modèles à partir de Helm est décrite ici .
Ressource/modèle de pod:
spec:
containers:
- name: some-pod
image: <image>
imagePullSecrets:
- name: <name-of your secret>
Vous pouvez d'abord créer les ressources à la main sans barre. Cela permet de vérifier que les ressources elles-mêmes sont correctes. Ensuite, vous pouvez adapter les modèles de barre pour générer les ressources correctes en fonction de vos valeurs.
imageCredentials doit être au niveau racine, comme ceci:
image:
repository: <repo>
tag: <version tag>
pullPolicy: IfNotPresent
imageCredentials:
registry: <repo>
username: <username>
password: <pw>
car
{{- define "imagePullSecret" }}
{{- printf "{\"auths\": {\"%s\": {\"auth\": \"%s\"}}}" .Values.imageCredentials.registry (printf "%s:%s" .Values.imageCredentials.username .Values.imageCredentials.password | b64enc) | b64enc }}
{{- end }}
fait référence à .Values.imageCredentials. * et non à .Values.image.imageCredentials. *.
Vous devez également ajouter
imagePullSecrets:
- name: {{ .Values.imageCredentials.name }}
au modèle (par exemple, pod ou déploiement) qui extrait l'image du registre privé. Et comme cela fait référence à .Values.imageCredentials.name, qui n'est pas défini dans votre extrait, vous devez l'ajouter, comme ceci:
image:
repository: <repo>
tag: <version tag>
pullPolicy: IfNotPresent
imageCredentials:
name: <registry_name>_credentials
registry: <repo>
username: <username>
password: <pw>