0
votes

K8S Lire secret de l'application Node JS

J'ai une application Nodejs qui doit lire Secret dans RT

Ceci est le secret P>

const fs = require('fs');
fs.readFile('/etc/secret-volume', function read(err, data) {
    if (err) {
        throw err;
    }
    const content = data;


});



3 commentaires

Chaque propriété sera un fichier: / etc / secret-volume / jeton1


@Matt - ça marche, s'il vous plaît écrivez-le comme réponse


@Matt - BTW, au cas où je tiers de Token1 - Token20, comment devrais-je les lire tout comme chaque propriété sera un fichier?


3 Réponses :


0
votes

Je définis habituellement les secrets comme des variables d'environnement de K8s de cette façon: xxx

, puis dans votre code, utilisez simplement processus.env.my_secret_variable pour y accéder. .

Vous pouvez voir plus de détails sur la façon de faire cela ici: https://medium.com/fun/using-kubernetes- Secrets-AS-Environnement-Variables-5A3F7581EF


1 commentaires

Merci, je comprends cependant que je veux éviter cela car j'ai de nombreux champs et je veux l'éviter et utiliser le volume, pouvez-vous adopter votre réponse à l'utilisation du volume?



1
votes

Vous pouvez lire comme ci-dessous. Token1 est la clé du secret secert1 xxx


2 commentaires

Merci, que si j'ai plus qu'un jeton, comme Token1- Token20 Comment dois-je vous gérer si chaque carte de jeton dans un fichier?


Avez-vous une suggestion à faire dans ce cas, à l'aide du fs.read 20 fois (pour lire 20 fichiers) Je pense que c'est une mauvaise idée, que pensez-vous?



3
votes

Chaque Les données code> dans un secret deviendront un fichier dans le code> montepath code> du volume basé sur secret.

Pour lire beaucoup de jetons, vous pouvez pêcher le répertoire avec READDIR CODE> et ReadFile code> P>

const fsp = require('fs').promises
const path = require('path')

async function readTokens(token_path) {
  const tokens = {}
  const files = await fsp.readdir(token_path)
  for (const file of files) {
    const buf = await fsp.readFile(path.join(token_path, file), 'utf8')
    tokens[file] = buf.toString()
  }
  return tokens
}

readTokens('/etc/secret-volume').then(console.log).catch(console.err)


5 commentaires

Merci, cette approche est meilleure que sur env ? Avec SecretKeyRef et mettez 20 propriétés à l'intérieur? Ce que vous suggérez, quelle serait la meilleure approche?


ne pouvait pas vraiment dire non plus c'est mieux. Les variables env sont probablement plus faciles à accéder au nœud. Le déploiement est assez similaire de chaque sens ¯ \ _ (ツ) _ / ¯


Merci, j'essaie le code mais cela ne fonctionne pas, obtenu Errror (noeud: 1) Non grodéePromiserSeakeSwarning: Erreur: Eisdir: Opération illégale sur un répertoire, Lire (noeud: 1) Non grégnépromisereakewarning: Rejet de promesse non confondre. Cette erreur est originée soit en jetant à l'intérieur d'une fonction Async sans bloc de capture, soit en rejetant une promesse qui n'a pas été traitée avec .Catch (). Pour résilier le processus de nœud sur le rejet de la promesse non gérée, utilisez le drapeau CLI - NONANDLED-REJECTIONS = strict` (voir NODEJS.ORG/API/CLI.HTMLFLI_UNHAN `Toute idée?


une idée ? indice ?


Essaie-t-il de lireFile sur un répertoire? peut-être test si l'entrée est un fichier d'abord