【发布时间】:2023-01-22 12:36:26
【问题描述】:
我有一个秘密在另一个环境变量中用作环境变量,如下所示:
- name: "PWD"
valueFrom:
secretKeyRef:
name: "credentials"
key: "password"
- name: HOST
value: "xyz.mongodb.net"
- name: MONGODB_URI
value: "mongodb+srv://user:$(PWD)@$(HOST)/db_name?"
当我执行到容器中并运行 env 命令以查看 env 的值时,我看到了 -
mongodb+srv://user:password123
@xyz.mongodb.net/db_name?
容器日志显示错误为身份验证失败。 这是预期在 kubernetes 中工作的东西吗? docs 谈论相关的环境变量,但没有给出使用秘密的例子。经过广泛搜索后没有找到明确的解释。只找到this一篇做类似事情的文章。
需要注意的几点——
- 秘密是密封的秘密。
- 这是最终清单的内容,但所有这些都是使用 helm 模板化的。
- 该值正在 spring boot 应用程序中使用
123 之后的新行是预期的吗?
如果可以从另一个环境中的秘密对环境进行这种评估,那么我在这里做错了什么?
【问题讨论】:
-
$(PWD)@$(HOST)这些表达式是否在某处被模板化了? -
是的,但那里似乎没有什么不寻常的。最终清单中的值似乎是正确的。您提到的这个特定的对象没有被模板化和创建。这是原样。
-
虽然 Stack Overflow 确实允许提出有关 Kubernetes 的某些问题,但我们要求它们(就像这里提出的所有问题一样)与编程特别相关。这个问题貌似不是专门跟编程相关的,而是deployment和secret,所以这里就跑题了。您可以在Server Fault 或DevOps 上提出这样的问题。 --- 从它的外观来看,我会说这个秘密有新的线路。
-
这个问题是关于如何编写(某种)kubernetes 清单,它可以使用转换为 en env var 的秘密来评估另一个 env var 的值。如果可能的话,这似乎没有在任何地方明确提及(如果我找不到它,我深表歉意)。那不合格吗?如果一些建议可以添加一些上下文,如果这是可能的并且实现看起来正确,那么调试和修复将变得更加容易。从您的建议来看,这很有可能。如果您可以确认或添加它。这会很棒。谢谢
-
我的直觉是 Secret 值以换行符结尾。如果您有
kubectl get secret -o yaml credentials的权限,那么您可以使用 base64 解码该值并仔细检查。
标签: kubernetes environment-variables kubernetes-helm kubernetes-secrets