curl: (7) 无法连接到主机;在 openstack 上连接被拒绝 swift

curl: (7) couldn't connect to host;Connection refused on openstack swift

我正在尝试通过 link:http://docs.openstack.org/developer/swift/development_saio.html.
在 Ubuntu 12.04 VM 上设置 'Swift All In One' 系统 当我 运行 命令 在虚拟机上 :

curl -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://127.0.0.1:8080/auth/v1.0

它运行良好,但是如果我将地址“127.0.0.1”更改为“192.168.254.129”(VM ip 地址)并且仍然 运行命令 在 VM 上,例如:

curl -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://192.168.254.129:8080/auth/v1.0

它失败并提示 "Connection refused"。
我试过关闭虚拟机上的防火墙,也没用。
在我看来,这两个命令应该成功或失败,因为“127.0.0.1”和“192.168.254.129”指的是同一台虚拟机。

您发布的示例存在一些潜在问题:

  1. 该端口不是默认端口。根据您使用的中间件,更改端口可能会很棘手并导致意外结果。所以这是不鼓励的。

  2. 您应该将 VM 配置为使用具有静态 IP 配置的专用 "internal-only" 接口。与其更改虚拟化主机创建的接口,不如将 VIP 添加到为 host-only 网络创建的接口(例如 eth1:0)。

  3. 如果仍然无法连接,请(双重)确保防火墙未阻止该接口上的连接。 Ubuntu 12.04 使用 iptables 作为默认防火墙。因此,要么确保服务不是 运行,要么刷新输入规则 (sudo iptables -F INPUT)。如果可行,那么不要忘记保存 iptables 配置 ( sudo service iptables save ),这样它就不会在重启时恢复。

  4. 您似乎正在尝试指定一个具有 v1.0 身份验证的租户。这是不支持的。如果需要指定与用户分开的租户,则必须使用v2.0 authentication。另外,我看到您使用的是已弃用的 "Storage" headers。如果要使用v1.0认证,那么强烈建议使用X-Auth-UserX-Auth-Keyheaders代替。

使用 swift command-line client 验证服务器设置是否正确也是一个好主意。一旦你知道了这一点,那么使用 curl 可能有助于 lower-level 了解协议的工作原理。