如何在Flux Kustomization中仅修补Ingress的spec.tls[0].hosts
如何仅修补Ingress的spec.tls[0].hosts字段?
你当前使用的补丁方式会完全替换spec.tls数组中的第一个元素,把原本包含hosts和secretName的对象替换成仅含hosts的对象,这就导致cert-manager因缺失必填的secretName字段抛出警告。同理,spec.rules的补丁也会覆盖整个规则对象,丢失原有的http路径配置。
要实现仅修改目标字段、保留其他原有配置的效果,推荐以下两种方案:
方案1:使用JSON Patch(通用兼容kubectl/Flux)
JSON Patch支持精准定位字段进行修改,不会影响其他属性。创建补丁文件ingress-patch.json:
[ { "op": "replace", "path": "/spec/tls/0/hosts", "value": ["staging.notesapp.plan.com"] }, { "op": "replace", "path": "/spec/rules/0/host", "value": "staging.notesapp.plan.com" } ]
用kubectl直接执行补丁:
kubectl patch ingress notesapp-ingress -n default --patch-file ingress-patch.json
在Flux中配置:
在Kustomization资源里引用这个补丁:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ingress.yaml patches: - path: ingress-patch.json target: kind: Ingress name: notesapp-ingress namespace: default
方案2:使用Strategic Merge Patch(Kustomize专属)
Kustomize的Strategic Merge Patch能智能合并配置,只更新指定字段,自动保留原有未提及的属性。创建补丁文件ingress-patch-strategic.yaml:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: notesapp-ingress namespace: default spec: tls: - hosts: ["staging.notesapp.plan.com"] rules: - host: staging.notesapp.plan.com
然后在Kustomization里配置:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ingress.yaml patchesStrategicMerge: - ingress-patch-strategic.yaml
这种方式下,原有spec.tls[0].secretName和spec.rules[0].http等配置都会被保留,无需重复编写。
内容的提问来源于stack exchange,提问作者QuantPilot
相关产品推荐
相关产品推荐

