Переадресация портов для экземпляров OpenStack
Добрый день,
Сегодня я пытаюсь перенаправить весь входящий и исходящий трафик с частного IP-адреса моего экземпляра BareMetal на IP-адрес, изначально предоставленный DevStack во время установки.
Установка OpenStack BareMetal Cloud
Как я попал в эту ситуацию? Я работаю со средой OpenStack, где я могу развернуть экземпляр BareMetal (плавающий IP:XXX.YYY.88.171, частный IP: 10.140.82.189 [On eth0]). Образ, используемый для вращения этого экземпляра, - Ubuntu 14.04 с установленным DevStack /Master. Снимок для этого образа с установленным на нем DevStack изначально был создан на BareMetal с локальным IP: 10.140.82.125 [На eth0]. Поэтому теперь, когда вы используете этот раскручивающийся экземпляр с этим образом, среда Baremetal OpenStack назначает частный IP-адрес (в данном случае 10.140.82.189), отличный от IP-адреса, содержащегося на всех конечных точках DevStack (10.140.82.125).
Это, как вы можете себе представить, доставляет нам много проблем.
Два лучших подхода к решению этой проблемы, о которых я могу подумать:
Изменение всех конечных точек DevStack с 10.140.82.125 на 10.140.82.189 (есть много проблем, которые необходимо учитывать при каждом обновлении при следовании по этому маршруту)
Пересылка всего трафика с 10.140.82.189 до 10.140.82.125 для каждой конечной точки.
Мой прогресс:
Во-первых, я даже не смог получить доступ к панели мониторинга горизонта (хотя она отображалась при наборе текста в браузере), что по сути будет следовать:
XXX.YYY.88.171 -> 10.140.82.189:8800 -> 10.140.82.125:8800
По какой-то причине здесь отображается панель инструментов экземпляра Horizon. Когда я наберу свое имя пользователя и пароль, я вернусь с
Невозможно установить соединение с конечной точкой keystone.
В терминале, где я ssh до 10.140.82.189, если я запрашиваю:
openstack catalog list
Unable to establish connection to http://10.140.82.125:5000/v2.0/tokens
Таким образом, кажется, что 10.140.82.189 в своем API вызывает IP и запрашивает keystone для токена 10.140.82.125:5000. Из-за несоответствия IP есть проблема, и это не позволяет мне войти в систему.
Я приступил к выполнению небольшой переадресации портов, выполнив следующие действия:
sudo ip addr add 10.140.82.125/22 dev eth0
sudo iptables -t nat -A PREROUTING -d 10.140.82.189 -j DNAT --to-destination 10.140.82.125
sudo iptables -t nat -A POSTROUTING -s 10.140.82.125 -j SNAT --to-source 10.140.82.189
Теперь я могу войти в учетную запись mi и получить конечные точки в терминале. К сожалению, внутри горизонта информация не извлекается из nova ( http://10.140.82.125:8774/) или любых других служб. Попытка раскрутить экземпляр в среде DevStack дает мне следующее:
Error: Failed to get network list Connection to neutron failed: HTTPConnectionPool(host='10.140.82.125', port=9696): Max retries exceeded with url: //v2.0/networks.json?shared=False&tenant_id=bec332d4b9e6415cae0f51bb3e0de720 (Caused by NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0x7fd168377b90>: Failed to establish a new connection: [Errno 111] Connection refused',))
Список конечных точек: показан в комментариях
Я постоянно получаю ошибки повсюду. В качестве примера (используя экран на devstack):
На взгляд-реестр:
2016-01-20 06:09:23.173 DEBUG eventlet.wsgi.server [-] (8212) accepted ('10.140.82.189', 38273) from (pid=8212) server /usr/local/lib/python2.7/dist-packages/eventlet/wsgi.py:826
Нейтрон-SVC (Q-SVC)
2016-01-20 06:17:30.581 WARNING neutron.db.agents_db [req-48ebcdf0-126c-4dfb-b3b2-f4b48ec9704a None None] Agent healthcheck: found 4 dead agents out of 4:
Type Last heartbeat host
DHCP agent 2016-01-13 19:08:16 gonzalo-devstack-ss
L3 agent 2016-01-13 19:08:08 gonzalo-devstack-ss
Metadata agent 2016-01-13 19:07:51 gonzalo-devstack-ss
Open vSwitch agent 2016-01-13 19:08:16 gonzalo-devstack-ss
2016-01-20 06:17:32.319 ERROR oslo.messaging._drivers.impl_rabbit [-] AMQP server 10.140.82.125:5672 closed the connection. Check login credentials: Socket closed
д-АГТ:
2016-01-20 06:19:14.308 ERROR oslo.messaging._drivers.impl_rabbit [-] AMQP server 10.140.82.125:5672 closed the connection. Check login credentials: Socket closed
И я мог продолжать идти. Какова будет рекомендация двигаться дальше?
1 ответ
Предложенный подход невозможен, если вы не создадите дополнительный API "traducer", который заменяет старый IP новым IP, а старое имя хоста новым именем хоста.
Решение этой проблемы состоит в том, чтобы полностью заменить предыдущий IP новым IP, а предыдущее имя хоста новым именем хоста. Это должно быть сделано в /etc и /opt/stack в дополнение к информации, содержащейся во всех таблицах в базах данных mysql.