在啓動實例前,必須先建立必要的網絡架構,讓實例能鏈接之,這個架構包含外網(external network)和租戶網絡(tenant network)。下圖爲初始網絡架構的示意圖,展現了網絡組件和從實例到外網的網絡數據流線路:
node
external network爲實例提供訪問Internet的入口。網絡
如下操做在controller節點上完成。架構
$ source admin-openrc.sh
ide
$ neutron net-create ext-net --router:external True \
--provider:physical_network external --provider:network_type flatui
Created a new network: | |
---|---|
Field | Value |
admin_state_up | True |
id | e6f3606d-2bf6-4b01-8fb4-c10d299dbe75 |
name | ext-net |
provider:network_type | flat |
provider:physical_network | external |
provider:segmentation_id | |
router:external | True |
shared | False |
status | ACTIVE |
subnets | |
tenant_id | 4f7806287c9a437e9cd912504ff71727 |
+---------------------------+--------------------------------------+</pre>this
跟物理網絡同樣,虛擬網絡也須要指定一個子網(subnet)。外網和network節點上鍊接外部接口的物理網絡共享同一個子網和網關(The external network shares the same subnet and gateway associated with the physical network connected to the external interface on the network node. )。須要給這個子網指定單獨的路由和IP地址,以防和外網上的其餘設備產生衝突。spa
建立子網:
<pre>$ neutron subnet-create ext-net --name ext-subnet \
</pre>
--allocation-pool start=FLOATING_IP_START,end=FLOATING_IP_END \
--disable-dhcp --gateway EXTERNAL_NETWORK_GATEWAY EXTERNAL_NETWORK_CIDR
FLOATING_IP_START和FLOATING_IP_END分別爲預約分配的浮動IP地址範圍內的第一個和最後一個的IP地址。EXTERNAL_NETWORK_CIDR替換爲物理網絡相應的子網(Replace EXTERNAL_NETWORK_CIDR with the subnet associated with the physical network.)。EXTERNAL_NETWORK_GATEWAY替換爲物理網絡相應的網關,通常是以「.1」結尾的IP地址。關閉子網的DHCP選項,由於實例並不直接鏈接外網,浮動IP地址須要手動指定(You should disable DHCP on this subnet because instances do not connect directly to the external network and floating IP addresses require manual assignment.)。3d
在本文的網絡配置條件下,上述命令應以下:
<pre>$ neutron subnet-create ext-net --name ext-subnet \
code
--allocation-pool start=192.168.100.101,end=192.168.100.200 \
--disable-dhcp --gateway 192.168.100.1 192.168.100.0/24
Created a new subnet: | |
---|---|
Field | Value |
allocation_pools | {"start": "192.168.100.101", "end": "192.168.100.200"} |
cidr | 192.168.100.0/24 |
dns_nameservers | |
enable_dhcp | False |
gateway_ip | 192.168.100.1 |
host_routes | |
id | 963754fb-73c4-4a1b-93ee-27d2c2beb97a |
ip_version | 4 |
ipv6_address_mode | |
ipv6_ra_mode | |
name | ext-subnet |
network_id | e6f3606d-2bf6-4b01-8fb4-c10d299dbe75 |
tenant_id | 4f7806287c9a437e9cd912504ff71727 |
+-------------------+--------------------------------------------------------+</pre>router
租戶網絡爲了實例提供了內部網絡之間相互訪問的功能。這個架構把各個租戶的網絡相互隔離了。例如,demo
租戶使用這種網絡後,只有屬於這個租戶的實例能夠訪問這個網絡。
如下操做在controller節點上完成。
$ source demo-openrc.sh
<pre>$ neutron net-create demo-net
Created a new network: | |
---|---|
Field | Value |
admin_state_up | True |
id | 830379a4-cc69-4165-a18f-f9430d999d5f |
name | demo-net |
router:external | False |
shared | False |
status | ACTIVE |
subnets | |
tenant_id | d1f7caccc65840b68258997a759da07f |
+-----------------+--------------------------------------+</pre>
如同外網網絡,租戶網絡也須要專屬的子網。不過能夠指定任意有效的子網,由於這個架構將各個租戶網絡隔離開了。默認這個子網會使用DHCP來分配實例的IP地址。
建立子網:
<pre>$ neutron subnet-create demo-net --name demo-subnet \
</pre>
--gateway TENANT_NETWORK_GATEWAY TENANT_NETWORK_CIDR
將TENANT_NETWORK_CIDR替換爲分配給租戶網絡的子網,TENANT_NETWORK_GATEWAY替換爲分配的子網的網關,通常是以「.1」結尾的IP地址。
本文的網絡配置下,上述命令以下:
<pre>$ neutron subnet-create demo-net --name demo-subnet \
--gateway 192.162.1.1 192.162.1.0/24
Created a new subnet: | |
---|---|
Field | Value |
allocation_pools | {"start": "192.162.1.2", "end": "192.162.1.254"} |
cidr | 192.162.1.0/24 |
dns_nameservers | |
enable_dhcp | True |
gateway_ip | 192.162.1.1 |
host_routes | |
id | a6593d6d-1992-4207-ae61-7784f0aa5a3c |
ip_version | 4 |
ipv6_address_mode | |
ipv6_ra_mode | |
name | demo-subnet |
network_id | 830379a4-cc69-4165-a18f-f9430d999d5f |
tenant_id | d1f7caccc65840b68258997a759da07f |
+-------------------+--------------------------------------------------+</pre>
一個虛擬路由器可讓兩個或多個虛擬網絡之間通訊。每一個路由器須要一個或多個接口(或包括網關)來訪問指定網絡。在本文,建立一個路由器並把租戶網絡和外網鏈接到它上面。
$ neutron router-create demo-router
Created a new router: | |
---|---|
Field | Value |
admin_state_up | True |
external_gateway_info | |
id | 74be9215-abad-4d63-ad75-9d365ae6ad6a |
name | demo-router |
routes | |
status | ACTIVE |
tenant_id | d1f7caccc65840b68258997a759da07f |
+-----------------------+--------------------------------------+</pre>
$ neutron router-interface-add demo-router demo-subnet
Added interface 0c38b462-9f15-4fc4-abdf-9039048c733d to router demo-router.</pre>
$ neutron router-gateway-set demo-router ext-net
Set gateway for router demo-router</pre>
外網的子網是192.168.100.0/24,因爲租戶路由網關理論上在其浮動IP地址範圍中是佔據了最小的(lowest)IP地址,即192.168.100.101。要驗證外部物理網絡和虛擬網絡設置的正確與否,從任意的外部網絡的主機上能夠ping通192.168.100.101便可驗證。
在建立虛擬機的主機上ping上述IP:
<pre>Microsoft Windows [版本 6.1.7601]
版權全部 (c) 2009 Microsoft Corporation。保留全部權利。
C:UsersTiger>ping 192.168.100.101
正在 Ping 192.168.100.101 具備 32 字節的數據:
來自 192.168.100.101 的回覆: 字節=32 時間=2ms TTL=64
來自 192.168.100.101 的回覆: 字節=32 時間<1ms TTL=64
來自 192.168.100.101 的回覆: 字節=32 時間<1ms TTL=64
來自 192.168.100.101 的回覆: 字節=32 時間<1ms TTL=64
192.168.100.101 的 Ping 統計信息:
數據包: 已發送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒爲單位):
最短 = 0ms,最長 = 2ms,平均 = 0ms</code></pre>