自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

盤點Openstack那些頑固bug

開發(fā) 開發(fā)工具 OpenStack
Openstack支持虛擬機軟刪除功能,用戶可以設(shè)置虛擬機的保留時間。當(dāng)用戶刪除虛擬機時,不會真的立即刪除虛擬機,而僅僅是做一個刪除標(biāo)記,保留時長為設(shè)置的保留時間,當(dāng)超過保留時間時,系統(tǒng)才真正清理虛擬機。該功能能夠使用戶不慎刪除虛擬機能立即撤回操作,避免數(shù)據(jù)丟失。

[[189111]]

本文將盤點Openstack中那些頑固bug,這些bug至少存活了一年。

1. 設(shè)置quota時沒有檢查租戶是否存在

當(dāng)設(shè)置quota時需要指定租戶project/tenant,但是目前nova和cinder都不會對租戶是否存在進(jìn)行檢查,當(dāng)該租戶的quota記錄不存在時就創(chuàng)建一個新的quota記錄。比如:

  1. cinder quota-update --volumes 10 any-string 

以上無論你輸入任何字符串,都會返回200 OK,即使租戶并不存在。

由于租戶配額管理只有admin角色有權(quán)限,因此必須假定:

And as an admin (trusted user), we expect them to not break things.

即管理員是可信任的,假定你不會把事情搞砸。

當(dāng)然作為管理員惡意攻擊不太可能,不過很多管理員都可能會把租戶輸成租戶名,而注意該API只支持租戶id,你輸入租戶名不會報錯,但不會生效。

該bug難以解決的原因是目前keystone尚無實現(xiàn)檢查租戶是否存在的接口。

針對該bug已經(jīng)提交成一個獨立的BP,validate-project-with-keystone,并將在下個版本Ocata實現(xiàn)。

使用python-openstackclient會對租戶進(jìn)行檢查,設(shè)置quota時可以考慮使用該client取代。

2. 使用統(tǒng)一分布式存儲時計算磁盤空間錯誤

nova hypervisor-stats命令用于獲取整個Openstack集群可用的物理資源總量,統(tǒng)計包括cpu、內(nèi)存和磁盤三種資源,實現(xiàn)方法是由各個計算節(jié)點的resource_tracker統(tǒng)計該節(jié)點的資源量,并定期更新到數(shù)據(jù)庫中。nova調(diào)用hypervisor-stats時即對所有計算節(jié)點的資源求總和。對于cpu以及內(nèi)存完全沒有問題,但如果使用分布式共享存儲作為后端存儲時,計算磁盤空間就是錯誤的,因為每個計算節(jié)點看到的資源都是分布式存儲的總資源量大小。比如使用ceph做后端存儲,每個計算節(jié)點看到的都是ceph df看到可用空間的大小,在計算資源總和時不應(yīng)該再相加,否則就相當(dāng)于多算了N倍。因此如果有N個計算節(jié)點,相當(dāng)于對資源計算多算了N倍。

3. 軟刪除存在DOS漏洞。

該bug是一個安全漏洞,不過已于今年1月公開。

Openstack支持虛擬機軟刪除功能,用戶可以設(shè)置虛擬機的保留時間。當(dāng)用戶刪除虛擬機時,不會真的立即刪除虛擬機,而僅僅是做一個刪除標(biāo)記,保留時長為設(shè)置的保留時間,當(dāng)超過保留時間時,系統(tǒng)才真正清理虛擬機。該功能能夠使用戶不慎刪除虛擬機能立即撤回操作,避免數(shù)據(jù)丟失。

換句話說,虛擬機軟刪除時,虛擬機的資源并沒有釋放,并且不占用戶配額。惡意用戶可以不斷創(chuàng)建虛擬機不斷刪除虛擬機,直到耗盡所有的物理資源。

Michael Still說:

This is definitely be design. That said I agree there is a DoS possible here.

It seems to me there is a tweak we could make where if a hypervisor becomes space constrained we delete earlier than the configured time, but that might be a surprise for administrators using a “fill first” scheduling methodology.

因此這個bug至今尚未修復(fù)。

4.console.log文件可能占據(jù)整個磁盤空間

console log保存虛擬機啟動時的日志,用戶可以使用nova console-log命令查看,KVM會把所有的標(biāo)準(zhǔn)輸出打印到console.log中,并且沒有大小限制,如果用戶無休止地發(fā)送數(shù)據(jù)到stdout中,console.log文件將可能占據(jù)整個磁盤空間。

該bug在不斷修復(fù)過程中,至今沒有徹底修復(fù)。

5. Nova和cinder數(shù)據(jù)卷掛載狀態(tài)不一致

bug地址: Nova and Cinder get desynced on volume attachments report時間: 2015-09-23

該bug很早就已經(jīng)存在,只是到2015年才有人report。 通常卸載volume卷包括如下三個步驟:

  • 1 調(diào)用libvirt卸載磁盤設(shè)備
  • 2 通知cinder
  • 3 刪除BDM(block device mapping)記錄

如果第一步失敗,此時虛擬機處于error狀態(tài),但volume掛載狀況和cinder仍然是同步的,只需要執(zhí)行reset-state回滾即可。

如果第二步失敗,此時nova認(rèn)為volume已經(jīng)卸載了,但cinder沒有接收到通知,仍然認(rèn)為volume是被掛載的。此時nova不能再執(zhí)行detach操作,因為volume已經(jīng)不存在了。但cinder也不能再執(zhí)行掛載操作,因為volume還處于in-use狀態(tài)。修復(fù)辦法是使用cinder reset-stat或者只能修改數(shù)據(jù)庫了。

【本文是51CTO專欄作者“付廣平”的原創(chuàng)文章,如需轉(zhuǎn)載請通過51CTO獲得聯(lián)系】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2012-03-26 10:20:16

Windows 8 RBug

2018-01-30 09:19:46

程序員技能Bug

2011-11-08 09:58:01

OpenStack

2021-12-06 09:36:38

網(wǎng)絡(luò)攻擊黑客網(wǎng)絡(luò)安全

2017-10-21 16:12:01

Facebook

2021-04-22 05:43:22

索引設(shè)計SET

2021-08-26 10:25:04

JavaScript進(jìn)階操作 前端

2021-08-03 10:01:37

JavaScript事件方法

2023-02-15 09:00:49

2021-04-07 10:02:51

Python字典Python基礎(chǔ)

2021-04-28 10:01:06

Python基礎(chǔ)項目

2022-11-28 11:45:30

Go應(yīng)用場景

2021-08-30 10:25:48

JavaScript進(jìn)階操作前端

2013-08-28 10:18:48

2024-08-02 15:04:14

JavaScript服務(wù)器

2021-09-04 07:56:44

Pythonos模塊

2024-06-25 12:52:40

JavaScript開發(fā)

2023-01-31 16:35:34

JavaScript測試框架

2012-12-20 12:24:33

2012-12-28 10:26:08

山寨App抄襲
點贊
收藏

51CTO技術(shù)棧公眾號