OpenStack實踐系列⑦深入理解neutron和虛擬機
OpenStack實踐系列⑦深入理解neutron和虛擬機
五、深入理解Neutron
5.1 虛擬機網卡和網橋
[[email protected] ~]# ifconfig brq65c11cc3-8e: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.3.199 netmask 255.255.255.0 broadcast 192.168.3.255 ether 00:50:56:3b:dc:7e txqueuelen 1000 (Ethernet) RX packets 1790597 bytes 176851434(168.6 MiB) RX errors 0 dropped 3 overruns 0 frame 0 TX packets 124754 bytes 46878133 (44.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 00:50:56:3b:dc:7e txqueuelen 1000 (Ethernet) RX packets 3293092 bytes 1095327590 (1.0 GiB) RX errors0 dropped 15 overruns 0 frame 0 TX packets 140212 bytes 54058900 (51.5 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 771917 bytes 210969292(201.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 771917 bytes 210969292 (201.1 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 tap436a0452-af: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 4a:a6:af:6e:63:47 txqueuelen 1000 (Ethernet) RX packets 11140 bytes 1616336 (1.5 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1660822 bytes 165849927 (158.1 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [[email protected] ~]# brctl show bridge name bridge id STP enabled interfaces brq65c11cc3-8e 8000.0050563bdc7e no eth0 tap436a0452-af brq65c11cc3-8e(網橋):可以理解為一個小交換機,網橋上的設備都和eth0能通(數據鏈路層),其中tap436a0452-af作為虛擬機的網卡,從而實現通信
5.2 不同場景網絡類型和OpenStack網絡分層
5.2.1 Openstack網絡分類
5.2.2Openstack網絡分層
首先網絡分層肯定是基於OSI七層模型的,在這裏就不在贅述,只對Openstack的網絡進行分層講解
網絡:在實際的物理環境下,我們使用交換機或者集線器把多個計算機連接起來形成了網絡,在Neutron的世界裏,網絡也是將多個不同的雲主機連接起來。
子網:在實際的物理環境下,在一個網絡中,我們可以將網絡劃分成多個邏輯子網,在Neutron的世界裏,子網也是路屬於網絡下的
端口:在實際的物理環境下,每個字子網或者每個網絡,都有很多的端口,比如交換機端口來供計算機鏈接,在Neutron的世界裏端口也是隸屬於子網下,雲主機的網卡會對應到一個端口上。
路由器:在實際的網絡環境下,不同網絡或者不同邏輯子網之間如果需要進行通信,需要通過路由器進行路由,在Neutron的實際裏路由也是這個作用,用來連接不同的網絡或者子網。
5.3 五種neutron常見的模型
單一平面網絡(也叫大二層網絡,最初的 nova-network 網絡模型)
單一平面網絡的缺點:
a.存在單一網絡瓶頸,缺乏可伸縮性。
b.缺乏合適的多租戶隔離。
c.容易發生廣播風暴,而且不能使用keepalived(vrrp組播)
多平面網絡
混合平面私有網絡
通過私有網絡實現運營商路由功能
通過私有網絡實現每個租戶創建自己專屬的網絡區段
5.4 圖解Neutron服務的幾大組件
ML2(The Modular Layer2):提供一個新的插件ML2,這個插件可以作為一個框架同時支持不同的2層網絡,類似於中間協調在作用,通過ml2
調用linuxbridge、openvswitch和其他商業的插件,保證了可以同時使用linuxbridge、openvswitch和其他商業的插件。
DHCP-Agent:為虛擬機分配IP地址,在創建虛擬機之前,創建了一個IP地址池,就是為了給虛擬機分配IP地址的。具體如下:
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
Dhcp-agent需要配置與plugin對應的interface_driver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
當啟動一個實例時,分配和配置(ip)的程序包含一個在dnsmasq config中儲存ip地址的進程,接著啟動或重載dnsmasq。通常,OpenStack在每個網絡中只有一個neutron-dhcp-agent負責spawn一個dnsmasq,所以一個龐大的網絡(包含所有子網)中只會有一個dnsmasq提供服務。理論上,並且根據實用的實驗室測試,dnsmasq應該能每秒處理1000個DHCP請求
enable_isolated_metadata = true 啟用獨立的metadata,後續會有說明
L3-agent:名字為neutron-l3-agent,為客戶機訪問外部網絡提供3層轉發服務。也部署在網絡節點上。
LBaas:負載均衡及服務。後續會有說明
六、虛擬機知多少
虛擬機對於宿主機來說,知識一個進程,通過libvirt調用kvm進行管理虛擬機,當然也可以使用virsh工具來管理虛擬機
查看所虛擬機的真實內容
切換到虛擬機默認的存放路徑
[[email protected] ~]# cd /var/lib/nova/instances/ [[email protected] instances]# ls b6ba588b-494d-4055-ac8e-5c3978ba9150 _base compute_nodes locks
b6ba588b-494d-4055-ac8e-5c3978ba9150目錄為虛擬機的ID(可通過nova list查看),詳細內容如下
console.log 終端輸出到此文件中
disk 虛擬磁盤,後端文件/var/lib/nova/instances/_base/fed362a98366776009c94e3d0856df41750b4353,使用的是copy on write模式,基礎鏡像就是這裏的後端文件,只有變動的內容才放到disk文件中
[[email protected] b6ba588b-494d-4055-ac8e-5c3978ba9150]# file disk disk: QEMU QCOW Image (v3), has backing file (path /var/lib/nova/instances/_base/fed362a98366776009c94e3d0856df417), 1073741824 bytes [[email protected] b6ba588b-494d-4055-ac8e-5c3978ba9150]# qemu-img info disk image: disk file format: qcow2 virtual size: 1.0G (1073741824 bytes) disk size: 2.4M cluster_size: 65536 backing file: /var/lib/nova/instances/_base/fed362a98366776009c94e3d0856df41750b4353 Format specific information: compat: 1.1 lazy refcounts: false
disk.info disk的詳情
[[email protected] b6ba588b-494d-4055-ac8e-5c3978ba9150]# qemu-img info disk.info
image: disk.info
file format: raw
virtual size: 512 (512 bytes)
disk size: 4.0K
libvirt.xml 就是libvirt自動生成的xml,不可以改動此xml,因為改了也沒什麽卵用,此xml是啟動虛擬機時動態生成的
compute_nodes記錄了主機名和時間戳
[[email protected] instances]# cat compute_nodes
{"node2.chinasoft.com": 1493295366.200245}
locks目錄:類似於寫shell腳本時的lock文件
學習metadata
metadata(元數據)
在創建虛擬機時可以添加或者修改虛擬機的默認屬性,例如主機名,key-pair,ip地址等
在新創建的虛擬機上查看metadata的數據,這些都是可以通過metadata生成
賬號cirros
密碼cubswin:)
[[email protected] instances]# ssh cirros@192.168.3.102 $ curl http://169.254.169.254/2009-04-04/meta-data ami-id ami-launch-index ami-manifest-path block-device-mapping/ hostname instance-action instance-id instance-type local-hostname local-ipv4 placement/ public-hostname public-ipv4 public-keys/ reservation-id security-groups 查看路由 $ ip ro li default via 192.168.3.1 dev eth0 169.254.169.254 via 192.168.3.100 dev eth0 192.168.3.0/24 dev eth0 src 192.168.3.102
在控制節點查看網絡的命名空間ns
[[email protected] instances]# ip netns li
qdhcp-65c11cc3-8efb-46de-8d14-690431835bae (id: 0)
查看上述ns的具體網卡情況,也就是在命名空間中使用ip ad li並查看端口占用情況
[[email protected] instances]# ip netns exec qdhcp-65c11cc3-8efb-46de-8d14-690431835bae ip ad li 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: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000 link/ether fa:16:3e:a3:76:b9 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 192.168.3.100/24 brd 192.168.3.255 scope global ns-436a0452-af valid_lft forever preferred_lft forever inet 169.254.169.254/16 brd 169.254.255.255 scope global ns-436a0452-af valid_lft forever preferred_lft forever inet6 fe80::f816:3eff:fea3:76b9/64 scope link valid_lft forever preferred_lft forever [[email protected] instances]# ip netns exec qdhcp-65c11cc3-8efb-46de-8d14-690431835bae netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2867/python2 tcp 0 0 192.168.3.100:53 0.0.0.0:* LISTEN 10450/dnsmasq tcp 0 0 169.254.169.254:53 0.0.0.0:* LISTEN 10450/dnsmasq tcp6 0 0 fe80::f816:3eff:fea3:53 :::* LISTEN 10450/dnsmasq udp 0 0 192.168.3.100:53 0.0.0.0:* 10450/dnsmasq udp 0 0 169.254.169.254:53 0.0.0.0:* 10450/dnsmasq udp 0 0 0.0.0.0:67 0.0.0.0:* 10450/dnsmasq udp6 0 0 fe80::f816:3eff:fea3:53 :::* 10450/dnsmasq
總結
命名空間ns的ip地址dhcp服務分配的192.168.3.100而且還有一個169.254.169.254的ip,並在此啟用了一個http服務(不僅提供http,還提供dns解析等),命名空間在neutron的dhcp-agent配置文件中啟用了service_metadata_proxy = True而生效,
所以虛擬機的路由是命名空間通過dhcp推送(ip ro li查看出來的)的,key-pair就是通過命名空間在虛擬機生成時在/etc/rc.local中寫一個curl的腳本把key-pair定位到.ssh目錄下,並且改名即可,其他同理
OpenStack實踐系列⑦深入理解neutron和虛擬機