求助:Jenkins Kubernetes Credential Provider插件无法获取K8s凭证
修复Jenkins无法从Kubernetes Secrets获取凭证的问题
报错提示:无法从Kubernetes Secrets获取凭证,查看日志详情得到
java.net.UnknownHostException: kubernetes.default.svc: Name or service not known,Jenkins版本2.368,Kubernetes Credentials Provider Plugin版本1.206.v7ce2cf7b_0c8b
以下是具体修复思路:
检查Jenkins Pod的DNS解析能力
- 进入Jenkins Pod执行命令:
kubectl exec -it <jenkins-pod-name> -- nslookup kubernetes.default.svc,验证域名是否能解析出对应IP - 查看Pod的DNS策略:
kubectl describe pod <jenkins-pod-name> | grep -i dns,确保dnsPolicy为ClusterFirst(K8s默认配置),如果配置异常,修改Jenkins Deployment的spec.template.spec.dnsPolicy为ClusterFirst后重启Pod
- 进入Jenkins Pod执行命令:
排查集群DNS服务状态
- 检查CoreDNS(或kube-dns)Pod运行状态:
kubectl get pods -n kube-system -l k8s-app=kube-dns,确保所有Pod处于Running状态 - 查看CoreDNS日志排查异常:
kubectl logs -n kube-system <coredns-pod-name>,如果发现DNS服务异常,尝试重启Pod:kubectl delete pod -n kube-system <coredns-pod-name>(K8s会自动重建Pod)
- 检查CoreDNS(或kube-dns)Pod运行状态:
验证Pod网络与DNS配置文件
- 在Jenkins Pod内ping K8s API Server的IP(可通过
kubectl cluster-info获取),确认网络连通性正常 - 查看Pod内的DNS配置文件:
kubectl exec -it <jenkins-pod-name> -- cat /etc/resolv.conf,确保nameserver指向集群DNS服务的IP(通常是kube-system namespace下的CoreDNS ClusterIP)
- 在Jenkins Pod内ping K8s API Server的IP(可通过
检查插件配置与权限
- 进入Jenkins系统管理→插件配置,找到Kubernetes Credentials Provider的配置项,尝试将Kubernetes API Server地址从
kubernetes.default.svc替换为集群API Server的IP,测试是否能正常获取凭证 - 确认Jenkins使用的ServiceAccount拥有读取Secrets的权限,检查对应的ClusterRole和ClusterRoleBinding配置,确保包含
secrets资源的get、list权限
- 进入Jenkins系统管理→插件配置,找到Kubernetes Credentials Provider的配置项,尝试将Kubernetes API Server地址从
版本兼容性排查
查看Kubernetes Credentials Provider Plugin的官方文档,确认当前插件版本与Jenkins 2.368是否兼容,尝试升级插件到最新稳定版,或回退到已知兼容的版本后重启Jenkins
内容的提问来源于stack exchange,提问作者Avi
相关产品推荐
相关产品推荐

