專訪安全容器 Kata 項目創始人王旭:開源是一件向死而生的事情
互聯網技術發展速度之快是所有從業者甚至非從業者都能感受到的。尤記得在世紀之交時,那時候互聯網剛剛在中國開始向民用普及,不說支撐大規模的網站訪問量的相關技術,就連 Linux、負載均衡甚至都沒有被普遍使用。而在二十年之後,雲計算已經大行其道,當今的技術人員已經言必稱虛擬化、容器和 Serverless,就連剛剛準備入行互聯網運維行業的新人們都已經從最初覺得考個 Linux 認證就夠了到開始問詢 Kubernetes 培訓哪家強了。
從一屆屆 LC3、DockerCon 到 KubeCon,蓬勃發展的雲計算與容器化似乎已經稱霸了互聯網領域。這次我帶隊參加了 6 月 24 ~ 26 日的 KubeCon 大會,對此感受尤為深刻。事實上,這次在上海舉辦的 KubeCon 2019 距離上次在同一地點舉辦的同一會議才僅僅過去半年,但是我們依舊在這次大會上看到了層出不窮的大量新技術、新動態。
雲與容器的結合,引爆了這一切。
作為容器領域的資深專家,讓我們來看看王旭是如何看待容器和雲原生領域當前的發展態勢的,以及作為這個領域的一家初創技術企業的創始人,他是如何投身到這個領域的,開源又在其間起到了什麼作用。
王旭,安全容器項目 runV 的創始人,現已加入螞蟻金服。
創立於 2015 年的 runV 項目已於 2017 年和另外一個來自英特爾的 Clear 容器項目合併為 Kata 容器項目,並由 OpenStack 基金會(OSF)進行管理,它與來自谷歌的 gVisor 項目並稱為目前兩大安全容器技術。
開源與初創
要麼就去加強容器,要不就是引入別的安全技術來讓它像容器一樣。
臨近 2015 年,Docker 逐漸被業界主流所接受,互聯網技術已經有一個比較明顯的發展趨勢:第一是雲,第二是容器。而雲加上容器一定會產生隔離性的需求,這應該說是王旭和他的聯合創始人趙鵬做安全容器最早的一個思路:要麼就去加強容器,要不就是引入別的安全技術來讓它像容器一樣。這就是 runV 這個項目想法的起源。
runV 發布的同一個星期,英特爾Clear 容器也發布了。2016 年 8 月份,在西雅圖的 LinuxCon 上,王旭和 Clear 團隊見面交流,雙方在一些細節上面展開合作。在 2017 年 9 月份一個會議上,英特爾軟體副總裁、開源技術中心總經理 Imad Sousou 提出項目合併,然後放到基金會裡管理。當時大家都覺得這是很好的一個思路。
對於 runV 和 Clear 來說,避免了重複開發以及花費精力在如何說明兩者的不同上,同時合併之後可以共同推動發展一個社區,一起去尋找更多的用戶。同時,兩者合併還有更多的意義。
Kata 容器的意義
Kata 容器最大的意義在於推動了社區的發展。
王旭認為,Kata 容器最大的意義在於推動了社區的發展。在 2018 年之前剛開始做 Kata 容器的時候,王旭他們需要很多的附加進程來模擬 runC 容器的行為,因為 runC 是事實標準,你需要兼容它。但是當 Kata 和谷歌的 gVisor 都出來之後,上游社區就注意到這一點,開始重視,於是推出新的介面,可以語義明確地直接去對話,而不需要再去模擬 runC 的底層行為,把原來的 2N+2 個輔助進程變成了一個進程。另外,既然有了不同的容器運行時,是不是可以在不同的場景下讓它們轉到不同容器運行時環境上去?於是就有了「 運行時類 」這樣的結構。Kubernetes 社區做了很多這樣改進,它們也在逐步變成事實標準。這樣,一個小項目的引入推動了包括從用戶到上下游的整個社區相關軟體的變動。
安全容器也讓更多的業務使用容器變得可能。
同時,安全容器也讓更多的業務使用容器變得可能。王旭在螞蟻金服做面向金融的一些服務往雲原生方向發展,需要非常嚴格的安全標準,這正好和 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 容器的時期,社區都是王旭和團隊非常注重的一環,有很多在早期關注和參與的開發者和組織,到現在王旭也和他們保持著很好的關係。
結語
作為國內少數的基礎設施方面的開源軟體初創項目的領軍人物之一,王旭無疑在這個領域的技術和商業方面擁有獨到的經驗和感悟,這些思考可以給更多在前沿領域的技術人員和開源初創項目一些啟示。
「穿山甲專訪」欄目是 Linux 中國社區推出的面向開源界、互聯網技術圈的重要領軍人物的系列採訪,將為大家介紹中國開源領域中一些積極推動開源,諳熟開源思想的技術人,並辨析其思考、挖掘其動因,揭示其背後所發生的事情,為關注開源、有志於開源的企業和技術人標出一條路徑。
取名為「穿山甲」寓意有二:取穿山甲挖掘、深入之意來象徵技術進步和表徵技術領袖的作用;穿山甲是珍稀保護動物,宣傳公益。
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive