OpenStack如何管理項(xiàng)目和用戶
一個(gè)OpenStack云沒(méi)有用戶的話,它并沒(méi)有多大的價(jià)值。在本文中,將介紹如何管理用戶、項(xiàng)目和配額。
項(xiàng)目或租戶?
在OpenStack用戶界面和一些文檔中,有時(shí)候你會(huì)看到“項(xiàng)目”是指一組用戶,而有時(shí)候你會(huì)也看到用來(lái)替代“租戶”,這兩種術(shù)語(yǔ)是可以通用的。
這背后的歷史原因是因?yàn)樽畛鮋penStack計(jì)算服務(wù)(nova)有著自己的身份驗(yàn)證系統(tǒng),并使用的術(shù)語(yǔ)“項(xiàng)目”。當(dāng)認(rèn)證系統(tǒng)獨(dú)立成為OpenStack身份識(shí)別服務(wù)(Keystone)項(xiàng)目后,新項(xiàng)目中使用的術(shù)語(yǔ)“租戶”代指一個(gè)用戶組。由于這一問(wèn)題,一些OpenStack工具是指“項(xiàng)目”,有些是指“租戶”。
在本手冊(cè)中,我們將采用術(shù)語(yǔ)“項(xiàng)目”,除非我們?cè)谝恍┦纠ぞ咧惺褂眯g(shù)語(yǔ)“租戶”。
管理項(xiàng)目
一個(gè)用戶必須至少屬于一個(gè)項(xiàng)目,也可以屬于多個(gè)項(xiàng)目。因此,您應(yīng)該至少添加一個(gè)項(xiàng)目,然后再添加用戶。
添加項(xiàng)目
通過(guò)儀表盤(pán)來(lái)創(chuàng)建一個(gè)項(xiàng)目:
- 用管理員用戶登錄。
- 在左側(cè)導(dǎo)航欄中選擇“項(xiàng)目”按鈕。
- 在右上角,點(diǎn)擊“創(chuàng)建項(xiàng)目”按鈕。
這將會(huì)彈出一個(gè)對(duì)話框,有項(xiàng)目名稱(chēng)和一個(gè)可選的描述,在底部有一個(gè)復(fù)選框來(lái)設(shè)置這個(gè)項(xiàng)目的狀態(tài),默認(rèn)是開(kāi)啟的.
從上面可以看到,也可以添加項(xiàng)目成員和調(diào)整項(xiàng)目的配額。我們?cè)谟懻撨^(guò)這些后在做修改,當(dāng)然你也可以一次性處理完上面的操作。
通過(guò)命令行創(chuàng)建一個(gè)項(xiàng)目(CLI):
通過(guò)命令行添加一個(gè)項(xiàng)目,你需要使用keystone工具,使用”租戶”代替”項(xiàng)目”:
- # keystone tenant-create --name=demo
這將創(chuàng)建一個(gè)新項(xiàng)目命名為“demo”??梢杂?–description <tenant-description> 參數(shù)添加一些描述,這是非常有用的。也可以用 –enable false 參數(shù)創(chuàng)建一個(gè)禁用狀態(tài)的租戶,不指定是默認(rèn)開(kāi)啟狀態(tài)。
配額
OpenStack提供了大量配額選項(xiàng),并都是針對(duì)租戶的配額(而不是用戶)。作為一個(gè)管理用戶在儀表盤(pán)中你可以看到(但不能編輯)一個(gè)”配額”導(dǎo)航欄的默認(rèn)配額。這些默認(rèn)項(xiàng)目配額都是在云控制器上 nova.conf 里默認(rèn)的。
如果你不更改配額限制,系統(tǒng)會(huì)使用以下默認(rèn)配額。
nova.conf文件里配額配置選項(xiàng)的描述
選項(xiàng)默認(rèn)值 | (類(lèi)型) 描述 |
---|---|
quota_cores=20 | (IntOpt) 允許租戶使用的CPU核數(shù) |
quota_floating_ips=10 | (IntOpt) 允許租戶使用的浮動(dòng)IP數(shù) |
quota_gigabytes=1000 | (IntOpt) 設(shè)置租戶的網(wǎng)絡(luò)帶寬 |
quota_injected_file_content_bytes=10240 | (IntOpt) 允許注入文件的字節(jié)數(shù) |
quota_injected_file_path_bytes=255 | (IntOpt) 允許注入文件路徑的字節(jié)數(shù) |
quota_injected_files=5 | (IntOpt) 允許注入文件的數(shù)量 |
quota_instances=10 | (IntOpt) 允許租戶創(chuàng)建實(shí)例的數(shù)量 |
quota_key_pairs=100 | (IntOpt) 允許每個(gè)用戶的密鑰對(duì)數(shù)量 |
quota_metadata_items=128 | (IntOpt) 允許每個(gè)實(shí)例的元數(shù)據(jù)項(xiàng)數(shù)量 |
quota_ram=51200 | (IntOpt) 允許租戶使用的內(nèi)存大小 |
quota_security_group_rules=20 | (IntOpt) 每個(gè)安全組中規(guī)則的數(shù)量 |
quota_security_groups=10 | (IntOpt) 每個(gè)租戶創(chuàng)建安全組的數(shù)量 |
quota_volumes=10 | (IntOpt) 每個(gè)租戶使用邏輯卷的數(shù)量 |
其它配置選項(xiàng)(http://docs.openstack.org/folsom/openstack-compute/admin/content/list-of-compute-config-options.html)
最簡(jiǎn)單的方式來(lái)改變默認(rèn)的項(xiàng)目配額就是在你的云控制器上編輯 nova.conf 文件。配額是由 nova-schedler 服務(wù)執(zhí)行,所以你一旦改變默認(rèn)配額選項(xiàng),你必須重新啟動(dòng)該服務(wù)。
通過(guò)儀表盤(pán)來(lái)查看和編輯個(gè)別項(xiàng)目的配額:
- 使用“項(xiàng)目”導(dǎo)航按鈕鏈接獲得到您現(xiàn)有項(xiàng)目的列表。
- 找到要修改的項(xiàng)目并從下拉菜單中選擇“Modify Quotas”,修改相應(yīng)的配額,最后點(diǎn)擊“Save”完成修改。
通過(guò)命令行方式查看和編輯個(gè)別項(xiàng)目的配額,請(qǐng)按照下列步驟操作:你可以在命令行方式訪問(wèn)和修改配額,但這有點(diǎn)復(fù)雜。這是通過(guò)使用 keystone 來(lái)獲取租戶的ID,然后再用 nova-manage 查看。
1. 要列出一個(gè)項(xiàng)目的配額,必須要先使用 keystone 客戶端工具找到它的ID:
- # keystone tenant-list | grep <tenant-name>
98333a1a28e746fa8c629c83a818ad57 | <tenant-name> | True | |
2. 回想一下,keystone 客戶端工具使用“租戶”, nova 客戶端工具使用“項(xiàng)目”為同一個(gè)概念。為了查看項(xiàng)目的配額,我們必須使用上面例子中獲取的ID:98333a1a28e746fa8c629c83a818ad57:
- # nova-manage project quota 98333a1a28e746fa8c629c83a818ad57
metadata_items: 128
volumes: 10 gigabytes: 1000 ram: 6291456 security_group_rules: 20 instances: 1024 security_groups: 10 injected_file_content_bytes: 10240 floating_ips: 10 injected_files: 5 cores: 2048 |
注意:nova-manage project quota 后面必須指定ID,輸入項(xiàng)目名稱(chēng)會(huì)報(bào)錯(cuò)。
現(xiàn)在給 floating_ips 數(shù)量提高至20,我們可以用 –key 和 –value 來(lái)增加 ip 數(shù):
- # nova-manage project quota 98333a1a28e746fa8c629c83a818ad57 --key floating_ips --value 20
metadata_items: 128
volumes: 10 gigabytes: 1000 ram: 6291456 security_group_rules: 20 instances: 1024 security_groups: 10 injected_file_content_bytes: 10240 floating_ips: 20 injected_files: 5 cores: 2048 |
用戶管理
在命令行用戶管理用戶非常不方便。需要多條命令才能完成一個(gè)任務(wù),并且要是用UUID,而不是象征性的名字。在實(shí)踐中,人們通常不會(huì)使用命令行管理用戶。幸運(yùn)的是,OpenStack 儀表盤(pán)提供了一個(gè)合理的接口。此外,許多網(wǎng)站編寫(xiě)的自定義腳本也可能會(huì)適合您。
創(chuàng)建用戶
要?jiǎng)?chuàng)建一個(gè)新的用戶,您將需要以下信息:
- 用戶名
- 郵箱
- 密碼
- 所屬主要項(xiàng)目
- 角色
用戶名和電子郵件都是不言而喻的,雖然你的網(wǎng)站可能有本地習(xí)慣,但是這樣便于觀察。設(shè)置和更改密碼的認(rèn)證服務(wù),需要管理員權(quán)限。在 Folsom 版本中,用戶不能更改自己的密碼。創(chuàng)建完用戶和密碼后,必須牢記分配的用戶名和密碼。項(xiàng)目必須在個(gè)創(chuàng)建用戶之前存在。角色就是一個(gè)”會(huì)員”,可以直接使用:
- “member”: 一個(gè)典型的用戶。
- “admin”: 超級(jí)管理員用戶,在所有項(xiàng)目中,你應(yīng)該謹(jǐn)慎使用它。
它可以定義其它角色,但很少這樣做。
一旦你收集了這些信息,創(chuàng)建用戶只是在儀表盤(pán)上的一個(gè)web表單形式,類(lèi)似我們所見(jiàn)過(guò)的,可以發(fā)現(xiàn)”用戶”鏈接在“Admin”導(dǎo)航欄上,然后點(diǎn)擊右上角“創(chuàng)建用戶”按鈕。
修改用戶也從“Users”的頁(yè)面。如果你有大量的用戶,這個(gè)頁(yè)面會(huì)很擁擠。在頁(yè)面的頂部有”Filter”可以用來(lái)搜索相關(guān)用戶列表,與創(chuàng)建用戶對(duì)話框相似,可以通過(guò)”Edit”或下拉菜單中的動(dòng)作來(lái)修改用戶信息。
關(guān)聯(lián)用戶到項(xiàng)目
許多網(wǎng)站運(yùn)行與用戶相關(guān)的只有一個(gè)項(xiàng)目。這是一種較為保守和簡(jiǎn)單的管理用戶選擇。在管理上,一個(gè)用戶報(bào)告出現(xiàn)很明顯問(wèn)題的一個(gè)實(shí)例或配額,如果它們?cè)谝粋€(gè)項(xiàng)目中,用戶不必?fù)?dān)心它們的行為是哪個(gè)項(xiàng)目。然而,需要注意在默認(rèn)情況下,任何用戶都可以影響到這個(gè)項(xiàng)目下其他用戶資源的使用額度。也可以讓用戶關(guān)聯(lián)多個(gè)項(xiàng)目,這樣的組織比較有意義。
在儀表盤(pán)“項(xiàng)目”頁(yè)面可以關(guān)聯(lián)現(xiàn)有的用戶到一個(gè)額外的項(xiàng)目或刪除它們從一個(gè)舊的項(xiàng)目,通過(guò)選擇”項(xiàng)目”頁(yè)面的指示板“修改用戶”:
在這個(gè)視圖中,你可以做許多有用和危險(xiǎn)的事情。
在標(biāo)題為“All Users”表格中,將會(huì)列出這個(gè)項(xiàng)目所有的用戶。用戶過(guò)多,顯示可能會(huì)很長(zhǎng),在頂部有過(guò)濾器可以限制輸入用戶名來(lái)搜索。
在這里,點(diǎn)擊”+”將添加一個(gè)用戶到項(xiàng)目,然后點(diǎn)擊“-“將刪除它們。
這里存在危險(xiǎn)性,就是可能會(huì)改變成員的角色.在“Project Members”列表中的用戶名后面的下拉列表中,一般情況下,這個(gè)值應(yīng)該被設(shè)置為“Member”,這個(gè)例子意在說(shuō)明,管理員用戶這個(gè)值是“admin”。 它是非常重要的,“admin”是全局用戶,而不是每個(gè)項(xiàng)目,因此授予用戶admin角色時(shí)候就等于賦予該用戶在任何項(xiàng)目里管理整個(gè)云的權(quán)利。
按照慣例,典型的應(yīng)用是在一個(gè)單一的項(xiàng)目里,該項(xiàng)目創(chuàng)建默認(rèn)設(shè)置云管理用戶。如果您的管理用戶使用云資源來(lái)啟動(dòng)和管理,強(qiáng)烈建議您使用單獨(dú)的用戶賬戶來(lái)管理訪問(wèn)權(quán)限和云正常運(yùn)作,它們?cè)诓煌捻?xiàng)目里。
自定義授權(quán)
缺省的授權(quán)設(shè)置只允許管理用戶創(chuàng)建代表不用的項(xiàng)目資源.OpenStack處理兩種類(lèi)型的授權(quán)策略:
- 操作為主:操作指定訪問(wèn)特定的操作標(biāo)準(zhǔn),可能于特定屬性的控制權(quán)。
- 資源型:對(duì)特定資源的訪問(wèn)是否可能授權(quán)或根據(jù)配置的資源(目前僅適用于網(wǎng)絡(luò)資源)的權(quán)限。從部署到實(shí)際OpenStack的服務(wù)執(zhí)行不同的授權(quán)策略部署。
策略引擎讀取policy.json文件的條目。這個(gè)文件的實(shí)際位置可能會(huì)有所不同,它通常是在/etc/nova/policy.json.在系統(tǒng)運(yùn)行時(shí),您可以更新條目,而不必重新啟動(dòng)服務(wù)。目前更新這些的唯一方法就是編輯策略文件。
OpenStack的服務(wù)的策略引擎直接匹配策略,一個(gè)規(guī)則表明了這些策略的元素。例如,在一個(gè)compute:create:[[“rule:admin_or_owner”]]聲明,這項(xiàng)策略是compute:create并且規(guī)則是admin_or_owner。
策略是來(lái)誘發(fā)OpenStack策略引擎只要其中一個(gè)匹配一個(gè)API操作或特定OpenStack屬性被使用給一個(gè)特定的操作。例如,在實(shí)例上,compute:create:策略用戶每次發(fā)送一個(gè)POST /v2/{tenant_id}服務(wù)請(qǐng)求到OpenStack Compute API服務(wù)器。策略也可以與特定的API進(jìn)行擴(kuò)展。例如,如果一個(gè)用戶需要一個(gè)compute_extension:rescue屬性由提供程序定義的擴(kuò)展屬性觸發(fā)操作規(guī)則測(cè)試。
一個(gè)授權(quán)策略可以由一個(gè)或多個(gè)規(guī)則組成。如果有多個(gè)規(guī)則指定,評(píng)估政策是否成功在于任何規(guī)則評(píng)估成功,如果一個(gè)API操作匹配多個(gè)策略,然后所有的策略必須評(píng)估成功。同時(shí),授權(quán)規(guī)則是遞歸的。一旦一個(gè)規(guī)則匹配,規(guī)則(s)可以決定另一個(gè)規(guī)則,直到達(dá)到最后一個(gè)規(guī)則。這些定義的規(guī)則:
- 基于角色的規(guī)則:成功提交請(qǐng)求的用戶具有指定的角色。比如管理員提交一個(gè)實(shí)例“role:admin”是成功的。
- 字段規(guī)則:如果字段指定的資源在當(dāng)前請(qǐng)求匹配一個(gè)特定的值就評(píng)估成功。例如“field:networks:shared=True”屬性共享的網(wǎng)絡(luò)資源被設(shè)置為T(mén)rue。
- 通用規(guī)則:比較屬性與用戶的安全憑據(jù)中提取的一種屬性的資源和評(píng)估成果比較成功的。比如“tenant_id:%(tenant_id)s”是成功的,如果租戶標(biāo)識(shí)符在資源里等于租戶標(biāo)識(shí)用戶提交請(qǐng)求。
以下是nova里一段默認(rèn)policy.json文件的內(nèi)容:
{
“context_is_admin”: [[“role:admin”]], “admin_or_owner”: [[“is_admin:True”], [“project_id:%(project_id)s”]], [1] “default”: [[“rule:admin_or_owner”]], [2] “compute:create”: [], “compute:create:attach_network”: [], “compute:create:attach_volume”: [], “compute:get_all”: [], “admin_api”: [[“is_admin:True”]], “compute_extension:accounts”: [[“rule:admin_api”]], “compute_extension:admin_actions”: [[“rule:admin_api”]], “compute_extension:admin_actions:pause”: [[“rule:admin_or_owner”]], “compute_extension:admin_actions:unpause”: [[“rule:admin_or_owner”]], “compute_extension:admin_actions:suspend”: [[“rule:admin_or_owner”]], “compute_extension:admin_actions:resume”: [[“rule:admin_or_owner”]], ... “compute_extension:admin_actions:migrate”: [[“rule:admin_api”]], “compute_extension:aggregates”: [[“rule:admin_api”]], “compute_extension:certificates”: [], “compute_extension:cloudpipe”: [[“rule:admin_api”]], ... “compute_extension:flavorextraspecs”: [], “compute_extension:flavormanage”: [[“rule:admin_api”]], [3] } |
[1] 成功的計(jì)算規(guī)則,如果當(dāng)前用戶是管理員或所有者的請(qǐng)求中指定的資源(承租人標(biāo)識(shí)符相等)。
[2] 顯示默認(rèn)的策略,始終是評(píng)估API操作不匹配的策略的policy.json。
[3] 顯示一個(gè)策略,限制管理員使用管理API的能力。
在某些情況下,某些操作應(yīng)限制只有管理員才能執(zhí)行。因此,作為進(jìn)一步的例子,讓我們考慮何樣的策略文件進(jìn)行修改的情況下,我們可以讓用戶創(chuàng)建自己的策略配置: “compute_extension:flavormanage”: [],
有問(wèn)題的用戶(某個(gè)用戶干擾了其它用戶)
在很多情況下,當(dāng)用戶在你的云中會(huì)破壞其他用戶,有時(shí)故意和惡意,其它可能會(huì)意外。了解情況,可以讓你做出更好的決定如何處理。
例如:A組的用戶有非常計(jì)算密集型任務(wù)的情況下,利用大量的計(jì)算資源。這時(shí)負(fù)載的計(jì)算節(jié)點(diǎn)上,會(huì)影響其他用戶。在這種情況下,請(qǐng)查看您的用戶使用的情況。對(duì)這種情況,高密度計(jì)算方案是常見(jiàn)的,可以把您的云主機(jī)聚合或應(yīng)適當(dāng)?shù)囊?guī)劃隔離。
另一個(gè)例子是一個(gè)用戶消耗了非常大的帶寬量。再次,關(guān)鍵是要了解用戶在做什么。如果他們自然是需要大量的帶寬,您可能需要限制其傳輸速率,以不影響其他用戶或?qū)⑺鼈円苿?dòng)到一個(gè)區(qū)域更多的可用帶寬里。另一方面,也許用戶的實(shí)例被黑客入侵,并發(fā)動(dòng)DDOS攻擊的成為僵尸網(wǎng)絡(luò)的一部分。這個(gè)問(wèn)題的解決方案是一樣的,如果網(wǎng)絡(luò)上的任何其他的服務(wù)器已經(jīng)被黑客入侵。聯(lián)系用戶,使他們有時(shí)間作出反應(yīng)。如果他們不回應(yīng),關(guān)閉實(shí)例。
最后一個(gè)例子是,如果一個(gè)用戶反復(fù)使用云資源。聯(lián)系用戶,并了解他們正在嘗試做的。也許他們不明白他們?cè)谧鍪裁词遣贿m當(dāng)?shù)幕蚩赡苡袉?wèn)題的資源,他們正在試圖訪問(wèn),是造成他們請(qǐng)求隊(duì)列或滯后的。
系統(tǒng)管理常常被忽視的一個(gè)關(guān)鍵因素是,最終用戶是系統(tǒng)管理員存在的原因。要了解用戶他們所要做的事情,看看您的環(huán)境可以更好地幫助他們實(shí)現(xiàn)自己的目標(biāo)。