Learning Openstack Part 10 Neutron(2) - linux - bridge - local網絡類型

在前面我們已經了解過Neutron網絡服務的各種相關概念,仿佛如一團亂麻,一時難以理解。但是沒關系,我們由簡至繁來梳理一下,這里我們來了解一下基于linux bridge驅動的local network類型。


what?

local-network.png

local network 的特點是 不會與宿主機的任何物理網卡相連,也不關聯任何的 VLAN ID。
對于每一個local network網絡,都會單獨起一個bridge,只有掛載在同一個bridge上的tap設備才能通訊。


how?(一次不太完美的實驗)

光看上面的圖也許邏輯概念并不太清楚,沒關系,我們來動手實踐一下。

  1. neutron 默認使用ml2做為core_plugins:
[root@openstack-compute ~]# grep ^core_plugin /etc/neutron/neutron.conf 
core_plugin = ml2
  1. 配置ml2使用linuxbridge做為驅動機制(mechanism driver)
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers linuxbridge
  1. 設置ml2加載5種網絡type_drivers,只有加載的網絡驅動類型才能調用
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers local,flat,vlan,gre,vxlan
  1. 配置openstack普通用戶創建的網絡類型為local,只有admin可以自定義指定創建網絡的類型,可以同時配置多種網絡類型,用逗號連接.
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types local
  1. 檢查配置文件/etc/neutron/plugins/ml2/ml2_conf.ini
[root@openstack-compute ~]# grep -C1 "^[a-z]" /etc/neutron/plugins/ml2/ml2_conf.ini | grep -Ev "\-\-|^#|^$"
[ml2]
type_drivers = local,flat,vlan,gre,vxlan
tenant_network_types = local
mechanism_drivers = linuxbridge
extension_drivers = port_security
[ml2_type_flat]
flat_networks = physnet1
[securitygroup]
enable_ipset = True
  1. 重啟neutron linuxbridge服務使之生效(所有網絡節點)
    這里有個小bug,重啟dhcp服務時,已經啟動的dhcp的殘余進程,導致重啟修改失敗,需要手動kill掉殘余進程
# 控制節點
systemctl restart neutron-dhcp-agent.service neutron-linuxbridge-agent.service neutron-metadata-agent.service
# 計算節點
systemctl restart neutron-linuxbridge-agent.service
  1. 現在我們來cli創建local網絡。
[root@openstack-controller tools]# source admin-openrc.sh 
[root@openstack-controller tools]# neutron net-create first-local
Created a new network:
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | True                                 |
| id                        | f31dc550-dfb4-4243-b109-15b6450d8682 |
| mtu                       | 0                                    |
| name                      | first-local                          |
| port_security_enabled     | True                                 |
| provider:network_type     | local                                |
| provider:physical_network |                                      |
| provider:segmentation_id  |                                      |
| router:external           | False                                |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tenant_id                 | 471592a4281e4223b2ad578b5c9b8442     |
+---------------------------+--------------------------------------+
  1. cli創建subnet
[root@openstack-controller tools]# neutron help subnet-create 
usage: neutron subnet-create [-h]
                             [-f {html,json,json,shell,table,value,yaml,yaml}]
                             [-c COLUMN] [--max-width <integer>] [--noindent]
                             [--prefix PREFIX] [--request-format {json,xml}]
                             [--tenant-id TENANT_ID] [--name NAME]
                             [--gateway GATEWAY_IP | --no-gateway]
                             [--allocation-pool start=IP_ADDR,end=IP_ADDR]
                             [--host-route destination=CIDR,nexthop=IP_ADDR]
                             [--dns-nameserver DNS_NAMESERVER]
                             [--disable-dhcp] [--enable-dhcp]
                             [--ip-version {4,6}]
                             [--ipv6-ra-mode {dhcpv6-stateful,dhcpv6-stateless,slaac}]
                             [--ipv6-address-mode {dhcpv6-stateful,dhcpv6-stateless,slaac}]
                             [--subnetpool SUBNETPOOL]
                             [--prefixlen PREFIX_LENGTH]
                             NETWORK [CIDR]

  Create a subnet for a given tenant.
positional arguments:
  NETWORK               Network ID or name this subnet belongs to.
  CIDR                  CIDR of subnet to create.
