專訪安全容器 Kata 專案創始人王旭:開源是一件向死而生的事情

老王發表於2019-07-04

6 月 25 日,我代表 Linux 中國社群團隊參加了本次 KubeCon 2019(上海)峰會,期間有幸和安全容器 runV 的創始人王旭做了一番長談,就雲原生技術、安全容器、開源與初創企業等話題進行了深入溝通。現將這些話題整理其精要分享給大家。

網際網路技術發展速度之快是所有從業者甚至非從業者都能感受到的。尤記得在世紀之交時,那時候網際網路剛剛在中國開始向民用普及,不說支撐大規模的網站訪問量的相關技術,就連 Linux、負載均衡甚至都沒有被普遍使用。而在二十年之後,雲端計算已經大行其道,當今的技術人員已經言必稱虛擬化、容器和 Serverless,就連剛剛準備入行網際網路運維行業的新人們都已經從最初覺得考個 Linux 認證就夠了到開始問詢 Kubernetes 培訓哪家強了。

從一屆屆 LC3、DockerCon 到 KubeCon,蓬勃發展的雲端計算與容器化似乎已經稱霸了網際網路領域。這次我帶隊參加了 6 月 24 ~ 26 日的 KubeCon 大會,對此感受尤為深刻。事實上,這次在上海舉辦的 KubeCon 2019 距離上次在同一地點舉辦的同一會議才僅僅過去半年,但是我們依舊在這次大會上看到了層出不窮的大量新技術、新動態。

雲與容器的結合,引爆了這一切。

作為容器領域的資深專家,讓我們來看看王旭是如何看待容器和雲原生領域當前的發展態勢的,以及作為這個領域的一家初創技術企業的創始人,他是如何投身到這個領域的,開源又在其間起到了什麼作用。

專訪安全容器 Kata 專案創始人王旭:開源是一件向死而生的事情

王旭,安全容器專案 runV 的創始人,現已加入螞蟻金服。

創立於 2015 年的 runV 專案已於 2017 年和另外一個來自英特爾的 Clear 容器專案合併為 Kata 容器專案,並由 OpenStack 基金會(OSF)進行管理,它與來自谷歌的 gVisor 專案並稱為目前兩大安全容器技術。

開源與初創

要麼就去加強容器,要不就是引入別的安全技術來讓它像容器一樣。

臨近 2015 年,Docker 逐漸被業界主流所接受,網際網路技術已經有一個比較明顯的發展趨勢:第一是雲,第二是容器。而云加上容器一定會產生隔離性的需求,這應該說是王旭和他的聯合創始人趙鵬做安全容器最早的一個思路:要麼就去加強容器,要不就是引入別的安全技術來讓它像容器一樣。這就是 runV 這個專案想法的起源。

runV 釋出的同一個星期,英特爾Clear 容器也釋出了。2016 年 8 月份,在西雅圖的 LinuxCon 上,王旭和 Clear 團隊見面交流,雙方在一些細節上面展開合作。在 2017 年 9 月份一個會議上,英特爾軟體副總裁、開源技術中心總經理 Imad Sousou 提出專案合併,然後放到基金會裡管理。當時大家都覺得這是很好的一個思路。

專訪安全容器 Kata 專案創始人王旭:開源是一件向死而生的事情

對於 runV 和 Clear 來說,避免了重複開發以及花費精力在如何說明兩者的不同上,同時合併之後可以共同推動發展一個社群,一起去尋找更多的使用者。同時,兩者合併還有更多的意義。 

Kata 容器的意義

Kata 容器最大的意義在於推動了社群的發展。

王旭認為,Kata 容器最大的意義在於推動了社群的發展。在 2018 年之前剛開始做 Kata 容器的時候,王旭他們需要很多的附加程式來模擬 runC 容器的行為,因為 runC 是事實標準,你需要相容它。但是當 Kata 和谷歌的 gVisor 都出來之後,上游社群就注意到這一點,開始重視,於是推出新的介面,可以語義明確地直接去對話,而不需要再去模擬 runC 的底層行為,把原來的 2N+2 個輔助程式變成了一個程式。另外,既然有了不同的容器執行時,是不是可以在不同的場景下讓它們轉到不同容器執行時環境上去?於是就有了“執行時類runtime class”這樣的結構。Kubernetes 社群做了很多這樣改進,它們也在逐步變成事實標準。這樣,一個小專案的引入推動了包括從使用者到上下游的整個社群相關軟體的變動。

安全容器也讓更多的業務使用容器變得可能。

同時,安全容器也讓更多的業務使用容器變得可能。王旭在螞蟻金服做面向金融的一些服務往雲原生方向發展,需要非常嚴格的安全標準,這正好和 Kata 這些安全容器專案結合在一起。

專訪安全容器 Kata 專案創始人王旭:開源是一件向死而生的事情

