首页 > 其他分享 >CICD 小提示:Jenkins 部署在 Kubernetes 集群中如何暴露服务?

CICD 小提示:Jenkins 部署在 Kubernetes 集群中如何暴露服务?

时间:2023-12-11 13:32:50浏览次数:39  
标签:50000 26 remoting Kubernetes CICD hudson 端口 Agent Jenkins

本文是  此长文中的部分内容,方便初学者照着操作。

Jenkins 部署

详细步骤略,参考文章:https://md.huanghuanhui.com/RuoYi-Cloud/RuoYi-Cloud.html


服务暴露细节

Jenkins 共需要暴露两个服务到外部,一个是 web 服务,用于管理操作,默认使用 8080 端口,另一个为 Agent 连接的服务,默认使用 50000 端口。

为了保证流水线正常工作,最终 web 服务和 Agent 服务的入口一致,因此暴露方式有下面几种:

  • 使用 Service Type Loadbalancer 同时暴露 web 和 Agent 服务,Loadbalancer IP 作为统一的入口,此时 Jenkins web 使用 HTTP 明文,Agent 可以直接使用 50000 端口
  • 使用 Service Type NodePort 同时暴露 web 和 Agent 服务,任意 Worker IP 作为统一的入口,此时 Jenkins web 和 Agent 服务均得使用 30000+ 的随机或者指定端口,其中 Web 依然是 HTTP 明文
  • Agent 服务使用 NodePort 发布,Web 使用 Nginx Ingress 暴露,在 Ingress 上做 TLS 卸载,其中 Nginx Ingress Controller 必须也使用 NodePort 或者 Hostport(80+443)进行暴露,外部访问时使用任意 Worker IP 作为入口
  • 和方式 2 类似,使用 NodePort 暴露两个服务,但在外部使用负载均衡器进行负载,本文介绍这种方式

流量拓扑

Client --> 外部 Nginx LB(443 + 50000) --> NodePort(30456+30000) --> Jenkins Pod

NodePort 配置

  • Jenkins Web 8080 转到 30456 端口
  • Jenkins Agent 服务 50000 端口转到 30000 端口
[root@k8s-m01 ~]# kubectl -n jenkins-prod get svc
NAME           TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                          AGE
jenkins-prod   NodePort   10.98.150.143   <none>        8080:30456/TCP,50000:30000/TCP   27d

外部 LB 配置

外部 LB 配置(Web 服务,在 LB 上进行 TLS 卸载):

CICD 小提示:Jenkins 部署在 Kubernetes 集群中如何暴露服务?_Jenkins

CICD 小提示:Jenkins 部署在 Kubernetes 集群中如何暴露服务?_Agent 代理设置_02

使用 Let's Encrypt 的免费证书:

CICD 小提示:Jenkins 部署在 Kubernetes 集群中如何暴露服务?_Jenkins Agent访问问题_03

外部 LB 配置(Agent 服务),将 50000 转成 NodePort 30000:

CICD 小提示:Jenkins 部署在 Kubernetes 集群中如何暴露服务?_50000_04

CICD 小提示:Jenkins 部署在 Kubernetes 集群中如何暴露服务?_Agent 代理设置_05

其他 Jenkins 配置

如果环境中想使用非 50000 的其他端口,需要在 Jenkins 的下列位置修改端口(注意:此端口是最终暴露到外面的端口,而非容器端口,容器端口默认 50000 无需修改)

CICD 小提示:Jenkins 部署在 Kubernetes 集群中如何暴露服务?_Agent 代理设置_06


Agent 连接失败的日志参考 - 无法访问端口

