繁体   English   中英

OpenStack实例的端口转发

[英]Port Forwarding for OpenStack Instances

美好的一天,

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

OpenStack BareMetal云设置

我是怎么遇到这种情况的? 我正在使用OpenStack环境,在其中可以部署BareMetal实例(浮动IP:XXX.YYY.88.171,私有IP:10.140.82.189 [在eth0])。 用于旋转该实例的映像是安装了DevStack / Master的Ubuntu 14.04。 最初安装了DevStack的此映像的快照是在BareMetal上创建的,该BareMetal的本地IP为:10.140.82.125 [在eth0]。 因此,现在,无论何时使用带有该映像的实例,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。

我的进度:

首先,我什至无法访问Horizo​​n仪表板(即使在浏览器中键入时已显示),但实际上该仪表板将遵循:

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

由于某种原因,这会显示实例的“地平线”仪表板。 输入用户名和密码后,我将返回

无法建立与梯形校正端点的连接。

如果我要求,在我将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上为令牌提供基石。 由于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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM