执行kustomize build报错:无法匹配SecretProviderClass目标资源
Kustomize构建SecretProviderClass补丁匹配错误问题
执行的命令
kustomize build .\services\showcase\overlays\dev\
base目录下的secretclass.yaml内容
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: azure-kvname-user-msi namespace: showcase spec: provider: azure secretObjects: - secretName: connection-string type: kubernetes.io/tls data: - objectName: connection-str key: connectionstr parameters: usePodIdentity: "false" useVMManagedIdentity: "true" # 使用托管标识时设为true userAssignedIdentityID: 674a3fcb-2456-4aba-aaa9-xxxxxx # 填入用户分配托管标识的clientID keyvaultName: kv-arm-shared-dev-f-02 # 填入你的密钥保管库名称 cloudName: "" # [Azure可选参数] 留空默认使用Azure公有云 objects: | array: - | objectName: ConnectionStrings-showcase objectAlias: connection-str objectType: secret # 对象类型:secret、key或cert objectVersion: "" # [可选] 对象版本,留空默认使用最新版本 tenantId: de33eaa6-4346-40a0-882c-xxxxxxxxx # 密钥保管库的租户ID
overlays/dev目录下的kustomization.yaml内容
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - ../../base patchesStrategicMerge: - deployment.yaml - secretclass.yaml
说明:.\services\showcase\overlays\dev\下的secretclass.yaml内容与base中的完全一致。
执行命令后报错
kustomize build .\services\showcase\overlays\dev\ Error: no matches for Id SecretProviderClass.v1.secrets-store.csi.x-k8s.io/azure-kvname-user-msi.showcase; failed to find unique target for patch SecretProviderClass.v1.secrets-store.csi.x-k8s.io/azure-kvname-user-msi.showcase
问题原因与解决方法
原因
在patchesStrategicMerge中配置了与base资源完全一致的SecretProviderClass文件,Kustomize补丁机制需要明确的修改内容,当补丁与原资源无差异时,无法识别有效补丁目标,从而抛出匹配错误。
解决方法
- 无需修改时:直接从
patchesStrategicMerge中移除secretclass.yaml,base目录下的资源会被正常加载,不需要重复补丁。 - 需要修改时:将补丁文件改为仅包含需要修改的字段,而非完整资源定义。例如要修改密钥保管库名称,补丁文件内容如下:
apiVersion: secrets-store.csi.x-k8s.io/v1 kind: SecretProviderClass metadata: name: azure-kvname-user-msi namespace: showcase spec: parameters: keyvaultName: new-kv-arm-shared-dev-f-02
内容的提问来源于stack exchange,提问作者Alexey Auslender
相关产品推荐
相关产品推荐

