Я ищу способ прохождения 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 может динамически изменять этот адрес.