我正在尝试在 Digital Ocean Kubernetes 集群中设置 Jenkins。我正在使用 NGINX 入口控制器,因为我想从子域(jenkins.example.com)访问我的服务器。到目前为止一切正常,我在所述域上使用自定义证书保护了我的 UI。在尝试将代理(或我在其他地方读到的从属设备?)连接到服务器时,我开始遇到问题。
我试过的
我试图设置一个负载均衡器,但由于我使用的是 Digital Ocean 并且我发现的大多数文档都是针对 GKE / EKS 和其他具有自己内部 LB 的文档,所以我无法让它工作。我还尝试在服务的端口名称上映射路由/agents
,然后在另一个具有“ClusterIP”类型的服务上映射,但没有成功(从 Jenkins 中找不到)。
我目前的配置
詹金斯部署.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins-dep
labels:
app: jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins
template:
metadata:
labels:
app: jenkins
spec:
containers:
- name: jenkins
image: jenkins/jenkins:lts-jdk11
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
- containerPort: 50000
詹金斯-service.yaml
apiVersion: v1
kind: Service
metadata:
name: jenkins-svc
labels:
app: jenkins
spec:
type: NodePort
selector:
app: jenkins
ports:
- name: ui
protocol: TCP
port: 8080
targetPort: 8080
nodePort: 32500
- name: agents
protocol: TCP
port: 50000
targetPort: 50000
nodePort: 32501
詹金斯入口.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: jenkins-ingress
spec:
tls:
- hosts:
- jenkins.example.com
secretName: tls-secret
rules:
- host: jenkins.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: jenkins-svc
port:
name: ui
#- path: /agents
# pathType: Prefix
# backend:
# service:
# name: jenkins-svc
# port:
# name: agents
底线是:我如何使 Jenkins 端口 50000 可供代理连接到我的服务器上?或者我如何更改 Jenkins 设置以适应这样的配置?
据我所知,Jenkins使用自定义协议与其构建代理进行通信,该协议是二进制 Java RMI,而不是基于 HTTP。由于 Ingress 资源仅用于HTTP 请求
host:
的基于虚拟调度,因此您不能使用任何声明来执行此操作kind: Ingress
但是,特别是使用 nginx-ingress 控制器,它们确实允许公开 TCP 服务,这可能会做你想做的事