1

在写这个问题时,我找到了答案,但对于开始使用 node12 模板模型在 openfaas 上制作函数并需要访问使用 faas-cli 定义的秘密的其他人来说,它仍然可能会有所帮助。

通过使用 openfaas(或在我的情况下为 faasd)创建一个用于构建和部署的函数,我们需要一个 function.yml 文件,如下所示:

provider:
  name: openfaas
  gateway: https://faasd.mygateway.com
functions:
  my_function:
    lang: node12
    handler: ./my_function
    image: my_org/my_function:latest

在此之前,部署的函数将起作用,但目录“/var/openfaas/secrets/”对函数不可用或不可见,因为它需要在 yaml 文件中明确说明,如下所示:

provider:
  name: openfaas
  gateway: https://faasd.mygateway.com
functions:
  my_function:
    lang: node12
    handler: ./my_function
    image: my_org/my_function:latest
    secrets:
        - mysecret
        - second-secret
        - third-secret

现在,在新的构建/推送和部署之后,openfaas 引擎将链接到每个秘密。请注意,该函数只能访问 yaml 文件中声明的那些秘密,即使在 gatweay 机器上还有更多秘密。

这是一个很好的例子:https ://www.openfaas.com/blog/faasd-tls-terraform/

从这里,可以使用 fs.readFile 轻松访问秘密,如下所示:

async function getsecret(name) {
    try {
        var secretval = ""
        secretval = await fs.readFile("/var/openfaas/secrets/" + name, "utf8")
        return secretval;
    } catch (error) {
        return "ERROR: on getting secret " + name
    }
}

请注意,该函数需要是异步的,并且 fs 必须使用 Promise:

const fs = require('fs').promises;

所以它可以用作:

   try {
        let mysecret = await getsecret("mysecret"); 

         //... other business logic
        return whatever;
    } catch (error) {
        return "ERROR" 
    }

所有这一切都是因为我遵循了一个过时的示例,并且认为默认情况下函数可以使用秘密,这在文档中并没有明确开始。但不知何故,它让我意识到在 openfaas 中实现流程的结构和安全性是多么的好,感谢 Alex Ellis 以及 openfaas 团队和社区!

希望这可以帮助某人。

问候, 恩里克

请注意,这是我在 StackOverflow 中的第一篇文章。希望是可读的并且符合标准。

4

0 回答 0