使用与虚拟机关联的浮动 IP 访问 RabbitMQ

使用与虚拟机关联的浮动 IP 访问 RabbitMQ

我有一个在 OpenStack 上运行的虚拟机 (VM),我使用 Packstack 在该虚拟机上安装了 OpenStack。我将一个浮动 IP 与该 VM 关联。

在 OpenStack 中,我为所有 OpenStack 组件和 RabbitMQ 配置了入口访问规则:

....

Ingress     IPv4    TCP     15672   0.0.0.0/0
Ingress     IPv4    TCP     5672    0.0.0.0/0

我可以从虚拟机访问 RabbitMQ 和管理插件。我甚至在虚拟机中部署了一个虚拟消费者,它运行良好。但是,我无法从浮动 IP 访问它们中的任何一个。我可以成功访问其他 OpenStack 组件,例如 Identity。

我尝试修改iptables,但是也没有用:

iptables -A INPUT -p tcp -m multiport --dports 5671,5672,15672 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports 5671,5672,15672 -m conntrack --ctstate ESTABLISHED -j ACCEPT

感谢您的帮助。


附加信息

  • 在 VM 上安装 OpenStack 后,我必须手动更新公共端点以通过浮动 IP 访问 OpenStack 服务。
  • 我还(手动)更新了 Horizo​​n 配置文件(/etc/httpd/conf.d/15-horizo​​n_vhost.conf)

从现在开始,localhost 为 192.168.113.5,公网IP为“浮动IP”。

Telnet 结果

(从外部)

telnet <floating IP> 5672

Trying <floating IP>...
telnet: connect to address <floating IP>: Connection refused
telnet: Unable to connect to remote host

(来自虚拟机)

telnet localhost 5672
Trying ::1...
Connected to localhost.
Escape character is '^]'.

我尝试过的事情

lsof:

sudo lsof -n -i4TCP:5672 | grep LISTEN
<no-results>

党卫军:

sudo ss --tcp -f inet --listening --numeric --processes | grep 5672
LISTEN  0  128  *:25672  *:*  users:(("beam.smp",pid=1310,fd=44))
LISTEN  0  128  *:15672  *:*  users:(("beam.smp",pid=1310,fd=54))

网络状态:

netstat --all --numeric --tcp --programs | grep 5672
tcp  0  0 0.0.0.0:25672  0.0.0.0:*  LISTEN  1310/beam.smp       
tcp  0  0 0.0.0.0:15672  0.0.0.0:*  LISTEN  1310/beam.smp
tcp  0  0 192.168.113.5:59962  192.168.113.5:5672  ESTABLISHED  3115/python2
...
tcp6  0  0  :::5672  :::*  LISTEN  1310/beam.smp       
tcp6  0  0  192.168.113.5:5672  192.168.113.5:59928  ESTABLISHED  1310/beam.smp
...

RabbitMQ:

rabbitmqctl list_connections
guest   192.168.113.5   59922   running
guest   192.168.113.5   59926   running
...

卷曲:

curl http://<floating IP>:15672/
curl: (7) Failed to connect to <floating IP> port 15672: Network is unreachable

这是我的 RabbitMQ 配置文件:

# /etc/rabbitmq/rabbitmq.config 

% This file managed by Puppet
% Template Path: rabbitmq/templates/rabbitmq.config
[
  {rabbit, [
    {tcp_listen_options, [
         {backlog,       128},
         {nodelay,       true},
         {linger,        {true, 0}},
         {exit_on_close, false}
    ]},
    {loopback_users, []},
    {tcp_listen_options, [binary,{packet, raw},{reuseaddr, true},{backlog, 128},{nodelay, true},{exit_on_close, false},{keepalive, true}]},
    {default_user, <<"guest">>},
    {default_pass, <<"guest">>}
  ]},
  {kernel, [

  ]}
].
% EOF

相关内容