配置serviceMonitor启用后Helm生成的ingress-nginx模板无对应资源咨询
问题根因
4.0.5版本的ingress-nginx Helm chart中,ServiceMonitor的模板文件内置了API版本校验逻辑:只有当集群存在monitoring.coreos.com/v1这个API组(也就是安装了Prometheus Operator CRD)时,才会生成ServiceMonitor资源。
而helm template命令默认不会和Kubernetes集群交互、拉取集群支持的API版本列表,因此上述校验逻辑会判定API组不存在,直接跳过ServiceMonitor资源的生成。
解决方法
执行模板生成命令时新增--api-versions参数,手动告知Helm存在目标API组即可,修改后的命令如下:
helm template ingress-nginx/ingress-nginx --values values.yaml --version "4.0.5" --api-versions monitoring.coreos.com/v1
其他可选排查项
如果执行上述命令后仍无法生成资源,可按以下顺序排查:
- 校验本地Helm仓库的ingress-nginx chart版本正确性,执行
helm search repo ingress-nginx/ingress-nginx --versions | grep 4.0.5确认对应版本存在,避免拉取错chart源 - 检查values.yaml文件的缩进语法是否正确,确保
metrics字段和service字段同级,都属于controller的子字段 - 可以和官方默认配置对比结构,执行
helm show values ingress-nginx/ingress-nginx --version 4.0.5 | grep -A 20 serviceMonitor确认你的配置层级匹配官方要求
如果需要生成的ServiceMonitor能被默认安装的Prometheus Operator自动发现,还可以在values.yaml中补充对应匹配标签,示例如下:
controller: metrics: serviceMonitor: enabled: true additionalLabels: release: kube-prometheus-stack
内容的提问来源于stack exchange,提问作者Daryjusz
相关产品推荐
相关产品推荐

