自建Kubernetes集群Ingress Controller安装失败:缺失ingress-nginx-admission Secret导致webhook-cert卷挂载错误
自建Kubernetes集群Ingress Controller安装失败:缺失ingress-nginx-admission Secret导致webhook-cert卷挂载错误
兄弟别慌,我之前刚踩过一模一样的坑!这个报错本质是Ingress Controller的准入Webhook组件依赖的认证Secret没被正确创建,咱们一步步来解决:
第一步:确认Secret确实缺失
先检查你的Ingress Controller所在命名空间(默认是ingress-nginx)里有没有目标Secret:
kubectl get secrets -n ingress-nginx
如果输出里找不到ingress-nginx-admission,那确实是这个Secret没生成,接下来手动创建它。
第二步:生成Webhook所需的证书和密钥
用openssl和Kubernetes自带的CA生成符合要求的证书文件:
# 1. 生成2048位的私钥 openssl genrsa -out tls.key 2048 # 2. 生成证书签名请求(CSR),注意CN要对应Webhook服务的域名,格式为「ingress-nginx-admission.你的命名空间.svc」 # 用默认命名空间的话直接执行这条: openssl req -new -key tls.key -out tls.csr -subj "/CN=ingress-nginx-admission.ingress-nginx.svc" # 3. 在K8s中创建CSR并批准签名 kubectl create csr ingress-nginx-admission --key tls.key --cert tls.csr --namespace ingress-nginx kubectl certificate approve ingress-nginx-admission -n ingress-nginx # 4. 导出K8s CA签名后的证书 kubectl get csr ingress-nginx-admission -n ingress-nginx -o jsonpath='{.status.certificate}' | base64 -d > tls.crt
第三步:创建缺失的Secret
用刚才生成的tls.key和tls.crt创建目标Secret:
kubectl create secret tls ingress-nginx-admission --key tls.key --cert tls.crt -n ingress-nginx
第四步:重启Ingress Controller Pod让配置生效
最后重启控制器Pod,让它重新挂载这个卷:
kubectl rollout restart deployment ingress-nginx-controller -n ingress-nginx
额外提示:用Helm安装的场景
下次安装时可以加上这两个参数,让Helm自动处理Secret的创建和证书签名,避免手动操作:
helm install ingress-nginx ingress-nginx/ingress-nginx \ --namespace ingress-nginx \ --create-namespace \ --set controller.admissionWebhook.enabled=true \ --set controller.admissionWebhook.patch.enabled=true
备注:内容来源于stack exchange,提问作者Tom Clerk
相关产品推荐
相关产品推荐

