0

再会,

今天,我正在寻求将所有传入和传出流量从我的 BareMetal 实例的私有 IP 重定向到最初在安装期间提供给 DevStack 的 IP。

OpenStack BareMetal 云设置

我是怎么到这种境地的?我正在使用能够部署 BareMetal 实例的 OpenStack 环境(浮动 IP:XXX.YYY.88.171,私有 IP:10.140.82.189 [在 eth0])。用于旋转此实例的映像是安装了 DevStack /Master 的 Ubuntu 14.04。安装了 DevStack 的此映像的快照最初是在具有本地 IP:10.140.82.125 [On eth0] 的 BareMetal 上创建的。因此,现在每当您使用此镜像启动实例时,Baremetal OpenStack 环境都会分配一个私有 IP(在本例中为 10.140.82.189),该私有 IP 不同于所有 DevStack 端点 (10.140.82.125) 上包含的 IP。

正如你可以想象的那样,这给我们带来了很多问题。

我能想到的解决这个问题的两种最佳方法是:

  1. 将所有 DevStack 端点从 10.140.82.125 更改为 10.140.82.189(遵循此路线时,每次更新需要考虑很多问题)

  2. 将每个端点的所有流量从 10.140.82.189 转发到 10.140.82.125。

我的进步:

首先,我什至无法访问地平线仪表板(即使它在浏览器中输入时显示),本质上将如下所示:

XXX.YYY.88.171 --> 10.140.82.189:8800 --> 10.140.82.125:8800

出于某种原因,这会显示实例的 Horizo​​n 仪表板。当我输入我的用户名和密码时,我将返回

无法建立与 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 并在 10.140.82.125:5000 上为令牌请求 keystone。由于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 帐户并在终端中获取端点。不幸的是,在 Horizo​​n 内部,没有从 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

q-agt:

 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

我可以继续前进。关于前进的建议是什么?

4

1 回答 1

0

除非您创建一个额外的 API“traducer”,将旧 IP 替换为新 IP 并将旧主机名替换为新主机名,否则建议的方法是不可能的。

解决这个问题的方法是用新的IP完全替换之前的IP,用新的主机名替换之前的主机名。除了 mysql 数据库中所有表中包含的信息之外,这必须在 /etc 和 /opt/stack 中完成。

于 2016-02-04T03:22:18.563 回答