Jenkins на EKS не может подключиться к внешнему серверу EC2, поскольку рабочий узел Jenkins: ERROR `порт: 50000 недоступен` - PullRequest
1 голос
/ 01 апреля 2020

Моя основная задача - создать узел Jenkins из экземпляра / сервера EC2.

Сервер 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 развертывает 2 службы с именами jenkins-agent и jenkins. связанная проблема
  • Вход по умолчанию настроен на использование только jenkins службы в качестве бэкэнда, а порт 50000 недоступен для внешних агентов через HOST.
  • Я не могу отредактировать вход jenkins так, чтобы он указывал на службу jenkins с двумя внутренними портами 8080 & 50000 (вход разрешает только один порт на службу / путь!). связанная с этим проблема

Здесь вы можете видеть, что здесь есть 2 услуги: 1 jenkins для мастера jenkins и одна для подчиненного jenkins jenkins-agent, но только один вход jenkins который указывает на jenkins sv c backend на порт 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

Я попытался создать другой входной спецификатор c для jenkins-agent sv c и использовать что-то вроде alb.ingress.kubernetes.io/group.name: mygroup. info link

Мне не удалось связать 2 входа вместе, к сожалению, вход jenkins имеет kubernetes.io/ingress.class: nginx, а ingress.class не имеет этой функции ...

Я проверил SecurityGroups, чтобы открыть порт 50000.

Я попытался go на 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 обслуживает один для пользовательского интерфейса и другой для агента. Приведенная выше команда java требует, чтобы оба порта были открыты!

На том же PATH, потому что вам нужен порт 8080, чтобы получить slave-agent.jnlp, и после его получения, в фоновом режиме он пытается подключиться к порту 50000

Я отсутствует идей ...

1 Ответ

1 голос
/ 01 апреля 2020

После экспериментов весь день ...

Я пришел с решением, оно не самое лучшее или прямолинейное, но, по крайней мере, оно работает. Мой раб связан! INFO: Connected

Итак, я отредактировал сервис jenkins-agent и с type: ClusterIP я изменил на type: LoadBalancer. Это дало мне новый fre sh loadbalancer, и после того, как я решил добавить порт 8080, потому что в файле службы yaml используется тот же selector, что и в jenkins service.

( jenkins-agent service 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

INFO: Connected

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...