某方面是延續著前一篇文章的議題,在當時的工作經歷裡,VPS(virtual private server)主機也是公司的產品之一。而其具體的組成方式,是導入某個商務套件程式,藉此將 Linux KVM Hypervisor 伺服器打造成可對外販售 Windows 或 Linux 虛擬機(virtual machine,VM)、並且進行租戶管理的形式。
當作為一名新人工程師進入到一間經營許久的資訊公司,菜鳥屬性勢必是存在的,或多或少的差異而已。然而卻頗為驚訝地發現,至少就 QEMU/KVM 虛擬化這項領域而言,似乎是大家都一致地有些生疏,或者是沒有什麼人認真地關注它的細節。儘管公司的 VPS 產品服務也已經營運了數年,但實際上並沒有建立多少完善的知識體系。除了必須得自己從頭自學以前還未碰過的東西外,還必須試著解決一些累積的問題及懸案。
一件曾經的懸案是有非常少數的租戶,會偶然地出現 VPS 主機被自動關閉的情形。由於沒有人知道是什麼原因造成的,曾經採取過的處置措施也似乎未能真正解決問題。所以當時得到的指示,是監控那些有此狀況的 VPS 主機。然後在一旦狀況發生時,工程師就立即再把它啟動起來……這顯然不是正常的解決方案,於是 DR 花了點時間,重新釐清系統日誌所反映的訊息、與 libvirt 內設定值的關聯性,再進行實測。最終確認問題是來自於在我們給每個 VM 的預設設定中,都額外啟用了 hard_limit 這個參數,來規範 VM 的可用記憶體容量。然而 hard_limit 會在 VM 的記憶體使用量達到規範上限時,強制關閉該 VM,因而出現自動關閉的情形。於是找到真相後,向主管呈報,將該參數取消便就此順利結案。
其它針對 VPS 服務所做的問題改善,還包含了改進租戶擴充虛擬磁碟的方式。以往若租戶增購磁碟容量,工程師是簡單地給 VM 再加掛一顆新的磁碟,後續如何運用就是租戶得自己處理。之所以如此進行,或許部份因素是我們所使用的商務套件,其後台維護及管理功能並不是這麼地齊全。甚至有些選項看似存在,但實際上無作用,所以事實上許多需求還是得進入到 Linux Hypervisor 伺服器的命令行裡進行操作,也會因此增加工程師的作業負擔。然而 DR 個人則是傾向於,倘若租戶是希望擴充現有的磁碟容量,那麼儘管在操作程序上稍加繁雜,但仍是一個可以配合實現的事情。於是便建立相關的工作流程,即便是 VM 內的檔案系統容量擴充都可以協助處理。
事實上公司還有導入另一項產品服務,就用戶的角度而言,其作用基本上與 VPS 相同,都是雲端 VM;不過背後採容易擴容的分散式叢集架構,並且有著更加先進的管理及維護後台,因此維運的工程師較少需要手工地執行各種指令來處理問題。然而最終來說,該產品是與 VPS 共同存在,沒有出現其中一者被取代或取消的決策。
正如同許多雲端主機商都會遇到的處境,公司有時也會收到來自外部的資安投訴,顯示某個租戶的 VPS 主機可能遭到入侵,並且對外有惡意的連線行為。對此情形,以往工程師會採取的作法是直接將租戶的主機停權,當租戶收到通知並回應後,才會重新啟用讓租戶能夠進入主機處理問題。然而實際執行起來,發覺這並不是一個很好的作法,於是自己又研究了一陣。最終規劃出的新作法,是在 Hypervisor 伺服器上透過 iptables 防火牆層級的規則設定,切斷問題 VM 的網路,而非停用整個 VM。與此同時,租戶依然可以從 VPS 產品的網頁後台,以本機端的模式來操作主機並設法解決問題。也可以在經過協調及評估下,透過防火牆規則的放寬,部份地開通 VM 的連網能力。藉此讓租戶能夠更加便利地處理問題,或者是讓主機同時間依然保持一定的對外服務能力,而非徹底的中斷。
在處理可能的外部投訴及租戶違規情形時,除了租戶勢必得自行處理主機內部的問題外,當時 DR 還有規劃一些更加積極的改進作法,讓工程師能夠在不登入客戶主機的情況下,從 Hypervisor 層級實施一些調查手段來評估狀況,而不是完全被動地等著外部單位或租戶的進一步反饋。例如使用 tcpdump 或 iptables 日誌功能等方式,對 VM 做網路連線的監控;或者是以唯讀方式掛載執行中 VM 的虛擬映像分割區,來查看其內容。其中以後者的作法來說,曾經出現過一次罕見的插曲。因著如今已經想不起來的因素,在調查某個租戶的 VM 時,明明租戶選購的是 Linux VPS 方案,但檢視 VM 的映像檔分割表,卻整個都是 Windows 的 NTFS 檔案系統。一瞬間還以為是自己眼花或手殘,於是再檢查了一下,確認這個是起初安裝了 Linux 作業系統的 VM,如今卻變成是一套徹底的 Windows 系統。上網一查,還真的存在相關的自動腳本程式,協助用戶對 VPS 做 Linux→Windows 原地重灌的乾坤大轉換。
由於公司有些最低廉的 VPS 方案,是僅提供 Linux 發行版做選擇;若想要使用 Windows,就得選擇規格(及價格)再往上調的方案。所以網路上會出現這種自動腳本,其存在的原因還算是能夠理解。不過在發掘出此一案例、並經過一點思索後,公司便將此類情形列為新的違規行為,對該租戶終止服務,而 DR 也連帶地規劃了 VM 作業系統是否有被違規異動的監控機制。
然而倘若容 DR 最後再稍微偏離主題一點,舉出印象中可能是最為厲害的租戶省錢手段。那麼回想起來,則不是發生在 VPS 上,而是在虛擬主機上。曾意外發現有虛擬主機的租戶,同時存放相當多網站在單一帳號裡的方式,是將不同的網域名稱以別名的形式設定在同一個網頁家目錄中。再使用自訂的 .htaccess 規則,根據網域請求,導向至不同的子目錄,以呈現出不同的網站內容。而不是像一般正規的作法,購買再高階一點的方案,簡單地為不同的網域名稱,指定個別的家目錄在 Apache 的 VirtualHost 中。如此罕見又極端的省錢手法,雖然當下是前所未聞,不過至少以公司的認知來說是沒有違規問題,是用戶自己的利弊選擇。