別以爲真懂Openstack: 虛擬機創建的50個步驟和100個知識點(1)

還是先上圖吧,無圖無真相

Instance創建過程

別以爲真懂Openstack!先彆着急罵我,我也沒有說我真懂Openstack

我其實很想弄懂Openstack,然而從哪裏下手呢?作爲程序員,第一個想法當然是代碼,Code Talks,什麼都可以忽悠,代碼是實實在在的,何況原來也深入讀過Lucene, Hadoop的源代碼,總以爲從代碼下手,背後的原理變了然了。

說幹就幹,我喜歡讀取代碼的方式是按照情景閱讀,比如在Lucene中跟蹤索引的過程,跟蹤搜索的過程,比如在Hadoop中,跟蹤寫入文件的過程,跟蹤Map-Reduce的過程,於是在Openstack中決定跟蹤虛擬機創建的整個過程

好在很多先賢已經做過這方面的事情,想來也沒有那麼的困難。

比較推薦一篇 Request Flow for Provisioning Instance in Openstack(http://ilearnstack.com/2013/04/26/request-flow-for-provisioning-instance-in-openstack/),如果被牆擋住了,我轉到了[轉]Request Flow for Provisioning Instance in Openstack

request-flow1

然而真的開始了這個旅程,卻發現Openstack中涉及的知識絕非只有python代碼,而必須有大量的外圍知識方可理解。

Openstack社區強大,各門各派武林高手競相亮招,不斷的貢獻各種各樣的插件,模塊:

  • 模塊繁多:除了Iaas平臺的基本組件keystone, nova, glance, neutron, cinder之外,很多人都想在Openstack裏面創建新的模塊,如雨後春筍冒了出來,Telemetry (Ceilometer), Orchestration (Heat), Database Service (Trove), Data processing (Sahara), Bare metal (Ironic), Queue service (Marconi), Key management (Barbican), DNS Services (Designate), Deployment (TripleO),哦,太多了,研究不過來,好吧,先收縮一下雄心壯志,專注IaaS層吧,所以有關這些模塊的知識點,本文沒有涉及。

  • 插件繁多:除了Openstack支持的一些開源插件外,各大廠商都爭先恐後的開發自己的插件,似乎害怕被Openstack社區拒之門外。我沒有錢去買去試這麼多廠家的設備和插件,所以只能使用開源免費默認的KVM,LVM,Openvswitch等,所以有關各種廠商的插件的知識點,本文沒有涉及。

image

 

好了,我已經退縮到不能再退縮的scope了,下面就進入Openstack的虛擬機創建之旅。

我學習知識採用貪心算法,遇到在哪個步驟先遇到某個知識點就研究,可能這個知識點在其他的模塊也有應用,到時候就發現這個知識點已經被遍歷過了,當然也沒有太過貪心,遇到過於繁複,過於生僻的,也當機立斷,進行剪枝。

一、Keystone

image

步驟1: 任何客戶端想要訪問任何服務,都需要先從keystone拿到Token

還記得原來那個短短的UUID的Token麼?例如"aef56cc3d1c9192b0257fba1a420fc37"

後來變成了一長串不知道是什麼的東東:

MIIDsAYJKoZIhvcNAQcCoIIDoTCCA50CAQExCTAHBgUrDgMCGjCCAokGCSqGSIb3DQEHAaCCAnoEggJ2ew0KICAgICJhY2Nlc3MiOiB7DQogICAgICAgICJtZXRhZGF0YSI6IHsNCiAgICAgICAgICAgIC4uLi5tZXRhZGF0YSBnb2VzIGhlcmUuLi4uDQogICAgICAgIH0sDQogICAgICAgICJzZXJ2aWNlQ2F0YWxvZyI6IFsNCiAgICAgICAgICAgIC4uLi5lbmRwb2ludHMgZ29lcyBoZXJlLi4uLg0KICAgICAgICBdLA0KICAgICAgICAidG9rZW4iOiB7DQogICAgICAgICAgICAiZXhwaXJlcyI6ICIyMDEzLTA1LTI2VDA4OjUyOjUzWiIsDQogICAgICAgICAgICAiaWQiOiAicGxhY2Vob2xkZXIiLA0KICAgICAgICAgICAgImlzc3VlZF9hdCI6ICIyMDEzLTA1LTI1VDE4OjU5OjMzLjg0MTgxMSIsDQogICAgICAgICAgICAidGVuYW50Ijogew0KICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6IG51bGwsDQogICAgICAgICAgICAgICAgImVuYWJsZWQiOiB0cnVlLA0KICAgICAgICAgICAgICAgICJpZCI6ICI5MjVjMjNlYWZlMWI0NzYzOTMzZTA4YTRjNDE0M2YwOCIsDQogICAgICAgICAgICAgICAgIm5hbWUiOiAidXNlciINCiAgICAgICAgICAgIH0NCiAgICAgICAgfSwNCiAgICAgICAgInVzZXIiOiB7DQogICAgICAgICAgICAuLi4udXNlcmRhdGEgZ29lcyBoZXJlLi4uLg0KICAgICAgICB9DQogICAgfQ0KfQ0KMYH/MIH8AgEBMFwwVzELMAkGA1UEBhMCVVMxDjAMBgNVBAgTBVVuc2V0MQ4wDAYDVQQHEwVVbnNldDEOMAwGA1UEChMFVW5zZXQxGDAWBgNVBAMTD3d3dy5leGFtcGxlLmNvbQIBATAHBgUrDgMCGjANBgkqhkiG9w0BAQEFAASBgEh2P5cHMwelQyzB4dZ0FAjtp5ep4Id1RRs7oiD1lYrkahJwfuakBK7OGTwx26C+0IPPAGLEnin9Bx5Vm4cst/0+COTEh6qZfJFCLUDj5b4EF7r0iosFscpnfCuc8jGMobyfApz/dZqJnsk4lt1ahlNTpXQeVFxNK/ydKL+tzEjg

這裏面是什麼,不可能是一般的亂碼吧。

於是看到了這篇文章

Understanding OpenStack Authentication: Keystone PKI (https://www.mirantis.com/blog/understanding-openstack-authentication-keystone-pki/)

[轉]Understanding OpenStack Authentication: Keystone PKI

才瞭解了這個過程

PKI token validation flow-1

看懂這個圖,如果沒有點信息安全課程的底子,還真不行。什麼各種CA, Certificate, Key,直接就暈了。

於是看了《Principles of Information Security,4ed》的第八章Cryptography,以及《Information Security Principle and Practice》纔有所了悟。

下面這篇博客也對相關的概念作了形象的描述

數字證書原理(http://blog.sina.com.cn/s/blog_44ee37cd01016r1h.html)

這些概念都是瞭解SSL和https的必須的,而且我們在部署Openstack的時候,所有的服務最好也部署成HTTPS的。

下面這兩篇文章會幫你更好的瞭解SSL

http://httpd.apache.org/docs/2.2/ssl/ssl_intro.html

http://www.codeproject.com/Articles/326574/An-Introduction-to-Mutual-SSL-Authentication

Mutual SSL Authentication - Click to enlarge image

 

要使用SSL,兩個必備的工具Openssl和certtool,其中Openssl比較常用,而certtool是用於配置libvirt遠程連接的官方推薦的工具。

對於Openssl,推薦下面的鏈接

http://pages.cs.wisc.edu/~zmiller/ca-howto/如果被牆屏蔽了可以訪問How To Setup a CA

Openssl的證書操作

 

對於certtool,推薦libvirt的官方文檔,講的非常的形象具體

http://wiki.libvirt.org/page/TLSSetup

keystone除了authentication的功能,還有authorization。

對於訪問控制Access Control,發現有多種http://en.wikipedia.org/wiki/Access_control,而Openstack採用的是Role Based Access Control RBAC。

其中在V2中採用的每個Service下面的policy.json文件,訪問控制是每個Service自己決策的。後來在V3中,除了policy.json文件,還可以將Policy在數據庫中創建,實現了keystone的統一管理。

推薦下面的文章

Customizing OpenStack RBAC policies

[轉] Customizing OpenStack RBAC policies

Mandatory Access Control (MAC)在Openstack中也有應用,就是對Libvirt對Host文件的訪問控制AppArmor。當你使用virsh命令進行操作的時候,如果發現自己是root,但是還沒有權限,八成就是它的原因了。

推薦http://ubuntuforums.org/showthread.php?t=1008906

[轉] Introduction to AppArmor

用戶管理也是Keystone的一大工作

在V2中,結構比較簡單,用一個三角形就可以明白

 image

Keystone V3中的概念就比較多了,也相對複雜,文檔較少,比較推薦下面的文章。

http://www.florentflament.com/blog/setting-keystone-v3-domains.html

[轉]Setting Keystone v3 domains

我也畫了一幅圖,來幫助理解這個過程。

Keystone v3 domains 應用場景

image

 

 

 

如果有人問我,看懂各個Service代碼的鑰匙是什麼,我必須說,是paste文件,看懂了這個文件,就很容易找到對應的入口代碼。

對於Paste,我推薦

WSGI and Paste

http://pythonpaste.org/deploy/

http://indico.cern.ch/event/44/session/9/#all其中Developing Applications with the Web Server Gateway Interface


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章