版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Neutron經(jīng)典的三節(jié)點(diǎn)部署分三個(gè)網(wǎng)絡(luò):ExternalNetwork/APINetwork,這個(gè)網(wǎng)絡(luò)是連接外網(wǎng)的,無論是用戶調(diào)用Openstack的API,還是創(chuàng)建出來的虛擬機(jī)要訪問外網(wǎng),或者外網(wǎng)要ssh到虛擬機(jī),都需要通過這個(gè)網(wǎng)絡(luò)DataNetwork,數(shù)據(jù)網(wǎng)絡(luò),虛擬機(jī)之間的數(shù)據(jù)傳輸通過這個(gè)網(wǎng)絡(luò)來進(jìn)行,比如一個(gè)虛擬機(jī)要連接另一個(gè)虛擬機(jī),虛擬機(jī)要連接虛擬的路由都是通過這個(gè)網(wǎng)絡(luò)來進(jìn)行ManagementNetwork,管理網(wǎng)絡(luò),Openstack各個(gè)模塊之間的交互,連接數(shù)據(jù)庫(kù),連接MessageQueue都是通過這個(gè)網(wǎng)絡(luò)來。架構(gòu)neutron分成多個(gè)模塊分布在三個(gè)節(jié)點(diǎn)上。Controller節(jié)點(diǎn):neutron-server,用于接受API請(qǐng)求創(chuàng)建網(wǎng)絡(luò),子網(wǎng),路由器等,然而創(chuàng)建的這些東西僅僅是一些數(shù)據(jù)結(jié)構(gòu)在數(shù)據(jù)庫(kù)里面Network節(jié)點(diǎn):neutron-l3-agent,用于創(chuàng)建和管理虛擬路由器,當(dāng)neutron-server將路由器的數(shù)據(jù)結(jié)構(gòu)創(chuàng)建好,它是做具體的事情的,真正的調(diào)用命令行將虛擬路由器,路由表,namespace,iptables規(guī)則全部創(chuàng)建好neutron-dhcp-agent,用于創(chuàng)建和管理虛擬DHCPServer,每個(gè)虛擬網(wǎng)絡(luò)都會(huì)有一個(gè)DHCPServer,這個(gè)DHCPServer為這個(gè)虛擬網(wǎng)絡(luò)里面的虛擬機(jī)提供IPneutron-openvswith-plugin-agent,這個(gè)是用于創(chuàng)建虛擬的L2的switch的,在Network節(jié)點(diǎn)上,Router和DHCPServer都會(huì)連接到二層的switch上Compute節(jié)點(diǎn):neutron-openvswith-plugin-agent,這個(gè)是用于創(chuàng)建虛擬的L2的switch的,在Compute節(jié)點(diǎn)上,虛擬機(jī)的網(wǎng)卡也是連接到二層的switch上架構(gòu)創(chuàng)建網(wǎng)絡(luò)#!/bin/bash
TENANT_NAME="openstack"
TENANT_NETWORK_NAME="openstack-net"
TENANT_SUBNET_NAME="${TENANT_NETWORK_NAME}-subnet"
TENANT_ROUTER_NAME="openstack-router"
FIXED_RANGE="/24"
NETWORK_GATEWAY=""PUBLIC_GATEWAY=""
PUBLIC_RANGE="/24"
PUBLIC_START="00"
PUBLIC_END="00"TENANT_ID=$(keystonetenant-list|grep"$TENANT_NAME"|awk'{print$2}')
(1)TENANT_NET_ID=$(neutronnet-create--tenant_id$TENANT_ID$TENANT_NETWORK_NAME--provider:network_typegre--provider:segmentation_id1|grep"id"|awk'{print$4}')
(2)TENANT_SUBNET_ID=$(neutronsubnet-create--tenant_id$TENANT_ID--ip_version4--name$TENANT_SUBNET_NAME$TENANT_NET_ID$FIXED_RANGE--gateway$NETWORK_GATEWAY--dns_nameserverslist=true|grep"id"|awk'{print$4}')
(3)ROUTER_ID=$(neutronrouter-create--tenant_id$TENANT_ID$TENANT_ROUTER_NAME|grep"id"|awk'{print$4}')(4)neutronrouter-interface-add$ROUTER_ID$TENANT_SUBNET_ID(5)neutronnet-createpublic--router:external=True(6)neutronsubnet-create--ip_version4--gateway$PUBLIC_GATEWAYpublic$PUBLIC_RANGE--allocation-poolstart=$PUBLIC_START,end=$PUBLIC_END--disable-dhcp--namepublic-subnet(7)neutronrouter-gateway-set${TENANT_ROUTER_NAME}public先從邏輯上理解虛擬網(wǎng)絡(luò)創(chuàng)建網(wǎng)絡(luò)為這個(gè)Tenant創(chuàng)建一個(gè)privatenetwork,不同的privatenetwork是需要通過VLANtagging進(jìn)行隔離的,互相之間broadcast不能到達(dá),這里我們用的是GRE模式,也需要一個(gè)類似VLANID的東西,稱為SegmentID創(chuàng)建一個(gè)privatenetwork的subnet,subnet才是真正配置IP網(wǎng)段的地方,對(duì)于私網(wǎng),我們常常用/24這個(gè)網(wǎng)段為這個(gè)Tenant創(chuàng)建一個(gè)Router,才能夠訪問外網(wǎng)將privatenetwork連接到Router上創(chuàng)建一個(gè)ExternalNetwork創(chuàng)建一個(gè)ExernalNetwork的Subnet,這個(gè)外網(wǎng)邏輯上代表了我們數(shù)據(jù)中心的物理網(wǎng)絡(luò),通過這個(gè)物理網(wǎng)絡(luò),我們可以訪問外網(wǎng)。因而PUBLIC_GATEWAY應(yīng)該設(shè)為數(shù)據(jù)中心里面的Gateway,PUBLIC_RANGE也應(yīng)該和數(shù)據(jù)中心的物理網(wǎng)絡(luò)的CIDR一致,否則連不通,而之所以設(shè)置PUBLIC_START和PUBLIC_END,是因?yàn)樵跀?shù)據(jù)中心中,不可能所有的IP地址都給Openstack使用,另外可能搭建了VMwareVcenter,可能有物理機(jī)器,僅僅分配一個(gè)區(qū)間給Openstack來用。將Router連接到ExternalNetwork虛擬網(wǎng)絡(luò)的背后的實(shí)現(xiàn)GRE第一次看到這個(gè)圖太頭暈,不要緊,后面會(huì)慢慢解釋每一部分虛擬網(wǎng)絡(luò)的背后的實(shí)現(xiàn)VLANCompute節(jié)點(diǎn)Network節(jié)點(diǎn)更頭暈則接著忽略ipaddrovs-vsctlshowIpnetnsexecXXX把GRE和VLAN混在一塊,圖畫的不錯(cuò),顯然更暈怎么理解?回到大學(xué)寢室,或者你的家里是不是只有寢室長(zhǎng)的電腦插兩塊網(wǎng)卡,要上網(wǎng),寢室長(zhǎng)的電腦必須開著其他寢室同學(xué)只需要一張網(wǎng)卡什么?你們寢室直接買路由器?好吧,暴露年齡了,2000年初的時(shí)候,路由器還是不普遍的那就把Computer1和switch合在一起,想象成你們家的路由器怎么理解?把寢室想象成物理機(jī),電腦就變成了虛擬機(jī)室長(zhǎng)的電腦或是路由器每個(gè)電腦都插的switch忽略qbr,虛擬機(jī)直接連到switch上怎么理解?物理機(jī)分開,統(tǒng)一的br-int斷開,如何連接ExternalNetworkPrivateNetworkSecurityGroupTapInterfaceInterconnectionNetworkBr-int分開了,在虛擬機(jī)眼里,還是同一個(gè)switch,至于物理機(jī)之間br-int怎么連在一起,虛擬機(jī)可不管。Br-int之下,是物理機(jī)之間的互聯(lián),有各種方法,GRE,VLAN,VXLAN更加深入:TapInterfacevirshdumpxmlinstance-0000000c更加深入:TapInterfaceTap/TunDevice將guestsystem的網(wǎng)絡(luò)和hostsystem的網(wǎng)絡(luò)連在一起Tun/tap驅(qū)動(dòng)程序中包含兩個(gè)部分,一部分是字符設(shè)備驅(qū)動(dòng),還有一部分是網(wǎng)卡驅(qū)動(dòng)部分更加深入:SecurityGroupLayeriptables1、首先數(shù)據(jù)包進(jìn)入,先進(jìn)入mangle表的PREROUTING鏈,在這里可以根據(jù)需要改變數(shù)據(jù)包頭內(nèi)容
2、之后進(jìn)入nat表的PREROUTING鏈,在這里可以根據(jù)需要做DNAT,也就是目標(biāo)地址轉(zhuǎn)換
3、進(jìn)入路由判斷,判斷是進(jìn)入本地的還是轉(zhuǎn)發(fā)的
1)如果進(jìn)入本地的話進(jìn)入INPUT鏈,之后按條件過濾限制進(jìn)入
之后進(jìn)入本機(jī),在進(jìn)入OUTPUT鏈,按條件過濾限制出去
離開本地
2)如果是轉(zhuǎn)發(fā)的話進(jìn)入,進(jìn)入FORWARD鏈,根據(jù)條件限制轉(zhuǎn)發(fā)
之后進(jìn)入POSTROUTING鏈,這里可以做SNAT
離開網(wǎng)絡(luò)接口更加深入:SecurityGroupLayer1)filter表主要處理過濾功能的
INPUT鏈:過濾所有目標(biāo)地址是本機(jī)的數(shù)據(jù)包
FORWARD鏈:過濾所有路過本機(jī)的數(shù)據(jù)包
OUTPUT鏈:過濾所有由本機(jī)產(chǎn)生的數(shù)據(jù)包
2)nat表主要處理網(wǎng)絡(luò)地址轉(zhuǎn)換,可以進(jìn)行SNAT(改變數(shù)據(jù)包的源地址),DNAT(改變數(shù)據(jù)包的目標(biāo)地址)
PREROUTING鏈:可以再數(shù)據(jù)包到達(dá)防火墻是改變目標(biāo)地址
OUTPUT鏈:可以改變本地產(chǎn)生的數(shù)據(jù)包的目標(biāo)地址
POSTROUTING鏈:在數(shù)據(jù)包離開防火墻是改變數(shù)據(jù)包的源地址
3)mangle表修改數(shù)據(jù)包:
包含PREROUTING鏈,INPUT鏈,F(xiàn)ORWARD鏈,OUTPUT鏈,POSTROUTING鏈
這里mangle不做過多操作
還有一個(gè)表示raw表的,不常用的優(yōu)先級(jí)raw-->mangle-->nat-->filter
raw最高,filter最低iptables默認(rèn)操作的是filter表更加深入:SecurityGroupLayeriptables-nvL更加深入:br-int&br-tun由Openvswitch實(shí)現(xiàn)Openvswitch是一個(gè)virutalswitch,支持OpenFlow協(xié)議,當(dāng)然也有一些硬件Switch也支持OpenFlow協(xié)議,他們都可以被統(tǒng)一的Controller管理,從而實(shí)現(xiàn)物理機(jī)和虛擬機(jī)的網(wǎng)絡(luò)聯(lián)通。更加深入:br-int&br-tunFlowTable包含許多entry,每個(gè)entry是對(duì)packet進(jìn)行處理的規(guī)則MatchField涵蓋TCP/IP協(xié)議各層:Layer1–TunnelID,InPort,QoSpriority,skbmarkLayer2–MACaddress,VLANID,EthernettypeLayer3–IPv4/IPv6fields,ARPLayer4–TCP/UDP,ICMP,NDAction也主要包含下面的操作:Outputtoport(portrange,flood,mirror)Discard,ResubmittotablexPacketMangling(Push/PopVLANheader,TOS,...)Sendtocontroller,Learn更加深入:br-int&br-tun更加深入:br-int&br-tun更加深入:br-int&br-tun/etc/openvswitch/conf.db更加深入:br-int&br-tunbr-int主要使用openvswitch中port的vlan功能Port的一個(gè)重要的方面就是VLANConfiguration,有兩種模式:trunkport這個(gè)port不配置tag,配置trunks如果trunks為空,則所有的VLAN都trunk,也就意味著對(duì)于所有的VLAN的包,本身帶什么VLANID,就是攜帶者什么VLANID,如果沒有設(shè)置VLAN,就屬于VLAN0,全部允許通過。如果trunks不為空,則僅僅帶著這些VLANID的包通過。accessport這個(gè)port配置tag,從這個(gè)port進(jìn)來的包會(huì)被打上這個(gè)tag如果從其他的trunkport中進(jìn)來的本身就帶有VLANID的包,如果VLANID等于tag,則會(huì)從這個(gè)port發(fā)出從其他的accessport上來的包,如果tag相同,也會(huì)被forward到這個(gè)port從accessport發(fā)出的包不帶VLANID如果一個(gè)本身帶VLANID的包到達(dá)accessport,即便VLANID等于tag,也會(huì)被拋棄。更加深入:br-int&br-tunovs-vsctladd-brubuntu_briplinkaddfirst_brtypevethpeernamefirst_ifiplinkaddsecond_brtypevethpeernamesecond_ifiplinkaddthird_brtypevethpeernamethird_ifovs-vsctladd-portubuntu_brfirst_brovs-vsctladd-portubuntu_brsecond_brovs-vsctladd-portubuntu_brthird_brovs-vsctlsetPortvnet0tag=101ovs-vsctlsetPortvnet1tag=102ovs-vsctlsetPortvnet2tag=103ovs-vsctlsetPortfirst_brtag=103ovs-vsctlclearPortsecond_brtagovs-vsctlsetPortthird_brtrunks=101,102需要監(jiān)聽ARP,所以禁止MAC地址學(xué)習(xí)ovs-vsctlsetbridgeubuntu_brflood-vlans=101,102,103從02來ping03,應(yīng)該first_if和second_if能夠收到包從00在ping05,則second_if和third_if可以收到包從01來ping04,則second_if和third_if可以收到包更加深入:br-int&br-tunbr-tun主要使用openvswitch的tunnel功能和Flow功能Openvswitch支持三類Tunnelgrevxlanipsec_greovs-vsctladd-brtestbrovs-vsctladd-porttestbrgre0--setInterfacegre0type=greoptions:local_ip=00options:remote_ip=01ovs-vsctladd-porttestbrvxlan0--setInterfacevxlan0type=vxlanoptions:local_ip=00options:remote_ip=02ovs-vsctladd-porttestbripsec0--setInterfaceipsec0type=ipsec_greoptions:local_ip=01options:remote_ip=02options:psk=password更加深入:br-int&br-tun對(duì)于FlowTable的管理,由ovs-ofctl來控制add?flow
switchflowmod?flows
switchflowdel?flows
switch
[flow]主要控制兩類MatchFieldActions更加深入:br-int&br-tunMatchField更加深入:br-int&br-tunActions:output:port和output:NXM_NX_REG0[16..31]enqueue:port:queuemod_vlan_vid:vlan_vidstrip_vlanmod_dl_src:mac和mod_dl_dst:macmod_nw_src:ip和mod_nw_dst:ipmod_tp_src:port和mod_tp_dst:portset_tunnel:idresubmit([port],[table])move:src[start..end]?>dst[start..end]load:value?>dst[start..end]learn(argument[,argument]...)更加深入:br-int&br-tunroot@NetworkNodeCliu8:~#ovs-ofctldump-flowsbr-tunNXST_FLOWreply(xid=0x4)://in_port=1是指包是從patch-int,也即是從虛擬機(jī)來的,所以是發(fā)送規(guī)則,跳轉(zhuǎn)到table1cookie=0x0,duration=73932.142s,table=0,n_packets=12,n_bytes=1476,idle_age=3380,hard_age=65534,priority=1,in_port=1actions=resubmit(,1)//in_port=2是指包是從GRE來的,也即是從物理網(wǎng)絡(luò)來的,所以是接收規(guī)則,跳轉(zhuǎn)到table2cookie=0x0,duration=73914.323s,table=0,n_packets=9,n_bytes=1166,idle_age=3376,hard_age=65534,priority=1,in_port=2actions=resubmit(,2)cookie=0x0,duration=73930.934s,table=0,n_packets=0,n_bytes=0,idle_age=65534,hard_age=65534,priority=0actions=drop//multicast,跳轉(zhuǎn)到table21cookie=0x0,duration=73928.59s,table=1,n_packets=6,n_bytes=468,idle_age=65534,hard_age=65534,priority=0,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00actions=resubmit(,21)//unicast,跳轉(zhuǎn)到table20cookie=0x0,duration=73929.695s,table=1,n_packets=3,n_bytes=778,idle_age=3380,hard_age=65534,priority=0,dl_dst=00:00:00:00:00:00/01:00:00:00:00:00actions=resubmit(,20)//這是接收規(guī)則的延續(xù),如果接收的tun_id=0x1則轉(zhuǎn)換為本地的tag,mod_vlan_vid:1,跳轉(zhuǎn)到table10cookie=0x0,duration=73906.864s,table=2,n_packets=9,n_bytes=1166,idle_age=3376,hard_age=65534,priority=1,tun_id=0x1actions=mod_vlan_vid:1,resubmit(,10)cookie=0x0,duration=73927.542s,table=2,n_packets=0,n_bytes=0,idle_age=65534,hard_age=65534,priority=0actions=dropcookie=0x0,duration=73926.403s,table=3,n_packets=0,n_bytes=0,idle_age=65534,hard_age=65534,priority=0actions=dropcookie=0x0,duration=73925.611s,table=10,n_packets=9,n_bytes=1166,idle_age=3376,hard_age=65534,priority=1actions=learn(table=20,hard_timeout=300,priority=1,NXM_OF_VLAN_TCI[0..11],NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:0->NXM_OF_VLAN_TCI[],load:NXM_NX_TUN_ID[]->NXM_NX_TUN_ID[],output:NXM_OF_IN_PORT[]),output:1cookie=0x0,duration=73924.858s,table=20,n_packets=0,n_bytes=0,idle_age=65534,hard_age=65534,priority=0actions=resubmit(,21)//這是發(fā)送規(guī)則的延續(xù),如果接收到的dl_vlan=1,則轉(zhuǎn)換為物理網(wǎng)絡(luò)的segmentid=1,set_tunnel:0x1cookie=0x0,duration=73907.657s,table=21,n_packets=0,n_bytes=0,idle_age=65534,hard_age=65534,priority=1,dl_vlan=1actions=strip_vlan,set_tunnel:0x1,output:2cookie=0x0,duration=73924.117s,table=21,n_packets=6,n_bytes=468,idle_age=65534,hard_age=65534,priority=0actions=drop更加深入:br-int&br-tunovs-ofctlshowbr-tun查看portid更加深入:br-int&br-tun配置Flow刪除所有的FlowTable0從port1進(jìn)來的,由table1處理從port2/3進(jìn)來的,由Table3處理默認(rèn)丟棄ovs-ofctldel-flowsbr-tunovs-ofctladd-flowbr-tun"hard_timeout=0idle_timeout=0priority=1in_port=1actions=resubmit(,1)"ovs-ofctladd-flowbr-tun"hard_timeout=0idle_timeout=0priority=1in_port=2actions=resubmit(,3)"ovs-ofctladd-flowbr-tun"hard_timeout=0idle_timeout=0priority=1in_port=3actions=resubmit(,3)"ovs-ofctladd-flowbr-tun"hard_timeout=0idle_timeout=0priority=0actions=drop"更加深入:br-int&br-tunTable1:對(duì)于單播,由table20處理對(duì)于多播,由table21處理Table2:默認(rèn)丟棄ovs-ofctladd-flowbr-tun"hard_timeout=0idle_timeout=0priority=1table=1dl_dst=00:00:00:00:00:00/01:00:00:00:00:00actions=resubmit(,20)"ovs-ofctladd-flowbr-tun"hard_timeout=0idle_timeout=0priority=1table=1dl_dst=01:00:00:00:00:00/01:00:00:00:00:00actions=resubmit(,21)"ovs-ofctladd-flowbr-tun"hard_timeout=0idle_timeout=0priority=0table=2actions=drop"更加深入:br-int&br-tunTable3:默認(rèn)丟棄TunnelID->VLANIDTable10:MAC地址學(xué)習(xí)ovs-ofctladd-flowbr-tun"hard_timeout=0idle_timeout=0priority=0table=3actions=drop"ovs-ofctladd-flowbr-tun"hard_timeout=0idle_timeout=0priority=1table=3tun_id=0x1actions=mod_vlan_vid:1,resubmit(,10)"ovs-ofctladd-flowbr-tun"hard_timeout=0idle_timeout=0priority=1table=3tun_id=0x2actions=mod_vlan_vid:2,resubmit(,10)"ovs-ofctladd-flowbr-tun"hard_timeout=0idle_timeout=0priority=1table=10actions=learn(table=20,priority=1,hard_timeout=300,NXM_OF_VLAN_TCI[0..11],NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:0->NXM_OF_VLAN_TCI[],load:NXM_NX_TUN_ID[]->NXM_NX_TUN_ID[],output:NXM_OF_IN_PORT[]),output:1"table=10,priority=1actions=learn(table=20,hard_timeout=300,priority=1,NXM_OF_VLAN_TCI[0..11],NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:0->NXM_OF_VLAN_TCI[],load:NXM_NX_TUN_ID[]->NXM_NX_TUN_ID[],output:NXM_OF_IN_PORT[]),output:1table=20,priority=2,dl_vlan=1,dl_dst=fa:16:3e:7e:ab:ccactions=strip_vlan,set_tunnel:0x3e9,output:2Table10是用來學(xué)習(xí)MAC地址的,學(xué)習(xí)的結(jié)果放在Table20里面,Table20被稱為MAClearningtableNXM_OF_VLAN_TCI這個(gè)是VLANTag,在MACLearningtable中,每一個(gè)entry都是僅僅對(duì)某一個(gè)VLAN來說的,不同VLAN的learningtable是分開的。在學(xué)習(xí)的結(jié)果的entry中,會(huì)標(biāo)出這個(gè)entry是對(duì)于哪個(gè)VLAN的。NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[]這個(gè)的意思是當(dāng)前包里面的MACSourceAddress會(huì)被放在學(xué)習(xí)結(jié)果的entry里面的dl_dst里面。這是因?yàn)槊總€(gè)switch都是通過Ingress包來學(xué)習(xí),某個(gè)MAC從某個(gè)port進(jìn)來,switch就應(yīng)該記住以后發(fā)往這個(gè)MAC的包要從這個(gè)port出去,因而MACsourceaddress就被放在了Macdestinationaddress里面,因?yàn)檫@是為發(fā)送用的。load:0->NXM_OF_VLAN_TCI[]意思是發(fā)送出去的時(shí)候,vlantag設(shè)為0,所以結(jié)果中有actions=strip_vlanload:NXM_NX_TUN_ID[]->NXM_NX_TUN_ID[]意思是發(fā)出去的時(shí)候,設(shè)置tunnelid,進(jìn)來的時(shí)候是多少,發(fā)送的時(shí)候就是多少,所以結(jié)果中有set_tunnel:0x3e9output:NXM_OF_IN_PORT[]意思是發(fā)送給哪個(gè)port,由于是從port2進(jìn)來的,因而結(jié)果中有output:2學(xué)習(xí)指令學(xué)習(xí)結(jié)果更加深入:br-int&br-tunTable20:這個(gè)是MACAddressLearningTable,如果不空就按照規(guī)則處理如果為空,就使用默認(rèn)規(guī)則,交給Table21處理Table21:默認(rèn)丟棄VLANID->TunnelIDovs-ofctladd-flowbr-tun"hard_timeout=0idle_timeout=0priority=0table=20actions=resubmit(,21)"ovs-ofctladd-flowbr-tun"hard_timeout=0idle_timeout=0priority=0table=21actions=drop"ovs-ofctladd-flowbr-tun"hard_timeout=0idle_timeout=0priority=1table=21dl_vlan=1actions=strip_vlan,set_tunnel:0x1,output:2,output:3"ovs-ofctladd-flowbr-tun"hard_timeout=0idle_timeout=0priority=1table=21dl_vlan=2actions=strip_vlan,set_tunnel:0x2,output:2,output:3"更加深入:br-int&br-tunFlowTable可以debugovs-appctlofproto/tracehelloworldin_port=1,dl_vlan=30,dl_src=10:00:00:00:00:01,dl_dst=20:00:00:00:00:01-generate更加深入:DHCPServerpsaux|grepdnsnobody69100.00.0282041080?SOct150:06dnsmasq--no-hosts--no-resolv--strict-order--bind-interfaces--interface=tap7c15f5a3-61--except-interface=lo--pid-file=/var/lib/neutron/dhcp/c27610cb-4a60-41ec-bd9d-3cd732f42cd6/pid--dhcp-hostsfile=/var/lib/neutron/dhcp/c27610cb-4a60-41ec-bd9d-3cd732f42cd6/host--addn-hosts=/var/lib/neutron/dhcp/c27610cb-4a60-41ec-bd9d-3cd732f42cd6/addn_hosts--dhcp-optsfile=/var/lib/neutron/dhcp/c27610cb-4a60-41ec-bd9d-3cd732f42cd6/opts--leasefile-ro--dhcp-range=set:tag0,,static,86400s--dhcp-lease-max=256--conf-file=--domain=openstacklocal#cat/var/lib/neutron/dhcp/c27610cb-4a60-41ec-bd9d-3cd732f42cd6/hostfa:16:3e:26:e5:e5,host-10-10-10-1.openstacklocal,fa:16:3e:be:40:73,host-10-10-10-5.openstacklocal,fa:16:3e:3c:92:1e,host-10-10-10-8.openstacklocal,更加深入:Router使用namespace中的routingtableFloatingIP使用namespace中的iptables的natipnetnsexecqrouter-5a74908c-712c-485c-aa9f-6c1e8b57e3e1route-nKernelIProutingtableDestinationGatewayGenmaskFlagsMetricRefUseIfaceUG000qg-52de6441-dbU000qr-e0967604-78U000qg-52de6441-dbipnetnsexecqrouter-5a74908c-712c-485c-aa9f-6c1e8b57e3e1iptables-tnat-nvL更加深入:br-ex將namespace中的網(wǎng)絡(luò)和namespace外的網(wǎng)絡(luò)連接起來虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試1.SecurityGroup全部打開,這是最基本的,但是很多人容易忘記虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試2.通過界面查看虛擬機(jī)的log,也可以在compute節(jié)點(diǎn)上查看console.log文件,看看里面是否有DHCP獲取IP成功的日志/var/lib/nova/instances/6323a941-de10-4ed3-9e2f-1b2b25e79b66/console.log如果沒有日志,則說明image有問題在grub里面linux/boot/vmlinuz-3.2.0-49-virtualroot=UUID=6d2231e4-0975-4f35-a94f-56738c1a8150roconsole=ttyS0GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0“update-grub虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試3.如果虛擬機(jī)連不上DHCPServer,則需要準(zhǔn)備一個(gè)不使用metadataserver,而是用用戶名密碼可以登錄的image虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試4.通過VNC登錄虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試5.如果VNC登錄不進(jìn)去,方法一配置VNC虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試VNCProxy的功能:將公網(wǎng)(publicnetwork)和私網(wǎng)(privatenetwork)隔離VNCclient運(yùn)行在公網(wǎng)上,VNCServer運(yùn)行在私網(wǎng)上,VNCProxy作為中間的橋梁將二者連接起來VNCProxy通過token對(duì)VNCClient進(jìn)行驗(yàn)證VNCProxy不僅僅使得私網(wǎng)的訪問更加安全,而且將具體的VNCServer的實(shí)現(xiàn)分離,可以支持不同Hypervisor的VNCServer但不影響用戶體驗(yàn)VNCProxy的部署在Controller節(jié)點(diǎn)上部署nova-consoleauth進(jìn)程,用于Token驗(yàn)證在Controller節(jié)點(diǎn)上部署nova-novncproxy服務(wù),用戶的VNCClient會(huì)直接連接這個(gè)服務(wù)Controller節(jié)點(diǎn)一般有兩張網(wǎng)卡,連接到兩個(gè)網(wǎng)絡(luò),一張用于外部訪問,我們稱為publicnetwork,或者APInetwork,這張網(wǎng)卡的IP地址是外網(wǎng)IP,如圖中,另外一張網(wǎng)卡用于openstack各個(gè)模塊之間的通信,稱為managementnetwork,一般是內(nèi)網(wǎng)IP,如圖中在Compute節(jié)點(diǎn)上部署nova-compute,在nova.conf文件中有下面的配置vnc_enabled=Truevncserver_listen=//VNCServer的監(jiān)聽地址vncserver_proxyclient_address=//novavncproxy是通過內(nèi)網(wǎng)IP來訪問vncserver的,所以nova-compute會(huì)告知vncproxy用這個(gè)IP來連接我。novncproxy_base_url=:6080/vnc_auto.html//這個(gè)url是返回給客戶的url,因而里面的IP是外網(wǎng)IP虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試VNCProxy的運(yùn)行過程:一個(gè)用戶試圖從瀏覽器里面打開連接到虛擬機(jī)的VNCClient瀏覽器向nova-api發(fā)送請(qǐng)求,要求返回訪問vnc的urlnova-api調(diào)用nova-compute的getvncconsole方法,要求返回連接VNC的信息nova-compute調(diào)用libvirt的getvncconsole函數(shù)libvirt會(huì)通過解析虛擬機(jī)運(yùn)行的/etc/libvirt/qemu/instance-0000000c.xml文件來獲得VNCServer的信息libvirt將host,port等信息以json格式返回給nova-computenova-compute會(huì)隨機(jī)生成一個(gè)UUID作為Tokennova-compute將libvirt返回的信息以及配置文件中的信息綜合成connect_info返回給nova-apinova-api會(huì)調(diào)用nova-consoleauth的authorize_console函數(shù)nova-consoleauth會(huì)將instance–>token,token–>connect_info的信息cache起來nova-api將connect_info中的accessurl信息返回給瀏覽器:http://:6080/vnc_auto.html?token=7efaee3f-eada-4731-a87c-e173cbd25e98&title=helloworld%289169fdb2-5b74-46b1-9803-60d2926bd97c%29瀏覽器會(huì)試圖打開這個(gè)鏈接這個(gè)鏈接會(huì)將請(qǐng)求發(fā)送給nova-novncproxynova-novncproxy調(diào)用nova-consoleauth的check_token函數(shù)nova-consoleauth驗(yàn)證了這個(gè)token,將這個(gè)instance對(duì)應(yīng)的connect_info返回給nova-novncproxynova-novncproxy通過connect_info中的host,port等信息,連接compute節(jié)點(diǎn)上的VNCServer,從而開始了proxy的工作虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試6.如果VNC登錄不進(jìn)去,方法二,使用自己的VNCClientlibvirt+133500.01.668438121102668?SlOct1713:58qemu-system-x86_64-enable-kvm-nameinstance-0000001c-S-machinepc-i440fx-trusty,accel=kvm,usb=off-cpuSandyBridge,+erms,+smep,+fsgsbase,+pdpe1gb,+rdrand,+f16c,+osxsave,+dca,+pcid,+pdcm,+xtpr,+tm2,+est,+smx,+vmx,+ds_cpl,+monitor,+dtes64,+pbe,+tm,+ht,+ss,+acpi,+ds,+vme-m2048-realtimemlock=off-smp1,sockets=1,cores=1,threads=1-uuideaad48ce-5f85-475a-a764-97de115808f4-smbiostype=1,manufacturer=OpenStackFoundation,product=OpenStackNova,version=2014.1.1,serial=80590690-87d2-e311-b1b0-a0481cabdfb4,uuid=eaad48ce-5f85-475a-a764-97de115808f4-no-user-config-nodefaults-chardevsocket,id=charmonitor,path=/var/lib/libvirt/qemu/instance-0000001c.monitor,server,nowait-monchardev=charmonitor,id=monitor,mode=control-rtcbase=utc,driftfix=slew-globalkvm-pit.lost_tick_policy=discard-no-hpet-no-shutdown-bootstrict=on-devicepiix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2-drivefile=/var/lib/nova/instances/eaad48ce-5f85-475a-a764-97de115808f4/disk,if=none,id=drive-virtio-disk0,format=qcow2,cache=none-devicevirtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1-netdevtap,fd=25,id=hostnet0,vhost=on,vhostfd=30-devicevirtio-net-pci,netdev=hostnet0,id=net0,mac=fa:16:3e:eb:0d:16,bus=pci.0,addr=0x3-chardevfile,id=charserial0,path=/var/lib/nova/instances/eaad48ce-5f85-475a-a764-97de115808f4/console.log-deviceisa-serial,chardev=charserial0,id=serial0-chardevpty,id=charserial1-deviceisa-serial,chardev=charserial1,id=serial1-deviceusb-tablet,id=input0-vnc:5
-ken-us-devicecirrus-vga,id=video0,bus=pci.0,addr=0x2-devicevirtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試7.通過ovs-vsctlshow和brctl來查看,各個(gè)網(wǎng)卡和bridge之間關(guān)系是否正確,tunnel之間是否能夠通,網(wǎng)卡是否都處于up的狀態(tài)虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試8.如果從虛擬機(jī)的虛擬網(wǎng)卡到DHCPServer的網(wǎng)卡一路都是正確的,則需要查看br-tun上ovs-ofctldumpflows查看flows規(guī)則,是否對(duì)包的改寫正確,是否有正確的規(guī)則虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試9.通過VNC登錄進(jìn)去后,就可以通過命令行運(yùn)行dhclient,來重啟連接DHCPServer,從compute節(jié)點(diǎn)上的網(wǎng)卡和bridge,一個(gè)個(gè)進(jìn)行tcpdump,看到底哪個(gè)網(wǎng)卡或者bridge沒有收到包,收到的包里面的VLANID等是否正確虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試10.如果VM能從DHCPServer獲得IP,則好事成了一半,接下來?yè)Q一個(gè)有cloud-init的image,看metadataserver能夠連接成功,能夠注入key,也是通過console.log來看虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試11.如果metadataserver不能連接成功,就需要順著metadataserver的整個(gè)流程,一個(gè)一個(gè)模塊看,看每個(gè)模塊的log,端口是否正確,是否收到請(qǐng)求,也可以在VM里面用curl來模擬metadataserver的請(qǐng)求openstack里的metadata,是提供一個(gè)機(jī)制給用戶,可以設(shè)定每一個(gè)instance的參數(shù)。比如你想給instance設(shè)置某個(gè)屬性,比如主機(jī)名。Instance訪問metadataserver54兩類API:OpenStackmetadataAPIvs.EC2-compatibleAPI.虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試metadatauserdata虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試metadata的一個(gè)重要應(yīng)用,是設(shè)置每個(gè)instance的ssh公鑰。公鑰的設(shè)置有兩種方式:1、創(chuàng)建instance時(shí)注入文件鏡像2、啟動(dòng)instance后,通過metadata獲取,然后用腳本寫入第二種方式更加靈活,可以給非root用戶注入公鑰。以下是獲取sshkey的代碼片段:虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試獲取metadata的api接口是:54/latest/meta-data/public-keys/0/openssh-key這個(gè)IP地址,在openstack是不存在的。為什么可以獲取到metadata呢?這是由于Amazon的原因,最早metadata是亞馬遜提出來的,參見:/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html后來很多人給亞馬遜定制了一些操作系統(tǒng)的鏡像,比如ubuntu,fedora,centos等等,而且將里面獲取metadta的api地址也寫死了。所以opentack為了兼容,保留了這個(gè)地址54。然后通過iptablesnat映射到真實(shí)的api上:iptables-Anova-network-PREROUTING-d54/32-ptcp-mtcp--dport80-jDNAT--to-destination97:8775虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試舊版本的實(shí)現(xiàn)機(jī)制在Network節(jié)點(diǎn)上,配置/etc/nova/nova.confmetadata_host=9797是Managementnetwork在Network節(jié)點(diǎn)上,要能夠連接這個(gè)IPMetadataServer是通過Instance的FixIP來判斷,所以請(qǐng)求一定要在虛擬機(jī)里面執(zhí)行虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試新版本的實(shí)現(xiàn)機(jī)制在使用namespace時(shí)就不生效了,因?yàn)閚amespace支持IP地址重疊,這樣nova就無法區(qū)分到底是哪個(gè)虛擬機(jī)請(qǐng)求metadata。采取的方法是在HTTP頭部識(shí)別是哪個(gè)虛擬機(jī)。加入了兩個(gè)服務(wù):neutron-ns-metadata-proxyneutron-metadata-agent在/etc/nova/nova.conf中配置#metadataneutron_metadata_proxy_shared_secret=passwordservice_neutron_metadata_proxy=truemetadata_listen=97metadata_listen_port=8775虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試一個(gè)虛擬機(jī)訪問54的流程如下圖:虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試First,虛擬機(jī)發(fā)出請(qǐng)求虛擬機(jī)啟動(dòng)時(shí)會(huì)訪問54數(shù)據(jù)包會(huì)直接發(fā)送到虛擬機(jī)的默認(rèn)網(wǎng)關(guān)默認(rèn)網(wǎng)關(guān)在networknode上,qr-XXXXXSecond,namespace中的iptables因?yàn)槭褂昧薾amespace,在networknode上每個(gè)namespace里都會(huì)有相應(yīng)的iptables規(guī)則和網(wǎng)絡(luò)設(shè)備。iptables規(guī)則中,會(huì)把目的地址54的數(shù)據(jù)包,重定向到本地端口9697ipnetnsexecqrouter-5a74908c-712c-485c-aa9f-6c1e8b57e3e1iptables-tnat-nvL虛擬機(jī)網(wǎng)絡(luò)問題調(diào)試Third,namespace-metadata-proxy啟用namespace場(chǎng)景下,對(duì)于每一個(gè)router,都會(huì)創(chuàng)建這樣一個(gè)進(jìn)程。該進(jìn)程監(jiān)聽9697端口,其主要功能:1、向請(qǐng)求頭部添加X-Forwarded-For和X-Neutron-Router-ID,分別表示虛擬機(jī)的fixedIP和router的ID2、將請(qǐng)求代理至Unixdomainsocket(/var/lib/neutron/metadata_proxy)/usr/bin/pyt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023凈身出戶離婚協(xié)議書
- 償還借款協(xié)議書范本
- 額部腫塊病因介紹
- 公司轉(zhuǎn)讓個(gè)人股份協(xié)議
- 中考政治第一部分知識(shí)闖關(guān)能力提升第二課時(shí)調(diào)節(jié)情緒學(xué)習(xí)壓力明辨是非復(fù)習(xí)課獲
- 2015中國(guó)在線音樂行業(yè)研究報(bào)告
- (2024)赤泥綜合利用生產(chǎn)建設(shè)項(xiàng)目可行性研究報(bào)告(一)
- 2023年辦公照明項(xiàng)目籌資方案
- 【電信終端產(chǎn)業(yè)協(xié)會(huì)】2024年終端智能化分級(jí)研究報(bào)告
- 國(guó)際物流題庫(kù)(含參考答案)
- 小學(xué)數(shù)學(xué)試卷模板
- 全國(guó)運(yùn)動(dòng)員代表資格協(xié)議書
- 小學(xué)消防安全檢查記錄表【模板】
- 制氫操作規(guī)程6篇
- 關(guān)于友情的英語ppt
- 2023全國(guó)日語高考答題卡word版
- 初中數(shù)學(xué)浙教版七年級(jí)上冊(cè)第3章實(shí)數(shù)3.4實(shí)數(shù)的運(yùn)算 全國(guó)一等獎(jiǎng)
- GB/T 8488-2001耐酸磚
- GB/T 4213-2008氣動(dòng)調(diào)節(jié)閥
- GB/T 23703.2-2010知識(shí)管理第2部分:術(shù)語
- GB/T 17587.3-2017滾珠絲杠副第3部分:驗(yàn)收條件和驗(yàn)收檢驗(yàn)
評(píng)論
0/150
提交評(píng)論