【问题标题】:Using kubernetes secret env var inside another env var在另一个环境变量中使用 kubernetes 秘密环境变量
【发布时间】: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 FaultDevOps 上提出这样的问题。 --- 从它的外观来看,我会说这个秘密有新的线路。
  • 这个问题是关于如何编写(某种)kubernetes 清单,它可以使用转换为 en env var 的秘密来评估另一个 env var 的值。如果可能的话,这似乎没有在任何地方明确提及(如果我找不到它,我深表歉意)。那不合格吗?如果一些建议可以添加一些上下文,如果这是可能的并且实现看起来正确,那么调试和修复将变得更加容易。从您的建议来看,这很有可能。如果您可以确认或添加它。这会很棒。谢谢
  • 我的直觉是 Secret 值以换行符结尾。如果您有 kubectl get secret -o yaml credentials 的权限,那么您可以使用 base64 解码该值并仔细检查。

标签: kubernetes environment-variables kubernetes-helm kubernetes-secrets


【解决方案1】:

问题出在用于对秘密进行编码的命令 - echo "pasword" | base64。 echo 在字符串末尾添加一个换行符。使用echo -n "password" | base64 修复了秘密。 关闭问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多