Дженкинс: внешние узлы не могут зарегистрироваться, чтобы освоить в Kubernetes - PullRequest
2 голосов
/ 19 июня 2019

Я ищу способ прохождения JNLP через вход Kubernetes nginx. Любой совет будет высоко ценится. В частности, я использую кластер "Rancher 2" со встроенным входом Nginx.

Подробно моя проблема заключается в следующем: я выполняю мастер Jenkins как рабочий процесс поверх кластера Kubernetes, и я хотел бы добавить внешний компьютер в качестве подчиненного узла к этому экземпляру Jenkins.

Jenkins JNLP предоставляется входом nginx L7 с выделенным именем хоста, и это имя хоста настраивается в Advanced/Tunnel connection through подчиненного узла. Я могу запросить этот адрес по http от ведомого с curl, и он возвращает правильный ответ:

Jenkins-Agent-Protocols: JNLP-connect, JNLP2-connect, JNLP3-connect, JNLP4-connect, Ping Jenkins-Version: 2.176.1 Jenkins-Session: 0fe8c345 Client: 10.42.0.0 Server: 10.42.1.37 Remoting-Minimum-Version: 3.4

Однако с JNLP это не работает. Когда я пытаюсь зарегистрировать новый узел с помощью этой команды:

java -jar agent.jar -jnlpUrl http://devops.xxxx.local/jenkins/computer/EPHEMERAL-WIN-NODE/slave-agent.jnlp -secret xxxxxxxxxxxxxxx

Возвращает ошибку: ConnectionRefusalException: Server didn't accept the handshake: HTTP/1.1 400 Bad Request

Чтобы убедиться, что это не проблема с подключением, я изменил туннельный адрес узла на прямой адрес рабочего узла, и в этом случае он работает хорошо. Однако это не может быть решением, потому что Kubernetes может динамически изменять этот адрес.

1 Ответ

0 голосов
/ 10 июля 2019

Порт JNLP использует протокол tcp, а не http.Вы не можете http прокси через nginx.Вы можете попробовать с прокси nginx tcp https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/

...