Helm依赖部署配置问题:cert-manager指定namespace部署失败及webhook服务未找到报错排查
我完全理解你碰到的这个棘手问题——你通过Helm Chart依赖配置了cert-manager,想要把整个Chart部署到cert-manager命名空间,结果命名空间虽然创建成功了,但相关资源没部署进去,还抛出了找不到webhook服务的错误:
Error: Internal error occurred: failed calling webhook "webhook.cert-manager.io": Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": service "cert-manager-webhook" not found
这确实是因为cert-manager作为Helm依赖安装时,在命名空间配置上存在限制:依赖方式安装无法正确将cert-manager部署到非默认的指定命名空间,因为它的内部组件(比如webhook、控制器)的配置是强绑定自身命名空间的,Helm依赖的安装逻辑无法完整覆盖这些内部配置。
下面是具体的解决步骤:
1. 单独安装cert-manager到目标命名空间
首先要绕过Helm依赖,手动将cert-manager安装到cert-manager命名空间:
# 添加cert-manager的Helm仓库 helm repo add jetstack https://charts.jetstack.io # 更新仓库索引 helm repo update # 安装cert-manager,指定命名空间并创建CRDs helm install cert-manager jetstack/cert-manager \ --namespace cert-manager \ --create-namespace \ --version v1.13.0 \ --set installCRDs=true
注意:请根据你的需求替换合适的cert-manager版本号
2. 修改你的Chart依赖配置
编辑你的Chart根目录下的Chart.yaml,找到cert-manager的依赖项,将其设置为enabled: false(或者直接移除该依赖),避免Helm尝试再次安装它:
dependencies: # 其他依赖项... - name: cert-manager repository: https://charts.jetstack.io version: v1.13.0 enabled: false
然后执行命令更新依赖:
helm dependency update ./your-chart-directory
3. 确保cert-manager管控的资源指定正确命名空间
检查你Chart中所有cert-manager相关的资源(比如Issuer、Certificate等),确保Namespace级别的资源明确指定cert-manager命名空间:
# 示例:Namespace级别的Issuer配置 apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: my-issuer namespace: cert-manager # 明确指定目标命名空间 spec: # Issuer的具体配置...
ClusterIssuer是集群级资源,不需要指定命名空间
4. 安装你的Chart到目标命名空间
最后执行helm install命令部署你的Chart到cert-manager命名空间:
helm install your-chart-name ./your-chart-directory --namespace cert-manager
这样就能确保cert-manager正常运行在指定命名空间,同时你的Chart资源也能正确关联到它的webhook服务,避免出现找不到服务的错误。
内容的提问来源于stack exchange,提问作者DlekaShelHaHaim

