web-dev-qa-db-fra.com

Déploiement de Helm Chart et dépôt Docker privé

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

4
Jayp

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:

  1. 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 .

  2. Reportez-vous à ce secret dans le pod qui utilise l'image de ce référentiel privé, comme indiqué ci-dessous:

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.

7

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>
4
Stefan Asseg