- jnlp -- terminated (0)
-----Logs-------------
INFO: Could not locate server among [https://jenkins.halfcoffee.com/]; waiting 10 seconds before retry
java.io.IOException: https://jenkins.halfcoffee.com/ provided port:50000 is not reachable on host jenkins.halfcoffee.com
	at org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver.resolve(JnlpAgentEndpointResolver.java:304)
	at hudson.remoting.Engine.innerRun(Engine.java:809)
	at hudson.remoting.Engine.run(Engine.java:563)

Dec 07, 2023 6:26:26 AM hudson.remoting.Launcher$CuiListener status
INFO: Locating server among [https://jenkins.halfcoffee.com/]
Dec 07, 2023 6:26:26 AM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
INFO: Remoting server accepts the following protocols: [Ping]
Dec 07, 2023 6:26:26 AM hudson.remoting.Launcher$CuiListener status
INFO: Agent discovery successful
  Agent address: jenkins.halfcoffee.com
  Agent port:    50000
  Identity:      75:c6:a2:4c:4f:20:87:8b:ae:59:50:86:57:63:04:c3
Dec 07, 2023 6:26:26 AM hudson.remoting.Launcher$CuiListener status
INFO: Handshaking
Dec 07, 2023 6:26:26 AM hudson.remoting.Launcher$CuiListener status
INFO: Connecting to jenkins.halfcoffee.com:50000
Dec 07, 2023 6:26:26 AM hudson.remoting.Launcher$CuiListener status
INFO: Server reports protocol JNLP4-connect-proxy not supported, skipping
Dec 07, 2023 6:26:26 AM hudson.remoting.Launcher$CuiListener status
INFO: Server reports protocol JNLP4-connect not supported, skipping
Dec 07, 2023 6:26:26 AM hudson.remoting.Launcher$CuiListener status
INFO: reconnect rejected, sleeping 10s: 
java.lang.Exception: The server rejected the connection: None of the protocols are enabled
	at hudson.remoting.Engine.onConnectionRejected(Engine.java:949)
	at hudson.remoting.Engine.innerRun(Engine.java:898)
	at hudson.remoting.Engine.run(Engine.java:563)

如果 Agent 连接成功,在 Jenkins 中不会有 jnlp 相关的错误。

标签:50000,26,remoting,Kubernetes,CICD,hudson,端口,Agent,Jenkins
From: https://blog.51cto.com/sparkgo/8771401

相关文章

  • pytest + yaml 框架 -60.git+jenkins+allure+钉钉通知反馈
    前言当我们自动化用例写完后,接下来就是如何运行用例,生成报告以及反馈通知了。如果你们公司已经有jenkins了,那么直接集成到jenkins上构建你的自动化任务是非常方便的。用例上传git仓库第一步,将写好的自动化用例,上传到本公司的git仓库。jenkins自动拉取仓库代码在jenkins上......
  • devops步骤 -- jenkins安装
    安装的docker-compose##安装步骤参考:编写docker-compose.ymlversion:'3'services:#集合docker_jenkins:user:root#为了避免一些权限问题在这我使用了rootrestart:always......
  • Jenkins搭建步骤
    Jenkins搭建步骤1、下载jenkins镜像jenkins需要依赖jdk环境,所以我们直接下载带JDK的jenkins镜像,如下图dockerpulljenkins/jenkins:jdk11`2、创建jenkins容器下面是创建jenkins容器的docker命令,解释一下创建参数dockerrun-p8087:8080--restart=always-v/etc/localt......
  • 深入解析Jenkins流水线:构建、部署和自动化交付
    enkins是一个强大的开源自动化服务器,而Jenkins流水线(JenkinsPipeline)是一种以代码为基础的自动化方式,允许您定义和管理CI/CD过程。在本文中,我们将深入探讨Jenkins流水线的各个方面,包括其基本概念、语法、构建、部署以及实现自动化交付的最佳实践。第1部分:基本概念和语法1.1什么是......
  • Kubernetes声明性GitOps持续交付工具-Argo CD
    GitOps持续交付工具-ArgoCD1.ArgoCD简介Argo目前已被CNCF基金会收录,成为毕业项目。Argo站点地址:https://argoproj.github.io/,其中ArgoCD是Argo项目中的一个分支。argoCD文档帮助:https://argo-cd.readthedocs.io/en/stable/ArgoCD是用于Kubernetes的声明性GitOps持续交......
  • 在 Kubernetes 中使用 ab 工具测试 HPA
    在Kubernetes中使用ab工具测试HPAKubernetes提供了强大的横向扩展能力,可以根据负载动态调整Pod的副本数量。本文将介绍如何使用ab工具测试HorizontalPodAutoscaler(HPA)。下载并安装ab工具首先,确保你的系统上安装了ab工具。在Ubuntu上,可以使用以下命令安装:su......
  • 使用 Kubernetes 为 CI/CD 流水线打造高效可靠的临时环境
    介绍在不断发展的科技世界中,快速构建高质量的软件至关重要。在真实环境中测试应用程序是及早发现和修复错误的关键。但是,在真实环境中设置CI/CD流水线进行测试可能既棘手又昂贵。 Kubernetes是一个流行的容器编排平台,提供临时环境解决方案。在Kubernete的帮助下,用户能根......
  • Windows上安装jenkins
    官网下载jenkinshttps://www.jenkins.io/zh/download/选择Windows版本下载,安装 注意,需要java11,17或21才能安装java下载地址  https://www.oracle.com/java/technologies/downloads/ 安装完jenkins后,在浏览器打开  http://localhost:8080/打开页面上给的地址,C......
  • 快速认识什么是:Kubernetes
    每次谈到容器的时候,除了Docker之外,都会说起Kubernetes,那么什么是Kubernetes呢?今天就来一起学快速入门一下Kubernetes吧!希望本文对您有所帮助。Kubernetes,一种用于管理和自动化云中容器化工作负载的工具。想象一下你有一个管弦乐队,将每个音乐家视为一个码头容器。为了创作优......
  • 单元测试平台搭建:sonarQube+sonarScanner+Jenkins+jacoco
    单元测试平台搭建及结果分析一、方案需求目标:提高单元测试覆盖率和规范代码编写规范选用工具:Sonarqube、sonarqubeScanner、Jenkins、jacoco方案:工程中引入jacoco进行代码覆盖率统计,通过sonarqubescanner扫描工程编写规范,编写单元测试代码后,结合Jenkins每次的编译部署自动......