版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Neutron經(jīng)典的三節(jié)點部署分三個網(wǎng)絡:ExternalNetwork/APINetwork,這個網(wǎng)絡是連接外網(wǎng)的,無論是用戶調(diào)用Openstack的API,還是創(chuàng)建出來的虛擬機要訪問外網(wǎng),或者外網(wǎng)要ssh到虛擬機,都需要通過這個網(wǎng)絡DataNetwork,數(shù)據(jù)網(wǎng)絡,虛擬機之間的數(shù)據(jù)傳輸通過這個網(wǎng)絡來進行,比如一個虛擬機要連接另一個虛擬機,虛擬機要連接虛擬的路由都是通過這個網(wǎng)絡來進行ManagementNetwork,管理網(wǎng)絡,Openstack各個模塊之間的交互,連接數(shù)據(jù)庫,連接MessageQueue都是通過這個網(wǎng)絡來。架構neutron分成多個模塊分布在三個節(jié)點上。Controller節(jié)點:neutron-server,用于接受API請求創(chuàng)建網(wǎng)絡,子網(wǎng),路由器等,然而創(chuàng)建的這些東西僅僅是一些數(shù)據(jù)結構在數(shù)據(jù)庫里面Network節(jié)點:neutron-l3-agent,用于創(chuàng)建和管理虛擬路由器,當neutron-server將路由器的數(shù)據(jù)結構創(chuàng)建好,它是做具體的事情的,真正的調(diào)用命令行將虛擬路由器,路由表,namespace,iptables規(guī)則全部創(chuàng)建好neutron-dhcp-agent,用于創(chuàng)建和管理虛擬DHCPServer,每個虛擬網(wǎng)絡都會有一個DHCPServer,這個DHCPServer為這個虛擬網(wǎng)絡里面的虛擬機提供IPneutron-openvswith-plugin-agent,這個是用于創(chuàng)建虛擬的L2的switch的,在Network節(jié)點上,Router和DHCPServer都會連接到二層的switch上Compute節(jié)點:neutron-openvswith-plugin-agent,這個是用于創(chuàng)建虛擬的L2的switch的,在Compute節(jié)點上,虛擬機的網(wǎng)卡也是連接到二層的switch上架構創(chuàng)建網(wǎng)絡#!/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)絡創(chuàng)建網(wǎng)絡為這個Tenant創(chuàng)建一個privatenetwork,不同的privatenetwork是需要通過VLANtagging進行隔離的,互相之間broadcast不能到達,這里我們用的是GRE模式,也需要一個類似VLANID的東西,稱為SegmentID創(chuàng)建一個privatenetwork的subnet,subnet才是真正配置IP網(wǎng)段的地方,對于私網(wǎng),我們常常用/24這個網(wǎng)段為這個Tenant創(chuàng)建一個Router,才能夠訪問外網(wǎng)將privatenetwork連接到Router上創(chuàng)建一個ExternalNetwork創(chuàng)建一個ExernalNetwork的Subnet,這個外網(wǎng)邏輯上代表了我們數(shù)據(jù)中心的物理網(wǎng)絡,通過這個物理網(wǎng)絡,我們可以訪問外網(wǎng)。因而PUBLIC_GATEWAY應該設為數(shù)據(jù)中心里面的Gateway,PUBLIC_RANGE也應該和數(shù)據(jù)中心的物理網(wǎng)絡的CIDR一致,否則連不通,而之所以設置PUBLIC_START和PUBLIC_END,是因為在數(shù)據(jù)中心中,不可能所有的IP地址都給Openstack使用,另外可能搭建了VMwareVcenter,可能有物理機器,僅僅分配一個區(qū)間給Openstack來用。將Router連接到ExternalNetwork虛擬網(wǎng)絡的背后的實現(xiàn)GRE第一次看到這個圖太頭暈,不要緊,后面會慢慢解釋每一部分虛擬網(wǎng)絡的背后的實現(xiàn)VLANCompute節(jié)點Network節(jié)點更頭暈則接著忽略ipaddrovs-vsctlshowIpnetnsexecXXX把GRE和VLAN混在一塊,圖畫的不錯,顯然更暈怎么理解?回到大學寢室,或者你的家里是不是只有寢室長的電腦插兩塊網(wǎng)卡,要上網(wǎng),寢室長的電腦必須開著其他寢室同學只需要一張網(wǎng)卡什么?你們寢室直接買路由器?好吧,暴露年齡了,2000年初的時候,路由器還是不普遍的那就把Computer1和switch合在一起,想象成你們家的路由器怎么理解?把寢室想象成物理機,電腦就變成了虛擬機室長的電腦或是路由器每個電腦都插的switch忽略qbr,虛擬機直接連到switch上怎么理解?物理機分開,統(tǒng)一的br-int斷開,如何連接ExternalNetworkPrivateNetworkSecurityGroupTapInterfaceInterconnectionNetworkBr-int分開了,在虛擬機眼里,還是同一個switch,至于物理機之間br-int怎么連在一起,虛擬機可不管。Br-int之下,是物理機之間的互聯(lián),有各種方法,GRE,VLAN,VXLAN更加深入:TapInterfacevirshdumpxmlinstance-0000000c更加深入:TapInterfaceTap/TunDevice將guestsystem的網(wǎng)絡和hostsystem的網(wǎng)絡連在一起Tun/tap驅(qū)動程序中包含兩個部分,一部分是字符設備驅(qū)動,還有一部分是網(wǎng)卡驅(qū)動部分更加深入:SecurityGroupLayeriptables1、首先數(shù)據(jù)包進入,先進入mangle表的PREROUTING鏈,在這里可以根據(jù)需要改變數(shù)據(jù)包頭內(nèi)容
2、之后進入nat表的PREROUTING鏈,在這里可以根據(jù)需要做DNAT,也就是目標地址轉(zhuǎn)換
3、進入路由判斷,判斷是進入本地的還是轉(zhuǎn)發(fā)的
1)如果進入本地的話進入INPUT鏈,之后按條件過濾限制進入
之后進入本機,在進入OUTPUT鏈,按條件過濾限制出去
離開本地
2)如果是轉(zhuǎn)發(fā)的話進入,進入FORWARD鏈,根據(jù)條件限制轉(zhuǎn)發(fā)
之后進入POSTROUTING鏈,這里可以做SNAT
離開網(wǎng)絡接口更加深入:SecurityGroupLayer1)filter表主要處理過濾功能的
INPUT鏈:過濾所有目標地址是本機的數(shù)據(jù)包
FORWARD鏈:過濾所有路過本機的數(shù)據(jù)包
OUTPUT鏈:過濾所有由本機產(chǎn)生的數(shù)據(jù)包
2)nat表主要處理網(wǎng)絡地址轉(zhuǎn)換,可以進行SNAT(改變數(shù)據(jù)包的源地址),DNAT(改變數(shù)據(jù)包的目標地址)
PREROUTING鏈:可以再數(shù)據(jù)包到達防火墻是改變目標地址
OUTPUT鏈:可以改變本地產(chǎn)生的數(shù)據(jù)包的目標地址
POSTROUTING鏈:在數(shù)據(jù)包離開防火墻是改變數(shù)據(jù)包的源地址
3)mangle表修改數(shù)據(jù)包:
包含PREROUTING鏈,INPUT鏈,F(xiàn)ORWARD鏈,OUTPUT鏈,POSTROUTING鏈
這里mangle不做過多操作
還有一個表示raw表的,不常用的優(yōu)先級raw-->mangle-->nat-->filter
raw最高,filter最低iptables默認操作的是filter表更加深入:SecurityGroupLayeriptables-nvL更加深入:br-int&br-tun由Openvswitch實現(xiàn)Openvswitch是一個virutalswitch,支持OpenFlow協(xié)議,當然也有一些硬件Switch也支持OpenFlow協(xié)議,他們都可以被統(tǒng)一的Controller管理,從而實現(xiàn)物理機和虛擬機的網(wǎng)絡聯(lián)通。更加深入:br-int&br-tunFlowTable包含許多entry,每個entry是對packet進行處理的規(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的一個重要的方面就是VLANConfiguration,有兩種模式:trunkport這個port不配置tag,配置trunks如果trunks為空,則所有的VLAN都trunk,也就意味著對于所有的VLAN的包,本身帶什么VLANID,就是攜帶者什么VLANID,如果沒有設置VLAN,就屬于VLAN0,全部允許通過。如果trunks不為空,則僅僅帶著這些VLANID的包通過。accessport這個port配置tag,從這個port進來的包會被打上這個tag如果從其他的trunkport中進來的本身就帶有VLANID的包,如果VLANID等于tag,則會從這個port發(fā)出從其他的accessport上來的包,如果tag相同,也會被forward到這個port從accessport發(fā)出的包不帶VLANID如果一個本身帶VLANID的包到達accessport,即便VLANID等于tag,也會被拋棄。更加深入: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地址學習ovs-vsctlsetbridgeubuntu_brflood-vlans=101,102,103從02來ping03,應該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對于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,也即是從虛擬機來的,所以是發(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)絡來的,所以是接收規(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)絡的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進來的,由table1處理從port2/3進來的,由Table3處理默認丟棄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:對于單播,由table20處理對于多播,由table21處理Table2:默認丟棄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:默認丟棄TunnelID->VLANIDTable10:MAC地址學習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是用來學習MAC地址的,學習的結果放在Table20里面,Table20被稱為MAClearningtableNXM_OF_VLAN_TCI這個是VLANTag,在MACLearningtable中,每一個entry都是僅僅對某一個VLAN來說的,不同VLAN的learningtable是分開的。在學習的結果的entry中,會標出這個entry是對于哪個VLAN的。NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[]這個的意思是當前包里面的MACSourceAddress會被放在學習結果的entry里面的dl_dst里面。這是因為每個switch都是通過Ingress包來學習,某個MAC從某個port進來,switch就應該記住以后發(fā)往這個MAC的包要從這個port出去,因而MACsourceaddress就被放在了Macdestinationaddress里面,因為這是為發(fā)送用的。load:0->NXM_OF_VLAN_TCI[]意思是發(fā)送出去的時候,vlantag設為0,所以結果中有actions=strip_vlanload:NXM_NX_TUN_ID[]->NXM_NX_TUN_ID[]意思是發(fā)出去的時候,設置tunnelid,進來的時候是多少,發(fā)送的時候就是多少,所以結果中有set_tunnel:0x3e9output:NXM_OF_IN_PORT[]意思是發(fā)送給哪個port,由于是從port2進來的,因而結果中有output:2學習指令學習結果更加深入:br-int&br-tunTable20:這個是MACAddressLearningTable,如果不空就按照規(guī)則處理如果為空,就使用默認規(guī)則,交給Table21處理Table21:默認丟棄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)絡和namespace外的網(wǎng)絡連接起來虛擬機網(wǎng)絡問題調(diào)試1.SecurityGroup全部打開,這是最基本的,但是很多人容易忘記虛擬機網(wǎng)絡問題調(diào)試2.通過界面查看虛擬機的log,也可以在compute節(jié)點上查看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虛擬機網(wǎng)絡問題調(diào)試3.如果虛擬機連不上DHCPServer,則需要準備一個不使用metadataserver,而是用用戶名密碼可以登錄的image虛擬機網(wǎng)絡問題調(diào)試4.通過VNC登錄虛擬機網(wǎng)絡問題調(diào)試5.如果VNC登錄不進去,方法一配置VNC虛擬機網(wǎng)絡問題調(diào)試VNCProxy的功能:將公網(wǎng)(publicnetwork)和私網(wǎng)(privatenetwork)隔離VNCclient運行在公網(wǎng)上,VNCServer運行在私網(wǎng)上,VNCProxy作為中間的橋梁將二者連接起來VNCProxy通過token對VNCClient進行驗證VNCProxy不僅僅使得私網(wǎng)的訪問更加安全,而且將具體的VNCServer的實現(xiàn)分離,可以支持不同Hypervisor的VNCServer但不影響用戶體驗VNCProxy的部署在Controller節(jié)點上部署nova-consoleauth進程,用于Token驗證在Controller節(jié)點上部署nova-novncproxy服務,用戶的VNCClient會直接連接這個服務Controller節(jié)點一般有兩張網(wǎng)卡,連接到兩個網(wǎng)絡,一張用于外部訪問,我們稱為publicnetwork,或者APInetwork,這張網(wǎng)卡的IP地址是外網(wǎng)IP,如圖中,另外一張網(wǎng)卡用于openstack各個模塊之間的通信,稱為managementnetwork,一般是內(nèi)網(wǎng)IP,如圖中在Compute節(jié)點上部署nova-compute,在nova.conf文件中有下面的配置vnc_enabled=Truevncserver_listen=//VNCServer的監(jiān)聽地址vncserver_proxyclient_address=//novavncproxy是通過內(nèi)網(wǎng)IP來訪問vncserver的,所以nova-compute會告知vncproxy用這個IP來連接我。novncproxy_base_url=:6080/vnc_auto.html//這個url是返回給客戶的url,因而里面的IP是外網(wǎng)IP虛擬機網(wǎng)絡問題調(diào)試VNCProxy的運行過程:一個用戶試圖從瀏覽器里面打開連接到虛擬機的VNCClient瀏覽器向nova-api發(fā)送請求,要求返回訪問vnc的urlnova-api調(diào)用nova-compute的getvncconsole方法,要求返回連接VNC的信息nova-compute調(diào)用libvirt的getvncconsole函數(shù)libvirt會通過解析虛擬機運行的/etc/libvirt/qemu/instance-0000000c.xml文件來獲得VNCServer的信息libvirt將host,port等信息以json格式返回給nova-computenova-compute會隨機生成一個UUID作為Tokennova-compute將libvirt返回的信息以及配置文件中的信息綜合成connect_info返回給nova-apinova-api會調(diào)用nova-consoleauth的authorize_console函數(shù)nova-consoleauth會將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瀏覽器會試圖打開這個鏈接這個鏈接會將請求發(fā)送給nova-novncproxynova-novncproxy調(diào)用nova-consoleauth的check_token函數(shù)nova-consoleauth驗證了這個token,將這個instance對應的connect_info返回給nova-novncproxynova-novncproxy通過connect_info中的host,port等信息,連接compute節(jié)點上的VNCServer,從而開始了proxy的工作虛擬機網(wǎng)絡問題調(diào)試6.如果VNC登錄不進去,方法二,使用自己的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虛擬機網(wǎng)絡問題調(diào)試7.通過ovs-vsctlshow和brctl來查看,各個網(wǎng)卡和bridge之間關系是否正確,tunnel之間是否能夠通,網(wǎng)卡是否都處于up的狀態(tài)虛擬機網(wǎng)絡問題調(diào)試8.如果從虛擬機的虛擬網(wǎng)卡到DHCPServer的網(wǎng)卡一路都是正確的,則需要查看br-tun上ovs-ofctldumpflows查看flows規(guī)則,是否對包的改寫正確,是否有正確的規(guī)則虛擬機網(wǎng)絡問題調(diào)試9.通過VNC登錄進去后,就可以通過命令行運行dhclient,來重啟連接DHCPServer,從compute節(jié)點上的網(wǎng)卡和bridge,一個個進行tcpdump,看到底哪個網(wǎng)卡或者bridge沒有收到包,收到的包里面的VLANID等是否正確虛擬機網(wǎng)絡問題調(diào)試10.如果VM能從DHCPServer獲得IP,則好事成了一半,接下來換一個有cloud-init的image,看metadataserver能夠連接成功,能夠注入key,也是通過console.log來看虛擬機網(wǎng)絡問題調(diào)試11.如果metadataserver不能連接成功,就需要順著metadataserver的整個流程,一個一個模塊看,看每個模塊的log,端口是否正確,是否收到請求,也可以在VM里面用curl來模擬metadataserver的請求openstack里的metadata,是提供一個機制給用戶,可以設定每一個instance的參數(shù)。比如你想給instance設置某個屬性,比如主機名。Instance訪問metadataserver54兩類API:OpenStackmetadataAPIvs.EC2-compatibleAPI.虛擬機網(wǎng)絡問題調(diào)試metadatauserdata虛擬機網(wǎng)絡問題調(diào)試metadata的一個重要應用,是設置每個instance的ssh公鑰。公鑰的設置有兩種方式:1、創(chuàng)建instance時注入文件鏡像2、啟動instance后,通過metadata獲取,然后用腳本寫入第二種方式更加靈活,可以給非root用戶注入公鑰。以下是獲取sshkey的代碼片段:虛擬機網(wǎng)絡問題調(diào)試獲取metadata的api接口是:54/latest/meta-data/public-keys/0/openssh-key這個IP地址,在openstack是不存在的。為什么可以獲取到metadata呢?這是由于Amazon的原因,最早metadata是亞馬遜提出來的,參見:/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html后來很多人給亞馬遜定制了一些操作系統(tǒng)的鏡像,比如ubuntu,fedora,centos等等,而且將里面獲取metadta的api地址也寫死了。所以opentack為了兼容,保留了這個地址54。然后通過iptablesnat映射到真實的api上:iptables-Anova-network-PREROUTING-d54/32-ptcp-mtcp--dport80-jDNAT--to-destination97:8775虛擬機網(wǎng)絡問題調(diào)試舊版本的實現(xiàn)機制在Network節(jié)點上,配置/etc/nova/nova.confmetadata_host=9797是Managementnetwork在Network節(jié)點上,要能夠連接這個IPMetadataServer是通過Instance的FixIP來判斷,所以請求一定要在虛擬機里面執(zhí)行虛擬機網(wǎng)絡問題調(diào)試新版本的實現(xiàn)機制在使用namespace時就不生效了,因為namespace支持IP地址重疊,這樣nova就無法區(qū)分到底是哪個虛擬機請求metadata。采取的方法是在HTTP頭部識別是哪個虛擬機。加入了兩個服務: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虛擬機網(wǎng)絡問題調(diào)試一個虛擬機訪問54的流程如下圖:虛擬機網(wǎng)絡問題調(diào)試First,虛擬機發(fā)出請求虛擬機啟動時會訪問54數(shù)據(jù)包會直接發(fā)送到虛擬機的默認網(wǎng)關默認網(wǎng)關在networknode上,qr-XXXXXSecond,namespace中的iptables因為使用了namespace,在networknode上每個namespace里都會有相應的iptables規(guī)則和網(wǎng)絡設備。iptables規(guī)則中,會把目的地址54的數(shù)據(jù)包,重定向到本地端口9697ipnetnsexecqrouter-5a74908c-712c-485c-aa9f-6c1e8b57e3e1iptables-tnat-nvL虛擬機網(wǎng)絡問題調(diào)試Third,namespace-metadata-proxy啟用namespace場景下,對于每一個router,都會創(chuàng)建這樣一個進程。該進程監(jiān)聽9697端口,其主要功能:1、向請求頭部添加X-Forwarded-For和X-Neutron-Router-ID,分別表示虛擬機的fixedIP和router的ID2、將請求代理至Unixdomainsocket(/var/lib/neutron/metadata_proxy)/usr/bin/pyt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高一化學鞏固練習:物質(zhì)的分類(基礎)
- 2024高中地理第2章區(qū)域可持續(xù)發(fā)展第1節(jié)荒漠化的危害與治理-以我國西北地區(qū)為例學案湘教版必修3
- 2024高考化學一輪復習課練11硫及其化合物含解析
- 2024高考歷史一輪復習第15講中國近現(xiàn)代社會生活的變遷學案含解析人民版
- 2024高考地理一輪復習第二部分人文地理-重在運用第一章人口的變化第16講人口的數(shù)量變化和人口容量課時作業(yè)含解析新人教版
- 小學勞動教育實施方案
- 兒童學習與發(fā)展的情緒和社會發(fā)展
- 《小圣施威降大圣》教案
- 2024年陽泉市口腔醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 2024年河南醫(yī)學高等??茖W校高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- TSGD7002-2023-壓力管道元件型式試驗規(guī)則
- 2024年度家庭醫(yī)生簽約服務培訓課件
- 建筑工地節(jié)前停工安全檢查表
- 現(xiàn)代電路技術——故障檢測D算法
- 鈑金與成型 其它典型成形
- 注塑件生產(chǎn)通用標準
- 胃腸外科診療規(guī)范成文版
- 八卦象數(shù)療法
- 項目部質(zhì)量管理體系
- (完整版)視頻監(jiān)控系統(tǒng)用戶操作手冊
- 智能交通項目工程質(zhì)量控制措施
評論
0/150
提交評論