如何将Devstack浮动ip对外暴露?
How to expose the Devstack floating ip to the external world?
对于这个项目,我的硬件配置是主机 ESXi 6.7(OS 启动 USB 8GB)、i7、8 个 vCPU、16GB RAM、128GB SSD 和 500GB HDD。
我创建了一个虚拟机(7 个 vCPU、15GB RAM、100GB SSD、1 个 NIC)并安装了 Ubuntu 18.04(LVM 文件系统)。
我用“stack.sh”安装了 Devstack。
我的 Devstack “local.conf” 包括关于网络的那些行:
[[local|localrc]]
...
IP_VERSION=4
HOST_IP=192.168.1.104
FLOATING_RANGE="192.168.1.224/27"
Q_FLOATING_ALLOCATION_POOL=start=192.168.1.226,end=192.168.1.254
Devstack 脚本添加了 vibr0 和 br-ex:
ens160: 192.168.1.104,
virbr0: 192.168.122.1
br-ex: 192.168.1.225
stack@devstack:~$ ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 192.168.1.104/24 brd 192.168.1.255 scope global ens160
valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
8: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
inet 192.168.1.225/27 scope global br-ex
valid_lft forever preferred_lft forever
安装完成,使用仪表板 Horizon 和项目演示:
- 在安全组中,我向 ICMP、SSH 以及 HTTP 和 HTTPS 添加了入口规则;
- 在私有网络中,我编辑了私有子网以添加 DNS 名称服务器(8.8.8.8、1.1.1.1 等);
- 我分配了一些浮动IP;
- 我启动了一些 Cirros 实例;
- 我为每个实例关联了一个浮动 IP。
提示 1:创建密钥对并保存私钥是个好主意。
Tip 2: WIth Ubuntu 16, 要为云镜像设置一个user/password,在“Launch instance”中,你可以将这些行放在Configuration:
#!/bin/bash
echo "root:secret" | chpasswd
现在,我可以:
- 从我的 Cirros 虚拟机访问我的本地网络和互联网 (ping google.com);
- 从 Cirros VM,ping 另一个 Cirros VM(ping 10.0.0.x 或 192.168.1.x);
- 从我的 Devstack 虚拟机,通过 ip ping 我的 Cirros 虚拟机 (ping 192.168.1.236)。
我什至可以在 Devstack 主机中创建 iptable NAT 规则来公开 VM 特定端口。例如:
sudo iptables -t nat -A PREROUTING -p tcp --dport 60080 -j DNAT --to 192.168.1.236:80
BUT, and this is my problem:
I can not to directly reach my Cirros VM floating ip from outer devstack host machine.
I don't know how to expose a floating ip to the world!
So, my question is how to expose a Devstack floating ip to the external world?
更多注释:
- 因为我可以 ping 通 Devstack 主机外的 192.168.1.225,我测试在我的路由器中创建一个静态路由,但这并没有解决我的问题(或者我犯了一些错误!)。
- 我将 VMware vSwitch 设置为混杂模式,但没有效果。
好吧,经过 5 天的研究、讲座和来自 Whosebug 审阅者的骚扰,我发现这些行可以解决我的问题:
echo 1 > /proc/sys/net/ipv4/conf/ens160/proxy_arp
iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADE
Openstack VM is not accessible on LAN
Openstack in a box: Setting up Devstack Havana on your local network
祝你好运。
对于这个项目,我的硬件配置是主机 ESXi 6.7(OS 启动 USB 8GB)、i7、8 个 vCPU、16GB RAM、128GB SSD 和 500GB HDD。
我创建了一个虚拟机(7 个 vCPU、15GB RAM、100GB SSD、1 个 NIC)并安装了 Ubuntu 18.04(LVM 文件系统)。
我用“stack.sh”安装了 Devstack。
我的 Devstack “local.conf” 包括关于网络的那些行:
[[local|localrc]]
...
IP_VERSION=4
HOST_IP=192.168.1.104
FLOATING_RANGE="192.168.1.224/27"
Q_FLOATING_ALLOCATION_POOL=start=192.168.1.226,end=192.168.1.254
Devstack 脚本添加了 vibr0 和 br-ex:
ens160: 192.168.1.104,
virbr0: 192.168.122.1
br-ex: 192.168.1.225
stack@devstack:~$ ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 192.168.1.104/24 brd 192.168.1.255 scope global ens160
valid_lft forever preferred_lft forever
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
8: br-ex: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
inet 192.168.1.225/27 scope global br-ex
valid_lft forever preferred_lft forever
安装完成,使用仪表板 Horizon 和项目演示:
- 在安全组中,我向 ICMP、SSH 以及 HTTP 和 HTTPS 添加了入口规则;
- 在私有网络中,我编辑了私有子网以添加 DNS 名称服务器(8.8.8.8、1.1.1.1 等);
- 我分配了一些浮动IP;
- 我启动了一些 Cirros 实例;
- 我为每个实例关联了一个浮动 IP。
提示 1:创建密钥对并保存私钥是个好主意。
Tip 2: WIth Ubuntu 16, 要为云镜像设置一个user/password,在“Launch instance”中,你可以将这些行放在Configuration:
#!/bin/bash
echo "root:secret" | chpasswd
现在,我可以:
- 从我的 Cirros 虚拟机访问我的本地网络和互联网 (ping google.com);
- 从 Cirros VM,ping 另一个 Cirros VM(ping 10.0.0.x 或 192.168.1.x);
- 从我的 Devstack 虚拟机,通过 ip ping 我的 Cirros 虚拟机 (ping 192.168.1.236)。
我什至可以在 Devstack 主机中创建 iptable NAT 规则来公开 VM 特定端口。例如:
sudo iptables -t nat -A PREROUTING -p tcp --dport 60080 -j DNAT --to 192.168.1.236:80
BUT, and this is my problem:
I can not to directly reach my Cirros VM floating ip from outer devstack host machine.
I don't know how to expose a floating ip to the world!So, my question is how to expose a Devstack floating ip to the external world?
更多注释:
- 因为我可以 ping 通 Devstack 主机外的 192.168.1.225,我测试在我的路由器中创建一个静态路由,但这并没有解决我的问题(或者我犯了一些错误!)。
- 我将 VMware vSwitch 设置为混杂模式,但没有效果。
好吧,经过 5 天的研究、讲座和来自 Whosebug 审阅者的骚扰,我发现这些行可以解决我的问题:
echo 1 > /proc/sys/net/ipv4/conf/ens160/proxy_arp
iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADE
Openstack VM is not accessible on LAN
Openstack in a box: Setting up Devstack Havana on your local network
祝你好运。