增強安全性不可避免的會帶來一些會效能或易用性的取捨。王旭他們的做法是,在 Kata 裡面增加了一個隔離層,減少使用者需要考慮的事情。舉個 Docker 的例子,Docker 映象的開發者和管理員往往不是同一個人,對於管理員來說給出的許可權越少越安全,但是對於開發者來說的話,尤其開發和除錯的過程中,許可權的變少會讓開發和除錯變得非常困難。對於開發者來說,不能完全理解管理員要做的事情,所以你就會見到很多的 Docker 映象都是要所有許可權的,因為它自己也不知道需要什麼許可權;此外還有一些動態的情況,很難先驗地用程式去完全斷定它需要的許可權,開發者並不太不確定到底使用了哪些能力。在這個情況下我們做的事情就是把能力整體限制到沙盒裡面。在沙盒裡面是完整的能力,但是實際上沙盒本身訪問不到外層的系統能力,這樣對應用是無感知的,作業系統就變得更安全了。確實,對於系統來說安全性和便利性是一對矛盾,你很難在同一個層面上把這個問題完全解決掉。

現在有了“執行時類”,可以指定是否需要使用安全容器。Kubernetes 社群給大家提供 了一個機制,使用者可以選用或者不用安全容器,它可以是全域性的配置,也可以是 pod 級別的配置。對安全性不太關鍵的,比如說訪問一些不太敏感資訊的,可以在安全性上折中一點,可以讓效能更好一些。

容器的發展

從早期的 Cgroup 開始,到 LXD/LXC 這樣的容器技術的出現,再到 Docker 的的誕生,一下子點燃了整個容器技術生態,緊接著在容器編排系統出現後,並發展到現今 Kubernetes 成為了事實標準。容器領域一直在快速發展。王旭的看法又是怎樣的呢?

容器領域正在逐漸往上層發展。

他認為,容器領域正在逐漸往上層發展。網際網路技術本身一開始是在架構層面、在底層發展,但是從 Docker 開始興起時,給大家的感受就是減少了對底層環境的考慮,用完整的環境把應用包裝起來變成容器,讓它可以隨地隨地執行。不需要操心執行在什麼樣的作業系統裡,把作業系統這一層幹掉,或者說把它變成很窄的一層。

以發行版為例。Linux伺服器發行版的核心工作有兩件:一是怎麼把這個系統安裝上;另一個是怎麼去儘量平滑管理和升級軟體系統。所有的事情其實都是在圍繞這兩件事情。最初出現了 RPM、APT 這些包管理系統,後來是通過 Chef、Puppet、Ansible 這類配置管理系統自動化的大規模部署,再到現在的 Docker、Kubernetes,一它們都是在做軟體管理的事情。原來是作業系統在做這件事情,現在是 Kubernetes 在充當作業系統的位置;對雲服務來說的話,這就是無伺服器模式。2014 年 AWS 在拉斯維加斯的 re:Invent 大會發布 Lambda 的時候,得到業界非常大的關注。從 Lambda 開始,每個雲廠商都逐漸有了自己的無伺服器服務。所以他覺得未來的發展方向,應該是向這個方向的。

除此之外,像現在中介軟體、服務網格也都是這樣一個目的,儘量的把應用要做的事情剝離出來,和應用無關的事情全都抽象出來放到底層。

對應用開發者和使用者來說,可以不用關心底層是什麼架構、怎麼伸縮的,只需要知道到我需要什麼服務,只要定義應用,定義 Kubernetes 配置,由它統一管理、自動伸縮和排程就好。基礎設施這一層會越來越向一些少數的雲廠商集中,而大家更多的精力是幫助開發者做事情,集中精力在那些業務、智慧等邏輯部分。

金融與雲原生

加入螞蟻金服之後,王旭致力於將安全容器技術落地到金融級雲原生的場景下。由於金融領域的特殊性,雲原生實踐也需要有相應的變化。

要保證安全性,不僅僅滿足應用的,也要滿足監管的端到端的安全性要求。

王旭舉例說,金融行業不僅僅本身對安全有要求,監管對安全也有要求。所以必須要保證安全性,不僅僅滿足應用的,也要滿足監管的端到端的安全性要求。另一方面,他們認為安全性包括兩方面,一個是應用不能破壞沙盒,洩露到外面,同時應用的底層供應商不是自己時,也可以安全的使用。這就是一個雙向的安全問題。

一般而言,作為一個雲服務商,會假設所有的使用者都是壞人,因為所有的使用者都可能去窺探基礎設施,它們都可能攻擊其他使用者,攻擊宿主機,所以要做隔離。

而金融級的要求是不光是要做這一層的隔離,而是要做更強的隔離。首先是對應用不能盲目信任,即便是內部應用也不能放任,因為內部的也有可能存在區域性的破壞,也有可能會有不安全的程式碼或者沒有被完全驗證的測試程式碼,還有可能會有第三方的程式碼。反過來,應用既然是金融級的應用,它對環境也有安全要求,所以這是整體的要求。

