一、虛擬機(jī)獲取 ip:
用 namspace 隔離 DHCP 服務(wù)
Neutron 通過 dnsmasq 提供 DHCP 服務(wù),而 dnsmasq 通過 Linux Network Namespace 獨(dú)立的為每個(gè) network 服務(wù)隔離
在二層網(wǎng)絡(luò)上硫眯,VLAN 可以將一個(gè)物理交換機(jī)分割成幾個(gè)獨(dú)立的虛擬交換機(jī)。類似地方淤,在三層網(wǎng)絡(luò)上媚创,Linux network namespace 可以將一個(gè)物理三層網(wǎng)絡(luò)分割成幾個(gè)獨(dú)立的虛擬三層網(wǎng)絡(luò)竞膳。
每個(gè) namespace 都有自己獨(dú)立的網(wǎng)絡(luò)棧航瞭,包括 route table,firewall rule坦辟,network interface device 等刊侯。
Neutron 通過 namespace 為每個(gè) network 提供獨(dú)立的 DHCP 和路由服務(wù),從而允許租戶創(chuàng)建重疊的網(wǎng)絡(luò)锉走。如果沒有 namespace滨彻,網(wǎng)絡(luò)就不能重疊,這樣就失去了很多靈活性挠日。
每個(gè) dnsmasq 進(jìn)程都位于獨(dú)立的 namespace, 命名為 qdhcp-<network id>疮绷,例如 flat_net:
ip netns list 命令列出所有的 namespace
ip netns exec <network namespace name> <command> 管理 namespace
root namespace:
其實(shí)翰舌,宿主機(jī)本身也有一個(gè) namespace嚣潜,叫 root namespace,擁有所有物理和虛擬 interface device椅贱。物理 interface 只能位于 root namespace懂算。
新創(chuàng)建的 namespace 默認(rèn)只有一個(gè) loopback device。管理員可以將虛擬 interface庇麦,例如 bridge计技,tap 等設(shè)備添加到某個(gè) namespace。
對(duì)于 flat_net 的 DHCP 設(shè)備 tap19a0ed3d-fe山橄,需要將其放到 namespace qdhcp-7bf09be4-8653-4869-84f0-33494f238627 中垮媒,但這樣會(huì)帶來一個(gè)問題:tap19a0ed3d-fe 將無法直接與 root namespace 中的 bridge 設(shè)備 brqf153b42f-c3 連接。
Neutron 使用 veth pair 解決了這個(gè)問題航棱。
veth pair 是一種成對(duì)出現(xiàn)的特殊網(wǎng)絡(luò)設(shè)備睡雇,它們象一根虛擬的網(wǎng)線,可用于連接兩個(gè) namespace饮醇。向 veth pair 一端輸入數(shù)據(jù)它抱,在另一端就能讀到此數(shù)據(jù)。
tap19a0ed3d-fe 與 ns-19a0ed3d-fe 就是一對(duì) veth pair朴艰,它們將 qdhcp-f153b42f-c3a1-4b6c-8865-c09b5b2aa274 連接到 brqf153b42f-c3观蓄。
如下圖所示:
可以通過 ip netns exec qdhcp-7bf09be4-8653-4869-84f0-33494f238627 ip a命令查看ns-ba07bb93配置:
獲取 dhcp IP 過程分析
在創(chuàng)建 instance 時(shí),Neutron 會(huì)為其分配一個(gè) port祠墅,里面包含了 MAC 和 IP 地址信息侮穿。這些信息會(huì)同步更新到 dnsmasq 的 host 文件。如下圖所示:
同時(shí) nova-compute 會(huì)設(shè)置虛機(jī) VIF 的 MAC 地址毁嗦。
一切準(zhǔn)備就緒亲茅,instance 獲取 IP 的過程如下:
1. vm 開機(jī)啟動(dòng),發(fā)出 DHCPDISCOVER 廣播,該廣播消息在整個(gè) net 中都可以被收到芯急。
2. 廣播到達(dá) veth tap19a0ed3d-fe勺届,然后傳送給 veth pair 的另一端 ns-19a0ed3d-fe。dnsmasq 在它上面監(jiān)聽娶耍,dnsmasq 檢查其 host 文件免姿,發(fā)現(xiàn)有對(duì)應(yīng)項(xiàng),于是dnsmasq 以 DHCPOFFER 消息將 IP(192.168.254.18)榕酒、子網(wǎng)掩碼(255.255.255.0)胚膊、地址租用期限等信息發(fā)送給 vm。
3. vm 發(fā)送 DHCPREQUEST 消息確認(rèn)接受此 DHCPOFFER想鹰。
4. dnsmasq 發(fā)送確認(rèn)消息 DHCPACK紊婉,整個(gè)過程結(jié)束。
二辑舷、VXLAN簡(jiǎn)介:
overlay network概念:
overlay network 是指建立在其他網(wǎng)絡(luò)上的網(wǎng)絡(luò)喻犁。overlay network 中的節(jié)點(diǎn)可以看作通過虛擬(或邏輯)鏈路連接起來的。overlay network 在底層可能由若干物理鏈路組成何缓,但對(duì)于節(jié)點(diǎn)肢础,不需要關(guān)心這些底層實(shí)現(xiàn)。
例如 P2P 網(wǎng)絡(luò)就是 overlay network碌廓,隧道也是传轰。vxlan 和 gre 都是基于隧道技術(shù)實(shí)現(xiàn)的,它們也都是 overlay network谷婆。
目前 linux bridge 只支持 vxlan慨蛙,不支持 gre;
open vswitch 兩者都支持纪挎。vxlan 與 gre 實(shí)現(xiàn)非常類似期贫,而且 vxlan 用得較多,所以本教程只介紹 vxlan廷区。
VXLAN簡(jiǎn)介:
VXLAN 為 Virtual eXtensible Local Area Network唯灵。正如名字所描述的,VXLAN 提供與 VLAN 相同的以太網(wǎng)二層服務(wù)隙轻,但擁有更強(qiáng)的擴(kuò)展性和靈活性埠帕。與 VLAN 相比,
VXLAN 有下面幾個(gè)優(yōu)勢(shì):
1. 支持更多的二層網(wǎng)段玖绿。
VLAN 使用 12-bit 標(biāo)記 VLAN ID敛瓷,最多支持 4094 個(gè) VLAN,這對(duì)大型云部署會(huì)成為瓶頸斑匪。VXLAN 的 ID (VNI 或者 VNID)則用 24-bit 標(biāo)記呐籽,支持 16777216 個(gè)二層網(wǎng)段。
2. 能更好地利用已有的網(wǎng)絡(luò)路徑。
VLAN 使用 Spanning Tree Protocol 避免環(huán)路狡蝶,這會(huì)導(dǎo)致有一半的網(wǎng)絡(luò)路徑被 block 掉庶橱。VXLAN 的數(shù)據(jù)包是封裝到 UDP 通過三層傳輸和轉(zhuǎn)發(fā)的,可以使用所有的路徑贪惹。
3. 避免物理交換機(jī) MAC 表耗盡苏章。
由于采用隧道機(jī)制,TOR (Top on Rack) 交換機(jī)無需在 MAC 表中記錄虛擬機(jī)的信息奏瞬。
VXLAN 封裝和包格式:
VXLAN 是將二層建立在三層上的網(wǎng)絡(luò)枫绅。通過將二層數(shù)據(jù)封裝到 UDP 的方式來擴(kuò)展數(shù)據(jù)中心的二層網(wǎng)段數(shù)量。
VXLAN 是一種在現(xiàn)有物理網(wǎng)絡(luò)設(shè)施中支持大規(guī)模多租戶網(wǎng)絡(luò)環(huán)境的解決方案硼端。VXLAN 的傳輸協(xié)議是 IP + UDP并淋。
VXLAN 定義了一個(gè) MAC-in-UDP 的封裝格式。在原始的 Layer 2 網(wǎng)絡(luò)包前加上 VXLAN header珍昨,然后放到 UDP 和 IP 包中县耽。通過 MAC-in-UDP 封裝,VXLAN 能夠在 Layer 3 網(wǎng)絡(luò)上建立起了一條 Layer 2 的隧道曼尊。
VXLAN 包的格式如下:
如上圖所示酬诀,VXLAN 引入了 8-byte VXLAN header脏嚷,其中 VNI 占 24-bit骆撇。VXLAN 和原始的 L2 frame 被封裝到 UDP 包中。這 24-bit 的 VNI 用于標(biāo)示不同的二層網(wǎng)段父叙,能夠支持 16777216 個(gè) LAN神郊。
VXLAN Tunnel Endpoint
VXLAN 使用 VXLAN tunnel endpoint (VTEP) 設(shè)備處理 VXLAN 的封裝和解封。每個(gè) VTEP 有一個(gè) IP interface趾唱,配置了一個(gè) IP 地址涌乳。VTEP 使用該 IP 封裝 Layer 2 frame,并通過該 IP interface 傳輸和接收封裝后的 VXLAN 數(shù)據(jù)包甜癞。
下面是 VTEP 的示意圖:
VXLAN 獨(dú)立于底層的網(wǎng)絡(luò)拓?fù)湎ο环催^來,兩個(gè) VTEP 之間的底層 IP 網(wǎng)絡(luò)也獨(dú)立于 VXLAN悠咱。VXLAN 數(shù)據(jù)包是根據(jù)外層的 IP header 路由的蒸辆,該 header 將兩端的 VTEP IP 作為源和目標(biāo) IP。
VXLAN 封裝和轉(zhuǎn)發(fā)包的過程析既,以及 Linux 對(duì) VXLAN 的原生支持
VXLAN 包轉(zhuǎn)發(fā)流程
VXLAN 在 VTEP 間建立隧道躬贡,通過 Layer 3 網(wǎng)絡(luò)傳輸封裝后的 Layer 2 數(shù)據(jù)。下面例子演示了數(shù)據(jù)如何在 VXLAN 上傳輸:
圖中 Host-A 和 Host-B 位于 VNI 10 的 VXLAN眼坏,通過 VTEP-1 和 VTEP-2 之間建立的 VXLAN 隧道通信拂玻。數(shù)據(jù)傳輸過程如下:
1. Host-A 向 Host-B 發(fā)送數(shù)據(jù)時(shí),Host-B 的 MAC 和 IP 作為數(shù)據(jù)包的目標(biāo) MAC 和 IP,Host-A 的 MAC 作為數(shù)據(jù)包的源 MAC 和 IP檐蚜,然后通過 VTEP-1 將數(shù)據(jù)發(fā)送出去魄懂。
2. VTEP-1 從自己維護(hù)的映射表中找到 MAC-B 對(duì)應(yīng)的 VTEP-2,然后執(zhí)行 VXLAN 封裝闯第,加上 VXLAN 頭逢渔,UDP 頭,以及外層 IP 和 MAC 頭乡括。此時(shí)的外層 IP 頭肃廓,目標(biāo)地址為 VTEP-2 的 IP,源地址為 VTEP-1 的 IP诲泌。同時(shí)由于下一跳是 Router-1盲赊,所以外層 MAC 頭中目標(biāo)地址為 Router-1 的 MAC。
3. 數(shù)據(jù)包從 VTEP-1 發(fā)送出后敷扫,外部網(wǎng)絡(luò)的路由器會(huì)依據(jù)外層 IP 頭進(jìn)行路由哀蘑,最后到達(dá)與 VTEP-2 連接的路由器 Router-2。
4. Router-2 將數(shù)據(jù)包發(fā)送給 VTEP-2葵第。VTEP-2 負(fù)責(zé)解封數(shù)據(jù)包绘迁,依次去掉外層 MAC 頭,外層 IP 頭卒密,UDP 頭 和 VXLAN 頭缀台。VTEP-2 依據(jù)目標(biāo) MAC 地址將數(shù)據(jù)包發(fā)送給 Host-B。
上面的流程我們看到 VTEP 是 VXLAN 的最核心組件哮奇,負(fù)責(zé)數(shù)據(jù)的封裝和解封膛腐。隧道也是建立在 VTEP 之間的,VTEP 負(fù)責(zé)數(shù)據(jù)的傳送鼎俘。
VTEP 是如何提前獲知 IP -- MAC -- VTEP 相關(guān)信息的呢哲身?
答案是:
1. Neutron 知道每一個(gè) port 的狀態(tài)和信息; port 保存了 IP贸伐,MAC 相關(guān)數(shù)據(jù)勘天。
2. instance 啟動(dòng)時(shí),其 port 狀態(tài)變化過程為:down -> build -> active捉邢。
3. 每當(dāng) port 狀態(tài)發(fā)生變化時(shí)脯丝,Neutron 都會(huì)通過 RPC 消息通知各節(jié)點(diǎn)上的 Neutron agent,使得 VTEP 能夠更新 VM 和 port 的相關(guān)信息歌逢。
VTEP 可以根據(jù)這些信息判斷出其他 Host 上都有哪些 VM巾钉,以及它們的 MAC 地址,這樣就能直接與之通信秘案,從而避免了不必要的隧道連接和廣播砰苍。
Linux 對(duì) VXLAN 的支持
VTEP 可以由專有硬件來實(shí)現(xiàn)潦匈,也可以使用純軟件實(shí)現(xiàn)。目前比較成熟的 VTEP 軟件實(shí)現(xiàn)包括:
1. 帶 VXLAN 內(nèi)核模塊的 Linux
2. Open vSwitch
我們先來看 Linux 如何支持 VXLAN
實(shí)現(xiàn)方式:
1. Linux vxlan 創(chuàng)建一個(gè) UDP Socket赚导,默認(rèn)在 8472 端口監(jiān)聽茬缩。
2. Linux vxlan 在 UDP socket 上接收到 vxlan 包后,解包吼旧,然后根據(jù)其中的 vxlan ID 將它轉(zhuǎn)給某個(gè) vxlan interface凰锡,然后再通過它所連接的 linux bridge 轉(zhuǎn)給虛機(jī)。
3. Linux vxlan 在收到虛機(jī)發(fā)來的數(shù)據(jù)包后圈暗,將其封裝為多播 UDP 包掂为,從網(wǎng)卡發(fā)出。
網(wǎng)卡分配示例:
控制節(jié)點(diǎn)三個(gè)網(wǎng)卡(eth0, eth1, eth2)员串,計(jì)算節(jié)點(diǎn)兩網(wǎng)卡(eth0, eth1)勇哗。
合并 Management 和 API 網(wǎng)絡(luò),使用 eth0寸齐,IP 段為 192.168.104.0/24欲诺。
VM 網(wǎng)絡(luò)使用 eht1。
控制節(jié)點(diǎn)的 eth2 與 External 網(wǎng)絡(luò)連接渺鹦,IP 段為 10.10.10.0/24箫爷。
**ML2 mechanism driver: Linux Bridge 和 Open vSwitch **
Linux Bridge :
Open vSwitch:
Open vSwitch 中的網(wǎng)絡(luò)設(shè)備:
br-ex:連接外部(external)網(wǎng)絡(luò)的網(wǎng)橋痊夭。
br-int:集成(integration)網(wǎng)橋颜启,所有 instance 的虛擬網(wǎng)卡和其他虛擬網(wǎng)絡(luò)設(shè)備都將連接到該網(wǎng)橋过咬。
br-tun:隧道(tunnel)網(wǎng)橋,基于隧道技術(shù)的 VxLAN 和 GRE 網(wǎng)絡(luò)將使用該網(wǎng)橋進(jìn)行通信卧斟。
tap interface:命名為 tapXXXX殴边。
linux bridge:命名為 qbrXXXX。
veth pair:命名為 qvbXXXX, qvoXXXX
OVS integration bridge:命名為 br-int珍语。
OVS patch ports:命名為 int-br-ethX 和 phy-br-ethX(X 為 interface 的序號(hào))。
OVS provider bridge:命名為 br-ethX(X 為 interface 的序號(hào))竖幔。
物理 interface:命名為 ethX(X 為 interface 的序號(hào))板乙。
OVS tunnel bridge:命名為 br-tun。
三拳氢、三層網(wǎng)絡(luò)介紹:
虛擬機(jī)訪問外網(wǎng):
(1)虛擬機(jī)中訪問一個(gè)外網(wǎng)地址192.168.253.3募逞,并用 traceroute 命令跟蹤路由查看:
(2)根據(jù)網(wǎng)絡(luò)拓?fù)洌捎谔摍C(jī)訪問外網(wǎng)要經(jīng)過本網(wǎng)段的網(wǎng)關(guān)192.168.101.1馋评,然后經(jīng)過路由的外網(wǎng)接口轉(zhuǎn)發(fā)出去放接,到達(dá)192.168.253.3
查看路由命名空間:
ip netns list
(3)查看路由命名空間的網(wǎng)絡(luò)配置,查到路由連接外網(wǎng)的端口和ip:
ip netns exec qrouter-176bd7e0-6427-46a5-906a-be6a373a29a1 ip a
路由上的外網(wǎng)端口正好接到外網(wǎng)網(wǎng)橋br-ex上:ovs-vsctl show 查看
(4)查看路由iptables NAT 轉(zhuǎn)發(fā)規(guī)則留特,記錄對(duì)私網(wǎng)做的SNAT
ip netns exec qrouter-176bd7e0-6427-46a5-906a-be6a373a29a1 iptables -t nat -L
ip netns exec qrouter-176bd7e0-6427-46a5-906a-be6a373a29a1 iptables -t nat -S
規(guī)則解釋: -A neutron-l3-agent-snat -o qg-8df29d32-d6 -j SNAT --to-source 192.168.253.65 記錄了流入接口qg-8df29d32-d6 的數(shù)據(jù)包做SNAT(基于源地址轉(zhuǎn)發(fā))纠脾,將源地址修改為192.168.253.65
(5)驗(yàn)證:
在虛機(jī) ping 192.168.253.3 時(shí)玛瘸, 可以通過 tcpdump 分別觀察 router 兩個(gè) interface 的 icmp 數(shù)據(jù)包來驗(yàn)證 SNAT 的行為:
在路由qrouter-176bd7e0-6427-46a5-906a-be6a373a29a1,可查到私有網(wǎng)絡(luò)的網(wǎng)關(guān)接口qr-7b56f58b-b5苟蹈,并在路由中抓取網(wǎng)關(guān)接口的icmp包:
ip netns exec qrouter-176bd7e0-6427-46a5-906a-be6a373a29a1 tcpdump -i qr-7b56f58b-b5 -n icmp
在路由中糊渊,抓取路由的外網(wǎng)接口qg-8df29d32-d6的icmp包:
ip netns exec qrouter-176bd7e0-6427-46a5-906a-be6a373a29a1 tcpdump -i qg-8df29d32-d6 -n icmp
外網(wǎng)訪問虛機(jī)——floating ip原理:
SNAT 讓 instance 能夠直接訪問外網(wǎng),但外網(wǎng)還不能直接訪問 instance慧脱。因?yàn)?instance 沒有外網(wǎng) IP渺绒。這里 “直接訪問 instance” 是指通信連接由外網(wǎng)發(fā)起,例如從外網(wǎng) SSH 實(shí)例菱鸥。
(1)首先將實(shí)例綁定浮動(dòng) ip192.168.253.66宗兼, floating IP 是配置在 router 的外網(wǎng) interface 上的,再查看 router 的 interface 配置:
(2)在實(shí)例中ping 192.168.253.3 外網(wǎng)地址氮采,在路由的qr-7b56f58b-b5 接口上针炉,實(shí)例訪問外網(wǎng)ip,外網(wǎng)ip將數(shù)據(jù)包轉(zhuǎn)發(fā)回實(shí)例ip扳抽;但在路由的qg-8df29d32-d6 接口上篡帕,始終是通過 floating IP 192.168.253.66 與外網(wǎng)通信。
(3) 原因是在路由中iptables做了DNA T(基于目的地址轉(zhuǎn)發(fā))贸呢,查看 router 的 NAT 規(guī)則:
當(dāng) router 接收到從外網(wǎng)發(fā)來的包镰烧,如果目的地址是 floating IP 192.168.254.66,將目的地址修改為實(shí)例的 IP 192.168.101.3楞陷。這樣外網(wǎng)的包就能送達(dá)到實(shí)例怔鳖;
當(dāng)實(shí)例發(fā)送數(shù)據(jù)到外網(wǎng),源地址 192.168.101.3 將被修改為 floating IP 192.168.253.66固蛾;
neutron配置過程
詳細(xì)配置過程見:https://docs.openstack.org/ocata/install-guide-rdo/neutron-controller-install.html
一结执、控制端的配置:創(chuàng)建用戶和授權(quán)
1、創(chuàng)建數(shù)據(jù)庫(kù)用戶
MariaDB [(none)] CREATE DATABASE neutron;
2艾凯、給用戶授權(quán)
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
IDENTIFIED BY 'NEUTRON_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
IDENTIFIED BY 'NEUTRON_DBPASS';
3献幔、創(chuàng)建OpenStack用戶
$ openstack user create --domain default --password-prompt neutron
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | fdb0f541e28141719b6a43c8944bf1fb |
| name | neutron |
| options | {} |
| password_expires_at | None |
+---------------------+----------------------------------+
4、把用戶加入到服務(wù)項(xiàng)目的角色里
$ openstack role add --project service --user neutron admin
5趾诗、創(chuàng)建服務(wù)
$ openstack service create --name neutron \
--description "OpenStack Networking" network
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Networking |
| enabled | True |
| id | f71529314dab4a4d8eca427e701d209e |
| name | neutron |
| type | network |
+-------------+----------------------------------+
6蜡感、創(chuàng)建服務(wù)端口地址
$ openstack endpoint create --region RegionOne \
network public http://controller:9696
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 85d80a6d02fc4b7683f611d7fc1493a3 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | f71529314dab4a4d8eca427e701d209e |
| service_name | neutron |
| service_type | network |
| url | http://controller:9696 |
+--------------+----------------------------------+
$ openstack endpoint create --region RegionOne \
network internal http://controller:9696
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 09753b537ac74422a68d2d791cf3714f |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | f71529314dab4a4d8eca427e701d209e |
| service_name | neutron |
| service_type | network |
| url | http://controller:9696 |
+--------------+----------------------------------+
$ openstack endpoint create --region RegionOne \
network admin http://controller:9696
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 1ee14289c9374dffb5db92a5c112fc4e |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | f71529314dab4a4d8eca427e701d209e |
| service_name | neutron |
| service_type | network |
| url | http://controller:9696 |
+--------------+----------------------------------+
7、控制端數(shù)據(jù)包安裝
yum install openstack-neutron openstack-neutron-ml2 openvswitch openstack-neutron-openvswitch ebtables -y
8恃泪、編輯主配置文件 vim /etc/neutron/neutron.conf
[DEFAULT]
state_path = /var/lib/neutron #狀態(tài)路徑
auth_strategy = keystone #認(rèn)證方式
core_plugin = ml2 #核心策略
service_plugins = router #服務(wù)策略路由模式
dhcp_agent_notification = true #dhcp服務(wù)代理通知開啟
allow_overlapping_ips = True
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
transport_url = [rabbit://openstack:admin@controller](rabbit://openstack:admin@controller/) #rabbit用戶的主控制地址
[agent]
[cors]
[cors.subdomain]
[database]
數(shù)據(jù)庫(kù)的連接用戶地址
connection = mysql+[pymysql://neutron:NEUTRON_DBPASS@controller/neutron](pymysql://neutron:NEUTRON_DBPASS@controller/neutron)
[keystone_authtoken]
auth_uri = [http://controller:5000](http://controller:5000/) #認(rèn)證地址
auth_url = [http://controller:35357](http://controller:35357/) #認(rèn)證地址
memcached_servers = controller:11211 #緩存主機(jī)節(jié)點(diǎn)
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron
[matchmaker_redis]
[nova]
region_name = RegionOne
auth_url = [http://controller:35357](http://controller:35357/)
auth_type = password
project_domain_name = default
project_name = service
user_domain_name = default
username = nova
password = nova
[oslo_concurrency]
鎖定路徑
lock_path = $state_path/lock
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_messaging_zmq]
[oslo_middleware]
[oslo_policy]
[qos]
[quotas]
[ssl]
9郑兴、ml2配置文件vim /etc/neutron/plugins/ml2/ml2_conf.ini
[DEFAULT]
[ml2]
type_drivers = flat,vxlan
tenant_network_types = vxlan #租借網(wǎng)絡(luò)類型
mechanism_drivers = openvswitch,l2population #驅(qū)動(dòng)原理
extension_drivers = port_security
[ml2_type_flat]
[ml2_type_geneve]
[ml2_type_gre]
[ml2_type_vlan]
[ml2_type_vxlan]
vni_ranges = 1:1000
[securitygroup]
enable_ipset = true
10、vim openvswitch_agent.ini
[DEFAULT]
[agent]
tunnel_types = vxlan #隧道模式
l2_population = True
[ovs]
tunnel_bridge = br-tun
local_ip = 192.168.254.63
bridge_mappings =
[securitygroup]
firewall_driver = iptables_hybrid
enable_security_group = true
[xenapi]
11贝乎、vim l3_agent.ini
[DEFAULT]
interface_driver = openvswitch
external_network_bridge = br-ex #對(duì)外的網(wǎng)橋
[agent]
[ovs]
12情连、metadata_agent.ini
[DEFAULT]
nova_metadata_ip = controller
metadata_proxy_shared_secret = METADATA_SECRET #元數(shù)據(jù)代理分享
[agent]
[cache]
13、dhcp_agent.ini
[DEFAULT]
interface_driver = openvswitch
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true
[agent]
[ovs]
14览效、Nova主配置文件修改
[neutron]
# ...
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron
15却舀、重啟相關(guān)服務(wù)虫几,添加網(wǎng)橋
systemctl enable neutron-server.service neutron-dhcp-agent.service openvswitch neutron-openvswitch-agent neutron-metadata-agent.service
systemctl start neutron-server.service neutron-dhcp-agent.service openvswitch neutron-openvswitch-agent neutron-metadata-agent.service
ovs-vsctl add-br br-ex
ovs-vsctl add-port br-ex eth2
systemctl enable neutron-l3-agent.service
systemctl start neutron-l3-agent.service
二、compute端網(wǎng)絡(luò)配置
1禁筏、數(shù)據(jù)包下載
yum install openvswitch openstack-neutron-openvswitch ebtables ipset -y
2持钉、主配置文件編輯vim /etc/neutron/neutron.conf
[DEFAULT]
#state_path = /var/lib/neutron
auth_strategy = keystone
#core_plugin = ml2
#service_plugins = router
#dhcp_agent_notification = true
#allow_overlapping_ips = True
#notify_nova_on_port_status_changes = true
#notify_nova_on_port_data_changes = true
transport_url = [rabbit://openstack:admin@controller](rabbit://openstack:admin@controller/)
[agent]
[cors]
[cors.subdomain]
[database]
#connection = mysql+[pymysql://neutron:NEUTRON_DBPASS@controller/neutron](pymysql://neutron:NEUTRON_DBPASS@controller/neutron)
[keystone_authtoken]
auth_uri = [http://controller:5000](http://controller:5000/)
auth_url = [http://controller:35357](http://controller:35357/)
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron
[matchmaker_redis]
[nova]
#region_name = RegionOne
#auth_url = [http://controller:35357](http://controller:35357/)
#auth_type = password
#project_domain_name = default
#project_name = service
#user_domain_name = default
#username = nova
#password = nova
[oslo_concurrency]
lock_path = $state_path/lock
[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_messaging_zmq]
[oslo_middleware]
[oslo_policy]
[qos]
[quotas]
[ssl]
3、openstack_agent.ini
[DEFAULT]
[agent]
tunnel_types = vxlan
l2_population = True
[ovs]
tunnel_bridge = br-tun
local_ip = 192.168.254.63 #ip地址改為第二塊網(wǎng)卡篱昔,用于虛擬機(jī)通訊地址
bridge_mappings =
[securitygroup]
firewall_driver = iptables_hybrid
enable_security_group = true
[xenapi]
4每强、主配置文件Nova vim /etc/nova/nova.conf
[neutron]
# ...
url = http://controller:9696
auth_url = http://controller:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = neutron
5、重啟相關(guān)服務(wù)
systemctl restart openstack-nova-compute.service
systemctl enable openvswitch neutron-openvswitch-agent
systemctl start openvswitch neutron-openvswitch-agent
systemctl stop openvswitch neutron-openvswitch-agent
6州刽、驗(yàn)證服務(wù)啟動(dòng)是否成功
+-------------------+-------------------+-------+-------------------+-------+-------+-------------------+
| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |
+-------------------+-------------------+-------+-------------------+-------+-------+-------------------+
| 16666dcc-08fd-48d | Open vSwitch | node2 | None | True | UP | neutron- |
| a-b573-8d96acf761 | agent | | | | | openvswitch-agent |
| 74 | | | | | | |
| 3ae6228f-3045-4f1 | Metadata agent | node1 | None | True | UP | neutron-metadata- |
| 6-91ff- | | | | | | agent |
| 43459ad0d19c | | | | | | |
| 426dc17a-6791-4c2 | Open vSwitch | node3 | None | True | UP | neutron- |
| 6-b8a9-75e57fb8a5 | agent | | | | | openvswitch-agent |
| 59 | | | | | | |
| be5a3b41-5705-4a1 | Open vSwitch | node1 | None | True | UP | neutron- |
| 6-b808-ddb31693e0 | agent | | | | | openvswitch-agent |
| 3a | | | | | | |
| c3ce8503-7181 | DHCP agent | node1 | nova | True | UP | neutron-dhcp- |
| -413b-be8f- | | | | | | agent |
| 1ec49271e498 | | | | | | |
| dab9b985-4e1d-4f3 | L3 agent | node1 | nova | True | UP | neutron-l3-agent |
| 3-9280-900eed5266 | | | | | | |
| 4c | | | | | | |
+-------------------+-------------------+-------+-------------------+-------+-------+-------------------+