本文目的: 在基於openstack構建的海航雲上面搭建一個包含基本組件的openstack服務,並讓該openstack裏啓動的實例直接經過彈性公網ip被訪問。html
1、背景知識:前端
一、海航雲:https://www.haihangyun.com 一個基於純openstack構建的公有云,在我來騰訊以前工做的地方。linux
二、安全組: openstack對於每一個虛擬網卡都提供安全組,在不添加規則狀況下,全部流量都是禁止經過。api
三、port address pairs。openstack默認只容許從port上發出 IP 和 MAC 地址與其 IP 和 MAC 地址都相同的網絡包。舉例:系統給個人雲主機的dhcp的ip是 192.168.0.10,默認開啓安全組狀況下狀況若是我將虛擬機的ip由dhcp改成 192.168.0.11,雲主機將沒法對外通訊。此時須要在在neutron的port 設置上添加 address pairs規則,讓系統容許他以 192.168.0.11對外通信。詳見http://superuser.openstack.org/articles/managing-port-level-security-openstack/ 安全
二,環境搭建bash
1 網絡網絡
建立 兩個私有網絡:Provider,Management。其中Provider須要開啓公網網關。關閉兩個網絡的安全組功能。目前海航雲鬚要人工提交工單關閉安全組。在社區版的openstack中。ocata以前的neutron client 並不支持建立建立不開啓安全組功能的網絡,須要直接調用api來進行操做。app
最新的pike的neutron client已經支持。curl
api示例 ide
curl -g -i -X POST http://controller:9696/v2.0/networks -H "X-Auth-Token: bdd45bb441ec1816dcb56a9c90a6a8ae84aac9ec" -d '{"network": {"port_security_enabled": false, "name": "test", "admin_state_up": true}}'
成功建立的截圖
2 啓動兩個實例 controller compute1,並將他們同時加入Provider,Management 兩個私有網絡
三、由於雲主機加入了兩個網絡,而且只有一個網絡添加了公網接口,因此須要設置默認網關,確保
192.168.11.1的優先級高
[root@host-192-168-11-4 cloud-user]#route add default gw 192.168.11.1 [root@host-192-168-11-4 cloud-user]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.11.1 0.0.0.0 UG 100 0 0 eth0 0.0.0.0 192.168.1.1 0.0.0.0 UG 101 0 0 eth1 192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth1 192.168.11.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
四、網路拓撲
三 安裝過程
安裝過程參考官網文檔
https://docs.openstack.org/install-guide/openstack-services.html#minimal-deployment
幾個不一樣地方
一、在nova裝過程當中,指定vnc的url爲 controller節點的彈性公網ip
[root@compute1 cloud-user]# grep novncproxy_base_url /etc/nova/nova.conf|grep -v ^# novncproxy_base_url = http://*.*.*.*:6080/vnc_auto.html
2 在neutro安裝中
指定vxlan網絡的localip 和provider網絡的網卡
[root@controller ~]# cat /etc/neutron/plugins/ml2/linuxbridge_agent.ini |grep local_ip|grep -v ^# local_ip = 192.168.1.9 [root@controller ~]# cat /etc/neutron/plugins/ml2/linuxbridge_agent.ini |grep physical_interface_mappings |grep -v ^# physical_interface_mappings = provider:eth0
四 運行實例並經過彈性公網ip訪問
1 建立provider網絡
[root@controller ~]#openstack network create --share --external --provider-physical-network provider --provider-network-type flat provider [root@controller ~]openstack subnet create --network provider \ --allocation-pool start=192.168.11.100,end=192.168.11.200 \ --dns-nameserver 114.114.114.114 --gateway 192.168.11.1 \ --subnet-range 192.168.11.0/24 provider
2 建立pravite 網絡
[root@controller ~]# openstack subnet create --network pravite --dns-nameserver 114.114.114.114 --gateway 172.16.1.1 --subnet-range 172.16.1.0/24 pravite
3 建立vrouter
[root@controller ~]# openstack router create router
4 關聯vrouter
[root@controller ~]# neutron router-interface-add router pravite Added interface 18b2181a-ce8f-4a05-97a0-90793a980a28 to router router. [root@controller ~]# neutron router-gateway-set router provider Set gateway for router router [root@controller ~]#
5 建立虛擬機
openstack server create --flavor m1.nano --p_w_picpath cirros --nic net-id=e73b625b-edf8-43f0-b314-682f3b59e5a0--security-group default
6 建立並綁定浮動 ip
[root@controller nova]# openstack floating ip create d958d877-d3f8-4c9d-9154-459e2df872b9 [root@controller nova]# neutron floatingip-associate 40663c10-a44d-4538-a1aa-b8daf34fb9f6 38d433b1-dd8f-4504-967c-17ef9da7eb9e
此時 咱們已經能夠在控制節點ping通該虛擬機
[root@controller nova]# ping 192.168.11.111 PING 192.168.11.111 (192.168.11.111) 56(84) bytes of data. 64 bytes from 192.168.11.111: icmp_seq=1 ttl=63 time=6.25 ms 64 bytes from 192.168.11.111: icmp_seq=2 ttl=63 time=1.46 ms [root@controller nova]# openstack server show e9aea2f8-da7b-44e7-bcb0-274154e20cae +-------------------------------------+----------------------------------------------------------+ | Field | Value | +-------------------------------------+----------------------------------------------------------+ | OS-DCF:diskConfig | AUTO | | OS-EXT-AZ:availability_zone | nova | | OS-EXT-SRV-ATTR:host | compute1 | | OS-EXT-SRV-ATTR:hypervisor_hostname | compute1 | | OS-EXT-SRV-ATTR:instance_name | instance-00000001 | | OS-EXT-STS:power_state | Running | | OS-EXT-STS:task_state | None | | OS-EXT-STS:vm_state | active | | OS-SRV-USG:launched_at | 2017-10-03T05:23:36.000000 | | OS-SRV-USG:terminated_at | None | | accessIPv4 | | | accessIPv6 | | | addresses | pravite=172.16.1.5, 192.168.11.111 | | config_drive | | | created | 2017-10-03T05:23:21Z | | flavor | m1.nano (0) | | hostId | 93d1abb30f3702fa13e7d7ec74de6b3a4a56e7e4b763c9182fa8e256 | | id | e9aea2f8-da7b-44e7-bcb0-274154e20cae | | p_w_picpath | cirros (b9768af8-8bb0-4ab8-8159-462d44d00e4f) | | key_name | None | | name | 222 | | progress | 0 | | project_id | f521e63a95c74fbfa67d014b84b5e0c4 | | properties | | | security_groups | name='default' | | status | ACTIVE | | updated | 2017-10-03T05:23:36Z | | user_id | a19a38e5f3f348e78cf7170f712bf3eb | | volumes_attached | | +-------------------------------------+----------------------------------------------------------+
7 給虛擬機中的虛擬機綁定彈性ip
一、在海航雲建立一個虛擬網卡
網卡地址爲
192.168.11.111
2 目前海航雲前端並不支持將公網ip直接綁定給虛擬網卡,採用曲線的辦法
新建一臺測試機,關機,將改虛擬網卡掛載到該測試機,拆除測試機原來的網卡,在給該測試機綁定公網ip,最後將虛擬網卡從測試機中拆除
最後成果爲
3 設置安全組規則並,經過該公網ip訪問雲主機中的雲主機