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