Nginx

如何通過 Kubernetes 上的 Ingress 控制器使 Jenkins 代理埠可用?

  • June 9, 2021

我正在嘗試在 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 服務,這可能會做你想做的事

引用自:https://serverfault.com/questions/1066169