[root@openstack-controller tools]# neutron subnet-create --name subnet_192_168_1 \
--gateway 192.168.1.1 \
--enable-dhcp --allocation-pool start=192.168.1.100,end=192.168.1.150 \
f31dc550-dfb4-4243-b109-15b6450d8682 192.168.1.0/24
Created a new subnet:
+-------------------+----------------------------------------------------+
| Field             | Value                                              |
+-------------------+----------------------------------------------------+
| allocation_pools  | {"start": "192.168.1.100", "end": "192.168.1.150"} |
| cidr              | 192.168.1.0/24                                     |
| dns_nameservers   |                                                    |
| enable_dhcp       | True                                               |
| gateway_ip        | 192.168.1.1                                        |
| host_routes       |                                                    |
| id                | 24158244-3732-4456-9d8d-338dee2a1c70               |
| ip_version        | 4                                                  |
| ipv6_address_mode |                                                    |
| ipv6_ra_mode      |                                                    |
| name              | subnet_192_168_1                                   |
| network_id        | f31dc550-dfb4-4243-b109-15b6450d8682               |
| subnetpool_id     |                                                    |
| tenant_id         | 471592a4281e4223b2ad578b5c9b8442                   |
+-------------------+----------------------------------------------------+
  1. 我們來檢查一下openstack創建local網絡時做了些什么:
[root@openstack-controller tools]# brctl show  # 檢查網橋
bridge name bridge id       STP enabled interfaces
brqf31dc550-df      8000.72dde96c7459   no      tapcca9852b-1d
[root@openstack-controller tools]# ip netns list # 檢查namespace
qdhcp-f31dc550-dfb4-4243-b109-15b6450d8682 (id: 0)
[root@openstack-controller tools]# ip netns exec qdhcp-f31dc550-dfb4-4243-b109-15b6450d8682 ip a # 檢查namespace中啟動的ip地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ns-cca9852b-1d@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
    link/ether fa:16:3e:ac:30:9f brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.1.100/24 brd 192.168.1.255 scope global ns-cca9852b-1d                        # dhcp網關ip接口
       valid_lft forever preferred_lft forever
    inet 169.254.169.254/16 brd 169.254.255.255 scope global ns-cca9852b-1d                 # metadata服務的ip接口
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:feac:309f/64 scope link 
       valid_lft forever preferred_lft forever
  1. 我們在來使用這個網絡創建兩個實例:
[root@openstack-controller tools]# nova help flavor-create 
usage: nova flavor-create [--ephemeral <ephemeral>] [--swap <swap>]
                          [--rxtx-factor <factor>] [--is-public <is-public>]
                          <name> <id> <ram> <disk> <vcpus>
Create a new flavor
[root@openstack-controller tools]# nova flavor-create cirros auto 200 1 1
+--------------------------------------+--------+-----------+------+-----------+------+-------+-------------+-----------+
| ID                                   | Name   | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+--------------------------------------+--------+-----------+------+-----------+------+-------+-------------+-----------+
| 45243282-df65-4a7f-81e3-094f704a0e4f | cirros | 200       | 1    | 0         |      | 1     | 1.0         | True      |
+--------------------------------------+--------+-----------+------+-----------+------+-------+-------------+-----------+
[root@openstack-controller tools]# nova image-list
+--------------------------------------+--------------+--------+--------+
| ID                                   | Name         | Status | Server |
+--------------------------------------+--------------+--------+--------+
| 4d890feb-3c24-4425-8311-61c41a582a56 | cirros       | ACTIVE |        |
| cafc3188-54a0-4f51-8286-0fb2b44d81f5 | ubuntu-16.04 | ACTIVE |        |
+--------------------------------------+--------------+--------+--------+
[root@openstack-controller tools]# nova net-list
+--------------------------------------+-------------+------+
| ID                                   | Label       | CIDR |
+--------------------------------------+-------------+------+
| f31dc550-dfb4-4243-b109-15b6450d8682 | first-local | None |
+--------------------------------------+-------------+------+
[root@openstack-controller tools]# nova keypair-list
+-------+-------------------------------------------------+
| Name  | Fingerprint                                     |
+-------+-------------------------------------------------+
| mykey | 82:e9:3f:2d:e8:41:7b:7e:32:bd:76:3a:7a:ce:ce:07 |
+-------+-------------------------------------------------+
[root@openstack-controller tools]# nova help boot
usage: nova boot [--flavor <flavor>] [--image <image>]
                 [--image-with <key=value>] [--boot-volume <volume_id>]
                 [--snapshot <snapshot_id>] [--min-count <number>]
                 [--max-count <number>] [--meta <key=value>]
                 [--file <dst-path=src-path>] [--key-name <key-name>]
                 [--user-data <user-data>]
                 [--availability-zone <availability-zone>]
                 [--security-groups <security-groups>]
                 [--block-device-mapping <dev-name=mapping>]
                 [--block-device key1=value1[,key2=value2...]]
                 [--swap <swap_size>]
                 [--ephemeral size=<size>[,format=<format>]]
                 [--hint <key=value>]
                 [--nic <net-id=net-uuid,v4-fixed-ip=ip-addr,v6-fixed-ip=ip-addr,port-id=port-uuid>]
                 [--config-drive <value>] [--poll] [--admin-pass <value>]
                 <name>

