EKS 上的 Jenkins 无法作为 Jenkins worker-node 连接到外部 EC2 服务器:错误 `port:50000 is not reachable`

Jenkins on EKS can't connect to external EC2 server as Jenkins worker-node: ERROR `port:50000 is not reachable`

我的主要任务是从 EC2 创建 Jenkins 节点 instance/server。

Jenkins 服务器在通过 jx

部署的 EKS 上
$ jx version

jx                 2.0.818
jenkins x platform 2.0.1376
Kubernetes cluster v1.13.12
kubectl            v1.17.0
helm client        Client: v2.16.1
git                2.23.0
Operating System   Mac OS X 10.15.4

我面临的问题:

你可以看到这里有 2 个服务:1 个 jenkins 用于 jenkins master,1 个用于 jenkins slave jenkins-agent,但只有一个入口 jenkins 指向 jenkins 端口 8080.

上的 svc 后端
$ kubectl get svc
NAME                        TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)
heapster                    ClusterIP       ************    <none>         8082/TCP
jenkins                     ClusterIP       ************    <none>         8080/TCP
jenkins-agent               ClusterIP      ************     <none>         50000/TCP
jenkins-x-chartmuseum       ClusterIP      ************     <none>         8080/TCP
jenkins-x-docker-registry   ClusterIP     ************      <none>         5000/TCP



$ kubectl get ingress
NAME              HOSTS                             ADDRESS            PORTS
chartmuseum       chartmuseum.**                    ***.amazonaws.com   80  
docker-registry   docker-registry.**                ***.amazonaws.com   80
jenkins           jenkins.**                        ***.amazonaws.com   80

我试图创建另一个特定于 jenkins-agent svc 的入口并使用类似 alb.ingress.kubernetes.io/group.name: mygroup 的东西。 info link

我未能将 2 个入口绑定在一起,不幸的是 jenkins 入口具有 kubernetes.io/ingress.class: nginxingress.class 没有此功能...

我检查了安全组以打开端口 50000

我尝试继续使用 AWS 并手动添加一个 50000 端口到负载均衡器,但是当我在 EC2 上 运行 时仍然是这个命令:

java -jar agent.jar -jnlpUrl http://JENKINS_URL/computer/****-service/slave-agent.jnlp -secret ****** -workDir "/home/ec2-user/jenkins_home" -failIfWorkDirIsMissing

失败并出现此错误:

provided port:50000 is not reachable

如何将外部 Jenkins Slave 添加到 Jenkins,其中有 2 个服务,一个用于 UI,另一个用于代理。上面的 java 命令要求两个端口都打开!

在同一个 PATH 因为你需要端口 8080 来获取 slave-agent.jnlp 并且在你获取它之后,它会在后台尝试连接到端口 50000

我没主意了...

经过一整天的试验...

我想出了一个解决方案,它不是最好的或直接的,但至少它是有效的。我的奴隶已连接! INFO: Connected

因此,我编辑了 jenkins-agent 服务,并从 type: ClusterIP 更改为 type: LoadBalancer。这给了我一个新的负载均衡器,在我决定添加端口 8080 之后,因为在服务 yaml 文件中它使用与 jenkins 服务相同的 selector

(jenkins-agent 服务 yaml)

  spec:
  clusterIP: ***
  externalTrafficPolicy: Cluster
  ports:
  - name: slavelistener
    nodePort: 30258
    port: 50000
    protocol: TCP
    targetPort: 50000
  - name: http
    nodePort: 30840
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    component: jenkins-x-jenkins-master
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - hostname: ****

在我的新 jenkins-agent 负载均衡器的末尾添加端口 8080 之后:

java -jar agent.jar -jnlpUrl http://****.elb.amazonaws.com:8080/computer/***-service/slave-agent.jnlp -secret ***** -workDir "/home/ec2-user/jenkins_home" -failIfWorkDirIsMissing