Jenkins部署于OpenStack时K8s插件动态创建Slave失败问题咨询
核心问题:Jenkins部署在OpenStack上能用K8s插件创建Slave Agent吗?
先给你个明确的答案——完全可以!Jenkins并不需要必须部署在K8s集群内部才能使用Kubernetes插件实现动态Slave Agent。只要你的Jenkins服务器能正常访问K8s集群的API Server,同时K8s集群的网络能允许新建的Agent Pod和Jenkins Master通信,这个方案就可行。
针对你遇到的TLS握手超时问题的排查步骤
你提到Agent Pod能创建但无法启动,kubectl logs返回net/http: TLS handshake timeout,这个问题大概率出在网络连通性或者TLS配置上,推荐按以下步骤排查:
先验证Jenkins服务器到K8s节点的网络连通性
报错里的XX.XX.XX.XX:10250是K8s节点kubelet的端口,先在Jenkins所在的OpenStack服务器上执行curl -v https://XX.XX.XX.XX:10250,看看能不能建立TLS连接:- 如果连接超时,优先检查OpenStack的安全组规则,确认是否放行Jenkins服务器IP到K8s节点10250端口的TCP流量;
- 同时检查K8s集群的节点防火墙、集群网络策略,是否限制了外部对kubelet端口的访问;
- 也可以用
traceroute XX.XX.XX.XX排查路由是否有中断的情况。
检查Jenkins Kubernetes插件的配置细节
插件配置里的小失误也可能导致这类问题:- 确认K8s API Server的地址、端口填写正确,没有拼写错误;
- 验证认证方式(比如kubeconfig文件、ServiceAccount令牌)是否有效,确保Jenkins拥有创建Pod、访问kubelet的权限;
- 用
kubectl describe pod <pod-name>查看Pod的Events日志,确认Agent镜像是否拉取成功——如果镜像拉取失败,也会间接导致Pod无法启动,后续日志获取失败。
排查kubelet的TLS配置问题
TLS握手超时也可能是kubelet的证书配置异常:- 登录K8s节点,查看kubelet的日志(比如
journalctl -u kubelet),看看有没有TLS相关的错误信息; - 如果Jenkins使用kubeconfig连接K8s,确保kubeconfig文件里的CA证书是正确的,且Jenkins进程有权限读取这个证书文件。
- 登录K8s节点,查看kubelet的日志(比如
测试网络延迟情况
如果网络是通的,但延迟过高也会触发TLS握手超时。可以在Jenkins服务器上用ping XX.XX.XX.XX持续测试,看看是否有丢包或者延迟过高的情况,这类问题可能需要调整网络链路或者K8s的超时配置。
另外,你可以先在K8s集群内的任意节点上执行kubectl logs <pod-name>,如果能正常获取日志,那问题基本可以锁定在Jenkins服务器到K8s节点的外部网络上;如果集群内也无法获取日志,那就是K8s集群内部的kubelet或者日志服务有问题。
内容的提问来源于stack exchange,提问作者Phạm Nhật Minh

