在写这个问题时,我找到了答案,但对于开始使用 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 中的第一篇文章。希望是可读的并且符合标准。