web-dev-qa-db-fra.com

Comment extraire des variables d'environnement avec des diagrammes de Helm

J'ai mon fichier deployment.yaml dans le répertoire des modèles de diagrammes Helm avec plusieurs variables d'environnement pour le conteneur que je vais utiliser à l'aide de Helm.

Maintenant, je veux pouvoir extraire les variables d'environnement localement à partir de n'importe quelle machine sous la barre afin de pouvoir cacher les secrets de cette façon.

Comment puis-je le transmettre et que Helm récupère les variables d'environnement localement lorsque j'utilise Helm pour exécuter l'application?

Voici une partie de mon fichier deployment.yaml

...
...
    spec:
      restartPolicy: Always
      containers:
        - name: sample-app
          image: "sample-app:latest"
          imagePullPolicy: Always
          env:          
            - name: "USERNAME"
              value: "app-username"
            - name: "PASSWORD"
              value: "28sin47dsk9ik"
...
...

Comment puis-je extraire la valeur de USERNAME et PASSWORD des variables d'environnement locales lorsque j'exécute helm?

Est-ce possible? Si oui, comment puis-je faire cela?

30
uberrebu

Vous pouvez export la variable et l'utiliser lors de l'exécution de helm install.

Avant cela, vous devez modifier votre graphique afin que la valeur puisse être set pendant l'installation.

Ignorez cette partie, si vous le savez déjà, comment configurer des champs de modèle.


Comme vous ne voulez pas exposer les données, il est donc préférable de les enregistrer en tant que données secrètes dans kubernetes.

Tout d’abord, ajoutez ces deux lignes dans votre fichier Values afin que ces deux valeurs puissent être définies de l’extérieur.

username: root
password: password

Ajoutez maintenant un fichier secret.yaml dans votre dossier template. et, copiez cet extrait de code dans ce fichier.

apiVersion: v1
kind: Secret
metadata:
  name: {{ .Release.Name }}-auth
data:
  password: {{ .Values.password }}
  username: {{ .Values.username }}

Maintenant, ajustez votre modèle de déploiement et effectuez les modifications dans la section env, comme ceci

...
...
    spec:
      restartPolicy: Always
      containers:
        - name: sample-app
          image: "sample-app:latest"
          imagePullPolicy: Always
          env:          
          - name: "USERNAME"
            valueFrom:
              secretKeyRef:
                key:  username
                name: {{ .Release.Name }}-auth
          - name: "PASSWORD"
            valueFrom:
              secretKeyRef:
                key:  password
                name: {{ .Release.Name }}-auth
...
...

Si vous avez correctement modifié votre modèle pour l'indicateur --set, vous pouvez le définir à l'aide de la variable d'environnement.

$ export USERNAME=root-user

Maintenant, utilisez cette variable lors de l'exécution de helm install,

$ helm install --set username=$USERNAME ./mychart

Si vous exécutez ce helm install en mode dry-run, vous pouvez vérifier les modifications,

$ helm install --dry-run --set username=$USERNAME --debug ./mychart
[debug] Created tunnel using local port: '44937'

[debug] SERVER: "127.0.0.1:44937"

[debug] Original chart version: ""
[debug] CHART PATH: /home/maruf/go/src/github.com/the-redback/kubernetes-yaml-drafts/helm-charts/mychart

NAME:   irreverant-meerkat
REVISION: 1
RELEASED: Fri Apr 20 03:29:11 2018
CHART: mychart-0.1.0
USER-SUPPLIED VALUES:
username: root-user

COMPUTED VALUES:
password: password
username: root-user

HOOKS:
MANIFEST:

---
# Source: mychart/templates/secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: irreverant-meerkat-auth
data:
  password: password
  username: root-user
---
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: irreverant-meerkat
  labels:
    app: irreverant-meerkat
spec:
  replicas: 1
  template:
    metadata:
      name: irreverant-meerkat
      labels:
        app: irreverant-meerkat
    spec:
      containers:
      - name: irreverant-meerkat
        image: Alpine
        env:
        - name: "USERNAME"
          valueFrom:
            secretKeyRef:
              key:  username
              name: irreverant-meerkat-auth
        - name: "PASSWORD"
          valueFrom:
            secretKeyRef:
              key:  password
              name: irreverant-meerkat-auth

        imagePullPolicy: IfNotPresent
      restartPolicy: Always
  selector:
    matchLabels:
      app: irreverant-meerkat

Vous pouvez voir que les données du nom d’utilisateur en secret ont été changées en root-user.

J'ai ajouté cet exemple dans le dépôt Github.

Il y a aussi quelques discussions dans kubernetes/helm repo à ce sujet. Vous pouvez voir ce problème pour connaître toutes les autres manières d'utiliser les variables d'environnement.

51
Maruf Tuhin

je suppose que la question est de savoir comment rechercher une variable env dans un graphique en regardant les variables env en lui-même et non en transmettant ceci avec --set.

par exemple: j'ai défini la clé "my_db_password" et je souhaite modifier les valeurs en consultant la valeur dans evn variable n'est pas prise en charge.

je ne suis pas très sûr du modèle GO, mais je suppose que ceci est désactivé en tant que ce qu'ils expliquent dans la documentation de barre. "Nous en avons retiré deux pour des raisons de sécurité: env et expandenv (ce qui aurait donné aux auteurs de cartes l’accès à l’environnement de Tiller)." https://helm.sh/docs/developing_charts/#know-your-template-functions

0
Sandeep kumar singh