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

Kustomize能否合并Base与Overlay中的PatchesJson6902补丁?

Kustomize patchesJson6902 覆盖问题解答

这是预期行为吗?

是。Kustomize中,当base和overlay的kustomization.yaml都定义了patchesJson6902字段时,overlay的配置会完全替换base中的对应字段,而非追加合并。这意味着base里的补丁会被覆盖,最终只有overlay中的补丁生效。

拆分补丁的可行方法及替代方案

方案1:改用patches字段(推荐)

Kustomize 3.1及以上版本引入了patches字段,它支持合并多个补丁(无论定义在base还是overlay中),补丁会按base到overlay的顺序依次执行。

修改base的kustomization.yaml:

…
patches:
- target: { group: networking.k8s.io, version: v1, kind: Ingress, name: ingress-frontend }
  path: ingress-letsencrypt.patch.yaml
  patchType: json6902

修改overlay的kustomization.yaml:

bases:
- ../../base/04-public-letsencrypt-ingress/

patches:
- target: { group: networking.k8s.io, version: v1, kind: Ingress, name: ingress-frontend }
  path: ingress-tls-hostname.patch.yaml
  patchType: json6902

这样base中的通用补丁和overlay中的实例专属补丁都会被执行,实现补丁拆分的需求。

方案2:将通用补丁整合到overlay(适用于简单场景)

如果不想改用patches字段,可以把base中的通用补丁内容复制到overlay的patchesJson6902列表中,让overlay包含所有需要执行的补丁:

bases:
- ../../base/04-public-letsencrypt-ingress/

patchesJson6902:
- target: { group: networking.k8s.io, version: v1, kind: Ingress, name: ingress-frontend }
  path: ingress-letsencrypt.patch.yaml
- target: { group: networking.k8s.io, version: v1, kind: Ingress, name: ingress-frontend }
  path: ingress-tls-hostname.patch.yaml

但这种方式会导致通用补丁重复出现在多个overlay中,不利于维护,只适合实例数量少的场景。

方案3:使用组件(Component)拆分通用补丁

如果需要在多个overlay中复用通用补丁,可以将通用补丁封装成Kustomize组件:

  1. 创建组件目录components/letsencrypt-patch,在其中创建kustomization.yaml:
patches:
- target: { group: networking.k8s.io, version: v1, kind: Ingress, name: ingress-frontend }
  path: ingress-letsencrypt.patch.yaml
  patchType: json6902

并放入ingress-letsencrypt.patch.yaml文件。

  1. 在base或overlay中引用该组件:
# base/04-public-letsencrypt-ingress/kustomization.yaml
…
components:
- ../../components/letsencrypt-patch
# overlay/04-public-letsencrypt-ingress/kustomization.yaml
bases:
- ../../base/04-public-letsencrypt-ingress/

patches:
- target: { group: networking.k8s.io, version: v1, kind: Ingress, name: ingress-frontend }
  path: ingress-tls-hostname.patch.yaml
  patchType: json6902

这种方式能更好地复用通用补丁,适合多实例场景。

内容的提问来源于stack exchange,提问作者Christian Fuchs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:13:23