技術創業與開源

開源對軟體公司來說,是一件向死而生的事情。

在早期以開源技術為核心做創業公司時,王旭認為開源是市場推廣的一個很好途徑。因為軟體是有人買才能賺錢,有人用才有人買,所以你如果不開源,就要一家一家地找人去試用,但是你開源了之後大家就可以免費嘗試。不過,開源並不是沒有缺點,開源對軟體公司來說,是一件向死而生的事情。你把最核心的技術開源了,賭的是別人跟不上你的發展速度;或者說別人相信你才有能力把它做到更好,別人才會用你;或者說你給別人看到的當前版本,讓他相信下一個版本他也做不到你這麼好,所以才願意跟著你來走,以至於當他維護不了的時候才會願意來給你掏錢。這應該說是一個在市場背景下的選擇。

反過來說,如果說你現在做了一個基礎設施領域的軟體特別好用,但是你不開源,這個時候就一定會有人做一個一樣的開源替代品。那你就看能不能比它做得好,你能不能拿更多的支援、拿到更多資源。這是很困難的。

所以在這個情況下,你不得不去做這種這種極致的推廣手段,就是這種不買先送的這種開源式的市場推廣手段。目前來看,純軟體實現的、跟硬體沒關係這種專案基本上都是採用了開源或者半開源的方式,就是說至少給你一個開源的演示版或基礎版。這種方式,從商業上說是迫不得已的一種推廣方式。如果你不做,你的使用者們用不到的話,他們會去尋找替代品,也一定會有開源替代品出現。

技術創業還會面臨一個挑戰,就是當你做出來產品以後,很快會有更大的對手入場,對於初創公司來說,面臨的壓力是頗大的。王旭面臨的情況稍微有些不同。

幸運的是,推出和 runV 類似專案的公司是英特爾,在這件事情上並沒有很強的盈利導向,這也是雙方最終能夠合作的前提。王旭認為儘量避免無用的競爭,而是一起來教育和開拓市場,是更有建設性的做法。

做初創公司,做有價值的東西是最重要的。

經歷了開源技術為核心的技術創業之後,王旭對如何做技術創業也有一些自己的看法。他認為,對於初創公司來說,很大程度上來說都在賭別人沒有做過的事情,因為你重複別人做的事情,還要比別人做的好,是一件很困難的事情。對於專案來說,取決於你想的是什麼東西,你的專案想得越多,想出來和別人有什麼不同,別人怎麼需要你的專案,其實它就越有價值。

做初創公司,做有價值的東西是最重要的,而不是說做一個很好看的架構,最重要的還是要有價值,大家才會用。此外,還要考慮相關的專案,就是你要和誰一起配合工作,你的使用者群是誰,你的使用者需要去引用的已有專案是哪些,怎麼和它們共存,因為完全從零開始造輪子不太可能,你會用到很多已有的成果。

新做一個專案,要考慮很多相關的東西、上下游的東西,各種的相容性、支援性,要在生態裡面去找到你自己的位置。除此之外,還要明白什麼是專案最重要的指標,比如開始做 runV 的時候,第一個考慮事情就是安全容器的啟動時間,並且不間斷的去關注和優化。

最後,做開源專案也並不是說把程式碼開源出來就行了,還要注重社群的建設。

作為一個開源專案來說,它的社群是非常重要的,有社群才是開源專案。

王旭認為,作為一個開源專案來說,它的社群是非常重要的,有社群才是開源專案,沒有社群的專案只是拿出程式碼給大家看看而已,那樣不會有人真的嚴肅的去使用你的程式碼。

無論是在 runV 的時期,還是後面 Kata 容器的時期,社群都是王旭和團隊非常注重的一環,有很多在早期關注和參與的開發者和組織,到現在王旭也和他們保持著很好的關係。

結語

作為國內少數的基礎設施方面的開源軟體初創專案的領軍人物之一,王旭無疑在這個領域的技術和商業方面擁有獨到的經驗和感悟,這些思考可以給更多在前沿領域的技術人員和開源初創專案一些啟示。

專訪安全容器 Kata 專案創始人王旭:開源是一件向死而生的事情

“穿山甲專訪”欄目是 Linux 中國社群推出的面向開源界、網際網路技術圈的重要領軍人物的系列採訪,將為大家介紹中國開源領域中一些積極推動開源,諳熟開源思想的技術人,並辨析其思考、挖掘其動因,揭示其背後所發生的事情,為關注開源、有志於開源的企業和技術人標出一條路徑。

取名為“穿山甲”寓意有二:取穿山甲挖掘、深入之意來象徵技術進步和表徵技術領袖的作用;穿山甲是珍稀保護動物,宣傳公益。

專訪安全容器 Kata 專案創始人王旭:開源是一件向死而生的事情

訂閱“Linux 中國”官方小程式來檢視

相關文章