【发布时间】:2022-11-03 02:47:37
【问题描述】:
我想使用从 k8s 密钥到 SpringBoot 属性的直接翻译。 因此我有一个舵图(但与普通 k8s 类似):
apiVersion: v1
data:
app.entry[0].name: {{.Values.firstEntry.name | b64enc }}
kind: Secret
metadata:
name: my-secret
type: Opaque
我的意图是这就像我设置了弹簧属性文件一样:
app.entry[0].name: "someName"
但是当我这样做时,我得到一个错误:
Invalid value: "[app.entry[0].name]": a valid config key must consist of alphanumeric characters, '-', '_' or '.' (e.g. 'key.name', or 'KEY_NAME', or 'key-name', regex used for validation is '[-._a-zA-Z0-9]+'),
因此,[0] 似乎不允许作为密钥的密钥名称。
知道如何将数组条目直接从 k8s 秘密名称注入到 spring 中吗?
疯狂地射击我尝试了这些都失败了:
-
app.entry[0].name: ...-- k8s 拒绝 '[' -
app.entry__0.name: ...-- k8s 可以,但是 Spring 不将其识别为数组(我认为) -
"app.entry[0].name": ...-- k8s 拒绝 '[' -
'app.entry[0].name': ...-- k8s 拒绝 '['
【问题讨论】:
-
(1.)“舵图”遵循“yaml 语法”,
app.entry[0].name看起来像(java.util.Properties)的“扁平键”,试图转换为适当的格式? -
@xerx593 据我了解 k8s 的秘密,它们是一个键值映射。因此 yaml 递归字典(如您删除的答案)将不起作用。我认为。正如您可能知道的那样,spring 中的原始格式是“属性”,即基本上是带有花哨键语义的普通键值映射。那个 spring 可以读取 yaml 文件是后来出现的。所以“适当的”语法将是扁平化的关键。不确定,但这就是我的理解。
-
我只是试图“按照错误信息” :)
-
这样的事情会有帮助吗? baeldung.com/spring-inject-arrays-lists。然而,扁平化键更有意义,因为它的键值概念。
-
@Godwin 是的......代码更改。我们现在正在这样做。但我希望不需要更改客户端代码。也许是未来的通用解决方案。
标签: spring-boot kubernetes kubernetes-secrets