Kustomize配置Ingress TLS secretName后缀时触发空字段报错
Kustomize nameSuffix配置给Ingress secretName加后缀报错排查
问题场景
尝试配置Kustomize自动为Ingress对象的TLS secretName字段添加名称后缀,执行kustomize build时报错。
初始nameSuffix配置
nameSuffix: - kind: Ingress path: /spec/tls/0/secretName
测试用Ingress资源
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress spec: rules: - host: <APP-URL> http: paths: - path: / pathType: Prefix backend: service: name: service port: number: 80 tls: - hosts: - <APP-URL> secretName: letsencrypt-this-is-where-i-want-my-suffix
报错信息
Error: considering field '/spec/tls/0/secretName' of object Ingress.v1.networking.k8s.io/joeingressjoe.[noNs]: cannot set or create an empty field name
注:/spec/tls/0/secretName路径在JSON Patch操作中可正常生效
报错根因
nameSuffix是Kustomize内置的名称转换组件,它的path字段解析规则和JSON Patch语法不兼容:
- JSON Patch原生支持
/数组名/下标/字段名的数字索引定位方式,因此打补丁时该路径可以正常工作 - 名称转换器的路径逻辑不支持裸数字作为数组下标定位,直接写
0会被识别为不存在的空字段名,最终触发报错。
修复方案
直接修改path字段,去掉数组下标即可,Kustomize会自动遍历tls数组下所有元素的secretName字段追加后缀,修改后的配置如下:
nameSuffix: - kind: Ingress path: /spec/tls/secretName
如果Ingress下配置了多个tls条目,仅需要给指定条目加后缀,可以在数组位置增加字段匹配规则,例如仅匹配secretName为letsencrypt-this-is-where-i-want-my-suffix的条目:
nameSuffix: - kind: Ingress path: /spec/tls[secretName=letsencrypt-this-is-where-i-want-my-suffix]/secretName
如果硬要使用数字下标定位(不推荐,数组顺序变动会导致配置失效),可以放弃内置nameSuffix,改用JSON6902类型补丁实现后缀追加逻辑,这类补丁支持数字索引路径。
内容的提问来源于stack exchange,提问作者hY8vVpf3tyR57Xib
相关产品推荐
相关产品推荐

