摘要:下圖展示了虛擬機可以獲取到的信息神奇的這個地址來源于,亞馬遜在設(shè)計公有云的時候為了讓能夠訪問,就將這個特殊的作為服務(wù)器的地址。服務(wù)啟動了服務(wù),負責(zé)處理虛擬機發(fā)送來的請求。服務(wù)也運行在網(wǎng)絡(luò)節(jié)點。中的路由和服務(wù)器都在各自獨立的命名空間中。
前言
下圖是OpenStack虛擬機在啟動過程中發(fā)出的一個請求,我們在里面可以看到cloud-init和169.254.169.254。那么它們分別是做什么用的呢,接下來我們將會做一個詳細的介紹。
眾所周知,在創(chuàng)建虛擬機的時候,用戶往往需要對虛擬機進行一些配置,比如:開啟一些服務(wù)、安裝某些包、添加SSH 秘鑰、配置 hostname,修改密碼等等。這里有兩個問題,一個是誰負責(zé)初始化虛擬機配置,另一個是虛擬機如何獲取到這些配置信息的。
首先這些信息的初始化是通過cloud-Init的方式配置到虛擬機中。cloud-Init是一個用來自動配置虛擬機的初始設(shè)置的工具,它可以在使用模板部署虛擬機時使用,從而達到避免網(wǎng)絡(luò)沖突的目的。在使用這個工具前,cloud-init 軟件包必須在虛擬機上被安裝。安裝后,cloud-Init服務(wù)會在系統(tǒng)啟動時搜索如何配置系統(tǒng)的信息。您可以使用只運行一次窗口來提供只需要配置一次的設(shè)置信息;或在新建虛擬機、編輯虛擬機和編輯模板窗口中輸入虛擬機每次啟動都需要的配置信息。
cloud-init負責(zé)初始化虛擬機配置,那么虛擬機如何獲取到用戶傳遞的配置信息呢?OpenStack提供了兩種方式獲取這些配置信息,一種是config drive,一種是metadata RESTful服務(wù)。由于篇幅關(guān)系,本文主要闡述metadata RESTful服務(wù)。
OpenStack nova-api-metadata服務(wù)提供了RESTful 接口,虛擬機可以通過訪問API獲取metadata 信息。要完成從虛擬機至網(wǎng)絡(luò)節(jié)點的請求發(fā)送和響應(yīng),保證鏈路的連通,只有nova-api-metadata服務(wù)是不夠的,OpenStack提供neutron-metadata-agent 和 neutron-ns-metadata-proxy服務(wù)保證虛擬機的請求可以發(fā)送到nova-api-metadata服務(wù)。
下圖展示了虛擬機可以獲取到的metadata信息
神奇的169.254.169.254
這個地址來源于AWS,亞馬遜在設(shè)計公有云的時候為了讓instance 能夠訪問 metadata,就將 169.254.169.254 這個特殊的IP 作為metadata 服務(wù)器的地址。然后大家在給亞馬遜定制各種操作系統(tǒng)鏡像的時候獲取metadata的api地址就寫的是169.254.169.254。為了這些鏡像也能在OpenStack上運行,為了兼容它。OpenStack就保留了這個地址。
nova-api-metadata服務(wù)
nova-api-metadata啟動了RESTful 服務(wù),負責(zé)處理虛擬機發(fā)送來的REST API 請求。從請求的HTTP 頭部中取出相應(yīng)的信息,獲得虛擬機的ID,繼而從數(shù)據(jù)庫中讀取虛擬機的metadata 信息,最后將結(jié)果返回。
neutron-metadata-agent服務(wù)
neutron-metadata-agent 運行在網(wǎng)絡(luò)節(jié)點,負責(zé)將接收到的獲取metadata 的請求轉(zhuǎn)發(fā)給nova-api-metadata。neutron-metadata-agent 會獲取虛擬機和租戶的ID,添加到請求的HTTP 頭部中。nova-api-metadata 會根據(jù)這些信息獲取metadata。
neutron-ns-metadata-proxy服務(wù)
neutron-ns-metadata-proxy 也運行在網(wǎng)絡(luò)節(jié)點。為了解決網(wǎng)絡(luò)節(jié)點的網(wǎng)段和租戶的虛擬網(wǎng)段重復(fù)的問題,OpenStack 引入了網(wǎng)絡(luò)命名空間。neutron 中的路由和DHCP 服務(wù)器都在各自獨立的命名空間中。由于虛擬機獲取metadata 的請求都是以路由和DHCP 服務(wù)器作為網(wǎng)絡(luò)出口,所以需要通過neutron-ns-metadata-proxy 聯(lián)通不同的網(wǎng)絡(luò)命名空間,將請求在網(wǎng)絡(luò)命名空間之間轉(zhuǎn)發(fā)。
neutron-ns-metadata-proxy利用在unix domain socket 之上的HTTP技術(shù),實現(xiàn)了不同網(wǎng)絡(luò)命名空間之間的HTTP 請求轉(zhuǎn)發(fā)。并在請求頭中添加’X-Neutron-Router-ID’和’X-Neutron-Network-ID’信息,以便neutron-metadata-agent 來辨別發(fā)送請求的虛擬機,獲取虛擬機的ID。通過下圖可以看出每個網(wǎng)絡(luò)或者router均會有一個服務(wù)進程,網(wǎng)絡(luò)對應(yīng)的端口號為80,router對應(yīng)的端口號為9697。
虛擬機獲取metadata流程
如上圖所示,虛擬機獲取metadata 的大致流程為:首先請求被發(fā)送至neutron-ns-metadata-proxy,此時會在請求中添加router-id 和network-id,然后請求通過unix domian socket 被轉(zhuǎn)發(fā)給neutron-metadata-agent,根據(jù)請求中的router-id、network-id 和IP,獲取port 信息,從而拿到instance-id 和tenant-id 加入請求中,最后請求被轉(zhuǎn)發(fā)給nova-api-metadata,其利用instance-id 和tenant-id 獲取虛擬機的metadata,返回相應(yīng)。
上面我們分析了各個服務(wù)之間轉(zhuǎn)發(fā)請求的流程,那么現(xiàn)在只存在一個問題,整個獲取metadata 的路線就通暢了:虛擬機如何將請求發(fā)送至neutron-ns-metadata-proxy? neutron通過兩種方式來解決這個問題:通過router 發(fā)送請求和通過DHCP 發(fā)送請求。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/5342.html
摘要:模板中的頂級,定義實例化后將返回的數(shù)據(jù)。通過如此的解析和協(xié)作,最終完成請求的處理。服務(wù)接受請求,讀入模板信息,處理后利用請求發(fā)送給。首先,調(diào)用拿到對應(yīng)的。Heat 是由AWS的EC2 Cloud Formation 演化而來,是openstack中負責(zé)Orchestration的service, 用于openstack 中資源的編排,它通過將OpenStack中的資源(resource)以模...
摘要:另外,項目在單元測試中使用的是的內(nèi)存數(shù)據(jù)庫,這樣開發(fā)者運行單元測試的時候不需要安裝和配置復(fù)雜的數(shù)據(jù)庫,只要安裝好就可以了。而且,數(shù)據(jù)庫是保存在內(nèi)存中的,會提高單元測試的速度。是實現(xiàn)層的基礎(chǔ)。項目一般會使用數(shù)據(jù)庫來運行單元測試。 OpenStack中的關(guān)系型數(shù)據(jù)庫應(yīng)用 OpenStack中的數(shù)據(jù)庫應(yīng)用主要是關(guān)系型數(shù)據(jù)庫,主要使用的是MySQL數(shù)據(jù)庫。當然也有一些NoSQL的應(yīng)用,比如Ce...
摘要:慢慢硬件和就綁在一起了,的,的,的微軟是個例外,可在不同的服務(wù)器上跑。虛擬軟件的老大自打推出它的之后,很快又推出了它的管理平臺另一大佬微軟比胃口還大,從操作系統(tǒng)到虛擬軟件,當然忘不了它的管理平臺。自此,成了容器的代名詞。 云世界里的技術(shù)日新月異,新名詞一個接著一個讓人應(yīng)接不暇,從虛擬化開始,VMware、HyperV、KVM,到云管理平臺VSphere、SystemCenter、OpenS...
摘要:本屆大會仍然以交流云計算產(chǎn)業(yè)的最前沿技術(shù)探索和服務(wù)端開發(fā)運維的最成熟實踐為宗旨,圍繞各講師過去一年內(nèi)的技術(shù)演變和項目實踐進行互動和分享。 showImg(https://segmentfault.com/img/bVsmUZ);ECUG 全稱為 Effective Cloud User Group (實效云計算用戶組),由七牛云 CEO 許式偉于 2007 年發(fā)起,集結(jié)了一批具有高端視...
摘要:標簽源碼閱讀在中虛擬機的創(chuàng)建無疑是非常重要的了解虛擬機創(chuàng)建流程并閱讀模塊關(guān)于創(chuàng)建虛擬機的源碼對開發(fā)有很很大幫助本篇文章將以版本為基礎(chǔ)講解創(chuàng)建虛擬機的源碼由于模塊代碼復(fù)雜而且閱讀源碼所需知識較多所以側(cè)重于流程邏輯源碼閱讀可能不夠詳盡指出模塊結(jié) 標簽: openstack nova 源碼閱讀 在openstack中,虛擬機的創(chuàng)建無疑是非常重要的,了解虛擬機創(chuàng)建流程并閱讀nova模塊關(guān)于創(chuàng)...
閱讀 1211·2021-11-24 11:16
閱讀 3440·2021-11-15 11:38
閱讀 1952·2021-10-20 13:47
閱讀 559·2021-09-29 09:35
閱讀 2208·2021-09-22 15:17
閱讀 1028·2021-09-07 09:59
閱讀 3395·2019-08-30 13:21
閱讀 2919·2019-08-30 12:47