Я понимаю, что могу просить невозможное здесь -
На данный момент я использую слишком много эластичных IP-адресов, а они стоят денег. Они не только стоят денег ... но в случае катастрофы требуется время, чтобы повторно подключить 25-30 эластичных IP-адресов к машине. Все эти эластичные IP-адреса привязаны к одной машине и имеют сопоставление внутренних машин 1 к 1. Я хотел уменьшить количество IPS и объединить все мое использование на один или два эластичных IP. Затем я хотел перенаправить все эти хосты на их соответствующие машины с этого исходного IP-адреса. Однако у меня это не сработало из-за природы HTTP и TCP и отсутствия дополнительных заголовков. Я ищу предложения о том, что мне не хватает, или, в качестве альтернативы, я могу решить эту проблему.
У меня много разных хостов, которые работают с TCP-портами - например
mydbserver.mycompany.com:3306
myseparatedb.mycompany.com:3306
anotherdb.mycompany.com:3306
myrdppc.mycompany.com:3389
mywebserver.mycompany.com:80/:443
myelasticsearch.mycompany.com:9200
mybamboo.mycompany.com:88
mybitbucket.mycompany.com:9090
и т. д. и т. д.
пример консолидированного IP: 200.31.21.11 haproxy bound IP: 3.2.44.1
Я использую комбинацию iptables и HAProxy. IPtables на машине шлюза и HAProxy на другой машине. Мне пришла в голову идея назначить разные записи DNS для каждой из этих машин. Каждому назначен один и тот же IP-адрес «шлюза». IPtables настроен для прослушивания любого запроса, идущего к 200.31.21.11 на любом порту, и перенаправления его на HAProxy на порт 999 (произвольный порт, который я выбрал). Это означает, что у HAProxy есть интерфейс, который привязан к 3.2.44.1:999.
Затем интерфейс будет направлять запрос на один из множества серверных интерфейсов. Тем самым направляя запрос на соответствующую машину.
Сначала я попытался сопоставить заголовки в запросе с помощью acl --- если заголовок хоста совпадал с mydbserver.mycompany.com, затем перенаправил его на соответствующий бэкэнд, который затем перенаправил бы запрос на имя машины на порт 3306
Однако это не работает, потому что заголовки хостов не отправляются по TCP-запросам, и haproxy не сможет устанавливать соединения с базой данных через http. Это проблематично, потому что нет способа отличить запрос от его хоста.
Мне нравится это решение, потому что с меня будет взиматься плата только за один или два эластичных IP-адреса, которые я использую, я смогу быстро назначить любую новую машину, а с учетом природы эластичных IP-адресов - пусть они существуют вечно.
Есть ли продвинутая концепция или процесс, которые я могу использовать, чтобы посмотреть на сам запрос TCP и как-то связать их вместе? Или, может быть, что-то в HAProxy мне не хватает?