如何在Kustomize指定Overlay中添加额外Ingress资源?
解决方法
你不需要修改base目录的ingress.yml,通过以下方式就能实现dev/staging环境多一个Ingress实例,同时不影响prod:
方法一:直接在dev/staging添加独立Ingress资源
这是最直接的方案,核心是让新增的Ingress和base里的资源名不同(避免Kustomize自动合并同名资源):
- 在
dev/ingress.yml和staging/ingress.yml中定义全新的Ingress(注意metadata.name和base的myService区分开):
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: myService-extra # 自定义名字,与base的myService不重复 spec: ingressClassName: default # 填写该环境特有的路由规则,比如dev环境的测试路径
- 修改
dev/kustomization.yml和staging/kustomization.yml,将本地的ingress.yml加入resources列表:
resources: - ../base # 继承base的所有资源 - ingress.yml # 添加当前环境的额外Ingress
执行kustomize build dev时,最终清单会包含两个Ingress:base里的myService,以及dev环境新增的myService-extra。prod环境的kustomization.yml保持只引用../base,因此只会保留base的单个Ingress。
方法二:用组件复用额外Ingress(适用于dev/staging配置相似的场景)
如果dev和staging的额外Ingress配置大部分一致,可以抽成组件减少重复代码:
- 在base同级目录新建
components/extra-ingress目录,创建ingress.yml和kustomization.yml:
components/extra-ingress/ingress.yml:内容与方法一中的新增Ingress一致components/extra-ingress/kustomization.yml:
resources: - ingress.yml
- 修改
dev/kustomization.yml和staging/kustomization.yml,引入该组件:
resources: - ../base components: - ../components/extra-ingress
prod环境不引入该组件,自然不会生成额外的Ingress。
关于你之前尝试无效的原因
你提到从patchesStrategicMerge移除ingress.yml没用,是因为patchesStrategicMerge是用来修改已有资源的,而你需要的是新增资源,应该用resources或components来添加。另外,如果你的dev/staging的ingress.yml和base的Ingress重名(都是myService),Kustomize会自动合并两个资源而非新增,这也是你误以为要修改base的核心原因——只要把新增Ingress的名字改得不一样,就能避免合并逻辑。
内容的提问来源于stack exchange,提问作者s.singh
相关产品推荐
相关产品推荐

