如何在不改动Jenkins部署的前提下用JNLP连接EKS Fargate与ALB后的Jenkins
解决方案:无需改动Jenkins部署的JNLP跨账号Fargate连接方案
核心问题本质
ALB是HTTP/HTTPS七层负载均衡,会对流量做HTTP解析和处理,而Jenkins JNLP4协议依赖原始TCP字节流传输,ALB无法透传这类非HTTP流量,导致握手时丢失确认序列,触发连接拒绝。换alpine镜像无法解决,因为问题出在传输层而非镜像环境。
具体实现步骤
给Jenkins EC2新增NLB专门承载JNLP流量
- 在Jenkins所在VPC创建Network Load Balancer(NLB),选择TCP协议,监听端口设为
50000(对应Jenkins默认JNLP端口,若已修改则同步调整)。 - 创建目标组,类型选
instance,目标指向运行Jenkins的EC2实例,端口设为50000。 - 调整EC2安全组:开放
50000端口给EKS Fargate所在账号的VPC CIDR或Fargate专用安全组。 - 调整NLB安全组:允许EKS Fargate侧的流量访问
50000端口。
- 在Jenkins所在VPC创建Network Load Balancer(NLB),选择TCP协议,监听端口设为
配置Jenkins Kubernetes插件指向NLB的JNLP地址
- 进入Jenkins全局配置,找到Kubernetes插件的设置项。
- 在
JNLP Agent Tunnel字段填入NLB的DNS名称加端口,格式为:nlb-xxxxxx.elb.amazonaws.com:50000。 - 确保Jenkins主节点的JNLP端口配置(
Manage Jenkins > Configure Global Security > Agent)与NLB监听端口一致。
跨账号权限验证
确认EKS Fargate所在AWS账号的网络策略/安全组允许访问NLB的50000端口,可通过在Fargate Pod内执行telnet <NLB地址> 50000测试连通性。
关键说明
此方案无需改动现有Jenkins的EC2部署和ALB配置,仅通过新增NLB分流JNLP流量,既保留原有ALB的HTTP/HTTPS访问能力,又解决了Fargate代理的JNLP连接问题。
内容的提问来源于stack exchange,提问作者cyrax1441
相关产品推荐
相关产品推荐

