如何阻止Kustomize为非命名空间资源ExtensionConfig添加namespace字段?
解决Kustomize错误为ExtensionConfig添加namespace字段的问题
问题场景
当Kustomize配置全局namespace字段时,会错误地将非命名空间资源ExtensionConfig(apiVersion: runtime.cluster.x-k8s.io/v1alpha1)识别为命名空间资源,自动为其添加metadata.namespace字段,违背了该资源的非命名空间属性。
复现示例:
- extensionconfig.yaml
apiVersion: runtime.cluster.x-k8s.io/v1alpha1 kind: ExtensionConfig metadata: name: my-extensionconfig
- kustomization.yaml
resources: - extensionconfig.yaml namespace: foooo
执行kubectl kustomize .后,输出结果错误添加了namespace: foooo字段。
解决方案
方法1:自定义Namespace Transformer排除目标资源类型
通过自定义transformer配置,指定不对ExtensionConfig资源应用namespace注入逻辑:
- 创建
namespace-transformer.yaml配置文件:
apiVersion: builtin kind: NamespaceTransformer metadata: name: namespace-transformer namespace: foooo fieldSpecs: - path: metadata/namespace create: true kind: "*" version: "*" - path: metadata/namespace create: false kind: ExtensionConfig group: runtime.cluster.x-k8s.io version: v1alpha1
其中create: false声明不对ExtensionConfig资源创建metadata.namespace字段。
- 修改
kustomization.yaml,替换原全局namespace配置为引用该transformer:
resources: - extensionconfig.yaml transformers: - namespace-transformer.yaml
方法2:使用Patch移除错误添加的namespace字段
如果不想自定义transformer,可通过补丁直接移除自动添加的namespace字段:
- 创建
remove-extensionconfig-namespace.yaml补丁文件:
apiVersion: runtime.cluster.x-k8s.io/v1alpha1 kind: ExtensionConfig metadata: name: my-extensionconfig $patch: delete metadata: namespace: ""
- 修改
kustomization.yaml引入该补丁:
resources: - extensionconfig.yaml namespace: foooo patches: - path: remove-extensionconfig-namespace.yaml
执行kubectl kustomize .后,输出的ExtensionConfig资源将不再包含metadata.namespace字段。
内容的提问来源于stack exchange,提问作者guettli
相关产品推荐
相关产品推荐

