You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:55:09