別以為真懂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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM