Как запустить Vault из моего приложения вместо CLI?

#node.js #hashicorp-vault #moleculer

#node.js #hashicorp-vault #молекулярный

Вопрос:

Я пытаюсь запустить службу хранилища в моем приложении NodeJS. Использование CLI для использования Vault нормально, но мне нужно, чтобы оно работало автоматически при запуске приложения. Я пытаюсь это

     async started(ctx) {

        var options = {
            apiVersion: 'v1', // default
            endpoint: 'http://127.0.0.1:8500', // default

          };
           
            // get new instance of the client
            var vault = require("node-vault")(options);

            // init vault server
            vault.init({ secret_shares: 1, secret_threshold: 1 })
            .then( (result) => {
            var keys = result.keys;
            // set token for all following requests
            vault.token = result.root_token;
            // unseal vault server
            return vault.unseal({ secret_shares: 1, key: keys[0] })
            })
            .catch(console.error);

            // see if it is ok
            vault.status()
                .then (res => {
                  console.log('STATuuuuuuuuuuusS', res);
                  })
                  .catch((err) => {
                    console.log("errrrrrreur status");
                    console.error(err.message);
            });
  

Но у меня эта ошибка:

 RequestError: Error: connect ECONNREFUSED 127.0.0.1:8500
[...]
  cause: Error: connect ECONNREFUSED 127.0.0.1:8500
      at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16) {
    errno: 'ECONNREFUSED',
    code: 'ECONNREFUSED',
    syscall: 'connect',
    address: '127.0.0.1',
    port: 8500
  },
  

Если я запускал это раньше, это сработало
vault server -config=config.hcl

Даже когда я его отключаю, кажется, что он работает без перезагрузки. Я здесь точно чего-то не хватает 🙂 Мне интересно, должен ли node-vault запускать Vault server? Если нет, мне интересно, как запустить сервер Vault из приложения, а не из CLI?

Если вы знаете хороший способ сделать это или у вас есть подсказки, я весь внимание.

Николас

Ответ №1:

Нет, обычно код не должен запускать сервер. Да, ваш код работает правильно. Если вы не запустили сервер, ошибка означает, что невозможно подключиться к указанному IP-адресу и порту, они закрыты. Сервер хранилища не имеет к этому никакого отношения, такое же поведение будет у сервера базы данных или любого другого.

Комментарии:

1. Хорошо, большое вам спасибо за ваш ответ! Итак, я предполагаю, что это то же самое для шага входа в систему, это не выполняется из кода? Но мне интересно, когда приложение будет развернуто, как запустится сервер Vault и как мы войдем в систему?

2. Я не знаю, какую проблему вы пытаетесь решить. Я полагаю, вам будет полезно взглянуть на этот пакет npmjs.com/package/moleculer-vault

3. Я пытаюсь использовать Vault для аутентификации пользователей в приложении микросервиса. Я уже пробую moleculer-vault, но так и не смог заставить его работать. Но если я вручную запущу хранилище и войду в систему вручную, возможно, я это сделаю. Но я думал, что moleculer-vault заинтересован в запуске сервера Vault для меня?

4. На самом деле я застреваю на экране входа в токен. Конечно, я могу ввести токен, но мне нужно сделать это из приложения. И единственный рабочий механизм, который я нахожу, — это команда CLI: vault login… Любой эквивалент хранилища узлов !? простой узел? или даже эквивалент curl?

5. К сожалению, у меня недостаточно опыта работы с vault, чтобы запрашивать.