EKS上Jenkins无法并行执行任务:Agent连接超时问题
Jenkins EKS集群Agent无法连接JNLP端口导致无法并行任务的解决方案
核心问题
从日志可见,Jenkins Master能成功创建Agent Pod,但后续Agent无法通过jenkins-agent.jenkins.svc.cluster.local:50000连接到Master,出现连接超时,导致任务只能串行执行。第一个Agent可正常连接,说明基础通信链路曾正常,问题集中在服务配置、端口监听或网络策略层面。
1. 检查Jenkins Agent服务的可用性
首先确认jenkins-agent服务是否正确关联到Master Pod:
- 查看服务状态:
确认kubectl get svc jenkins-agent -n jenkinsPORT(S)列包含50000/TCP,类型为ClusterIP。 - 检查服务关联的Endpoints:
确保Endpoints列表中存在Jenkins Master Pod的IP和50000端口;若为空或无匹配IP,检查服务的selector与Master Pod的labels是否一致:kubectl get endpoints jenkins-agent -n jenkins
若selector不匹配,更新服务配置的selector字段。kubectl describe svc jenkins-agent -n jenkins | grep Selector kubectl get pod jenkins-0 -n jenkins --show-labels
2. 验证Master Pod的50000端口监听状态
进入Jenkins Master Pod,检查端口是否正常监听:
kubectl exec -it jenkins-0 -n jenkins -- netstat -tulpn | grep 50000
若未找到监听记录,按以下方式处理:
- 登录Jenkins控制台,进入Manage Jenkins > Configure Global Security,确认TCP port for JNLP agents已设置为50000且未勾选Disable。
- 若配置正常,重启Master Pod:
kubectl delete pod jenkins-0 -n jenkins
3. 排查网络策略与集群网络限制
- 检查jenkins命名空间下的NetworkPolicy是否阻止了Agent到Master的50000端口通信:
若存在限制策略,添加允许Agent Pod访问Master 50000端口的规则,示例:kubectl get networkpolicy -n jenkinsapiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-agent-to-master namespace: jenkins spec: podSelector: matchLabels: app: jenkins ingress: - from: - podSelector: matchLabels: jenkins/agent: "true" # 根据你的Agent Pod标签调整 ports: - protocol: TCP port: 50000 - 检查EKS节点安全组与VPC网络ACL,确保集群内部Pod之间的50000端口TCP流量未被阻止。
4. 临时绕过服务直接测试Pod通信
若服务层面排查无果,直接用Master Pod IP测试Agent连接:
# 获取Master Pod IP MASTER_IP=$(kubectl get pod jenkins-0 -n jenkins -o jsonpath='{.status.podIP}') # 进入异常的Agent Pod kubectl exec -it devops-iac-prod-eu-west-1-1-master-28-71sh2-hhnlk-46vsg -n jenkins -- bash # 测试端口连通性 telnet $MASTER_IP 50000
若直接连接Pod IP成功,说明jenkins-agent服务存在异常,删除并重新创建服务:
kubectl delete svc jenkins-agent -n jenkins # 重新应用服务配置(替换为你的服务yaml路径) kubectl apply -f ./jenkins-agent-service.yaml -n jenkins
内容的提问来源于stack exchange,提问作者gary rizzo
相关产品推荐
相关产品推荐

