HAProxy Lua как изменить порт сервера? - PullRequest
1 голос
/ 03 мая 2020

Server.set_addr (sv, addr)

Я не могу понять, что метод принимает в качестве входных данных. Казалось бы, Server.get_addr(sv) возвращает ip:port - поэтому вам также нужно передать ip:port, но нет. Это не работает.

Документация гласит: See the documentation for the control socket for more information on the string format.

Ну, я видел, что вам нужно передать ip port: port (пример: 127.0.0.1 port 80). Но и это не сработает.

Единственное, что работает, это передача только ip (пример: 127.0.0.1).

Вопрос в том, как изменить порт?

Пример кода: (если не работает - нет записи в журнале)

-- work
-- log entry: changed its IP from 1.1.1.1 to 2.2.2.2 by Lua script.
local newAdr = backendServer.ip
server:set_addr(newAdr)

-- not work
local newAdr = backendServer.port
server:set_addr(newAdr)

-- not work
local newAdr = backendServer.ip .. ":" .. backendServer.port
server:set_addr(newAdr)

-- not work
local newAdr = backendServer.ip .. " " .. backendServer.port
server:set_addr(newAdr)

-- not work
local newAdr = backendServer.ip .. " port " .. backendServer.port
server:set_addr(newAdr)

1 Ответ

2 голосов
/ 03 мая 2020

Обновление: Начиная с HAProxy 2.2dev7, эта функциональность теперь объединена: set_addr принимает дополнительный необязательный параметр для указания нового порта.


В настоящее время это не так можно сделать это через Lua. Просмотр исходного кода HAProxy показывает, что set_addr вызывает hlua_server_set_addr, что вызывает server_parse_addr_change_request, что вызывает update_server_addr, который обновляет только адрес, а не порт. Сравните это с сокетом управления set server, который вызывает cli_parse_set_server, который вызывает update_server_addr_port, который также обновляет порт.

Однако есть две хорошие новости:

  1. Поскольку сокет управления может это делать, вы можете использовать его в качестве обходного пути.
  2. Было бы очень просто Измените интерфейс Lua HAProxy для поддержки обновления порта, так как все логики c уже есть. Я послал патч, который делает это в их список рассылки.
...