Boot a new server.
[root@openstack-controller nova]# nova boot --flavor m1.small --image ubuntu-16.04 --key-name mykey --security-groups default --nic net-id=f31dc550-dfb4-4243-b109-15b6450d8682 ubuntu-1
+--------------------------------------+-----------------------------------------------------+
| Property                             | Value                                               |
+--------------------------------------+-----------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                              |
| OS-EXT-AZ:availability_zone          |                                                     |
| OS-EXT-SRV-ATTR:host                 | -                                                   |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | -                                                   |
| OS-EXT-SRV-ATTR:instance_name        | instance-0000000b                                   |
| OS-EXT-STS:power_state               | 0                                                   |
| OS-EXT-STS:task_state                | scheduling                                          |
| OS-EXT-STS:vm_state                  | building                                            |
| OS-SRV-USG:launched_at               | -                                                   |
| OS-SRV-USG:terminated_at             | -                                                   |
| accessIPv4                           |                                                     |
| accessIPv6                           |                                                     |
| adminPass                            | hWpVXMSx7kRd                                        |
| config_drive                         |                                                     |
| created                              | 2017-07-06T03:55:59Z                                |
| flavor                               | m1.small (2)                                        |
| hostId                               |                                                     |
| id                                   | 07066ac7-304e-4916-a891-47da3d0998a9                |
| image                                | ubuntu-16.04 (cafc3188-54a0-4f51-8286-0fb2b44d81f5) |
| key_name                             | mykey                                               |
| metadata                             | {}                                                  |
| name                                 | ubuntu-1                                            |
| os-extended-volumes:volumes_attached | []                                                  |
| progress                             | 0                                                   |
| security_groups                      | default                                             |
| status                               | BUILD                                               |
| tenant_id                            | 471592a4281e4223b2ad578b5c9b8442                    |
| updated                              | 2017-07-06T03:55:59Z                                |
| user_id                              | 60814f1c1e6a400e83b629465672ddf4                    |
+--------------------------------------+-----------------------------------------------------+
[root@openstack-controller nova]# nova boot --flavor m1.small --image ubuntu-16.04 --key-name mykey --security-groups default --nic net-id=f31dc550-dfb4-4243-b109-15b6450d8682 ubuntu-2
+--------------------------------------+-----------------------------------------------------+
| Property                             | Value                                               |
+--------------------------------------+-----------------------------------------------------+
| OS-DCF:diskConfig                    | MANUAL                                              |
| OS-EXT-AZ:availability_zone          |                                                     |
| OS-EXT-SRV-ATTR:host                 | -                                                   |
| OS-EXT-SRV-ATTR:hypervisor_hostname  | -                                                   |
| OS-EXT-SRV-ATTR:instance_name        | instance-0000000c                                   |
| OS-EXT-STS:power_state               | 0                                                   |
| OS-EXT-STS:task_state                | scheduling                                          |
| OS-EXT-STS:vm_state                  | building                                            |
| OS-SRV-USG:launched_at               | -                                                   |
| OS-SRV-USG:terminated_at             | -                                                   |
| accessIPv4                           |                                                     |
| accessIPv6                           |                                                     |
| adminPass                            | jsLhP4nnsGfu                                        |
| config_drive                         |                                                     |
| created                              | 2017-07-06T03:56:04Z                                |
| flavor                               | m1.small (2)                                        |
| hostId                               |                                                     |
| id                                   | 60308795-613f-4921-918e-4aecb9373c3f                |
| image                                | ubuntu-16.04 (cafc3188-54a0-4f51-8286-0fb2b44d81f5) |
| key_name                             | mykey                                               |
| metadata                             | {}                                                  |
| name                                 | ubuntu-2                                            |
| os-extended-volumes:volumes_attached | []                                                  |
| progress                             | 0                                                   |
| security_groups                      | default                                             |
| status                               | BUILD                                               |
| tenant_id                            | 471592a4281e4223b2ad578b5c9b8442                    |
| updated                              | 2017-07-06T03:56:04Z                                |
| user_id                              | 60814f1c1e6a400e83b629465672ddf4                    |
+--------------------------------------+-----------------------------------------------------+

這樣兩臺虛擬機已經運行起來了,但是我們發現雖然在dashbard可以看到這個instance已經獲取了ip,實際在vm上卻檢查不到ip,what a xxxx?

這是因為我們采取的是控制節點和計算節點(網絡節點)分開部署的模式,local網絡中bridge不會和物理網卡連接起來,這樣的話運行在計算節點上的instance就無法連接到控制節點上namespace里運行的metadata服務和dhcp服務,自然也就無法獲取到初始化設置。雖然這是一個失敗的實驗,但是我們應該對local network有了更深的了解。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,702評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,143評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,553評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,620評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,416評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,940評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,024評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,170評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,709評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,597評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,291評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,029評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,407評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,663評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,403評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,746評論 2 370

推薦閱讀更多精彩內容