1

我的主要任务是从 EC2 实例/服务器创建一个 Jenkins 节点。

Jenkins 服务器位于 EKS 上,通过jx

$ 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

我面临的问题:

  • Jenkins 的 Helm 图表部署了 2 个名为jenkins-agent和的服务jenkins相关问题
  • 它默认配置为仅使用jenkins服务作为后端的入口50000,外部代理无法通过 HOST 访问端口。
  • 我无法编辑jenkins入口以指向jenkins具有 2 个后端端口的服务8080& 50000(入口只允许每个服务/路径一个端口!)。相关问题

您可以在这里看到,这里有 2 个服务:1 个jenkins用于 jenkins master,1 个用于 jenkins slave jenkins-agent,但只有一个入口jenkins指向jenkinsport 上的 svc 后端8080

$ 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-agentsvc 的入口并使用类似alb.ingress.kubernetes.io/group.name: mygroup. 信息链接

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

我检查了 SecurityGroups 以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 从站添加到 Jenkins,其中 2 个服务一个用于 UI,另一个用于代理。上面的java命令要求两个端口都打开!

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

我没主意了...

4

1 回答 1

1

经过一整天的实验...

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

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

詹金斯代理服务 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: ****

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

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

信息:已连接

于 2020-04-01T16:28:48.103 回答