開源Cillium項(xiàng)目為容器提供強(qiáng)大的網(wǎng)絡(luò)功能
譯文【51CTO.com快譯】試驗(yàn)性的開源Cillium項(xiàng)目使用Linux內(nèi)核的一項(xiàng)現(xiàn)有特性,為容器提供高速、強(qiáng)大的網(wǎng)絡(luò)功能。
網(wǎng)絡(luò)功能始終是使用容器時(shí)最頭痛的棘手問(wèn)題之一。連Google開源的容器集群管理系統(tǒng)Kubernetes在實(shí)現(xiàn)網(wǎng)絡(luò)功能方面也存在著限制,雖然它正迅速成為容器編排的***技術(shù)。這讓網(wǎng)絡(luò)安全之類的棘手問(wèn)題變得更棘手了。
現(xiàn)在,一項(xiàng)名為Cilium的開源項(xiàng)目試圖基于Linux內(nèi)核中所用的技術(shù),為容器提供一種新的網(wǎng)絡(luò)方法――該項(xiàng)目得到了谷歌的部分贊助,目的在于為容器提供更好的網(wǎng)絡(luò)安全和更簡(jiǎn)單的網(wǎng)絡(luò)模型。
以BPF方式來(lái)聯(lián)網(wǎng)
Linux中的網(wǎng)絡(luò)安全機(jī)制(比如iptable)通常只適用于網(wǎng)絡(luò)、數(shù)據(jù)包和地址這些層面,即OSI模型的第3層。那些機(jī)制無(wú)法與HTTP之類的協(xié)議對(duì)話。
Cilium使用Linux的伯克利數(shù)據(jù)***濾(BPF)技術(shù),在網(wǎng)絡(luò)層面和HTTP層面為Docker容器或Kubernetes pod執(zhí)行網(wǎng)絡(luò)安全策略。
BPF被引入到了Linux 2.5,此后就成了內(nèi)核中的一項(xiàng)穩(wěn)定功能。由于BPF,人們可以在內(nèi)核里面編譯并運(yùn)行提供網(wǎng)絡(luò)過(guò)濾機(jī)制和性能分析及跟蹤分析的小程序。
據(jù)Cilium的GitHub代碼庫(kù)說(shuō)明文檔顯示,Cilium的工作原理是生成內(nèi)核層面的BPF程序,這些程序可直接與容器協(xié)同運(yùn)行。Cilium可以為每個(gè)容器分配一個(gè)IPv6地址(或除此之外的IPv4地址),并使用容器標(biāo)簽而非網(wǎng)絡(luò)路由規(guī)則來(lái)執(zhí)行容器之間的隔離,而不是為容器創(chuàng)建覆蓋網(wǎng)絡(luò)。它還包括了面向編排系統(tǒng)的整合,以便處理創(chuàng)建和執(zhí)行Cilium策略的工作。
Cilium使用BPF的兩大原因是速度和便利。BPF程序被編譯成原生機(jī)器代碼,那樣它們運(yùn)行起來(lái)速度與其他任何內(nèi)核代碼一樣快。對(duì)Cilium使用的BPF程序加以改動(dòng)不需要重新引導(dǎo),甚至不需要容器重啟。Cilium的開發(fā)者還聲稱,BPF程序針對(duì)每個(gè)容器進(jìn)行了優(yōu)化,那樣“某個(gè)容器不需要的功能完全不需要編譯。”
現(xiàn)處于試驗(yàn)階段,但最終必不可少
Cilium的一個(gè)潛在問(wèn)題是,它需要版本非常新的Linux內(nèi)核:4.8.0或更新版本,推薦4.9.17,另外需要LLVM 3.7.1或更新版本。話雖如此,Cilium的功能集合并不受制于任何特定的Linux版本――比如說(shuō),“添加Linux內(nèi)核不提供的額外統(tǒng)計(jì)信息”或者“額外的轉(zhuǎn)發(fā)邏輯”。
Cilium是容器處理網(wǎng)絡(luò)功能的一種試驗(yàn)性解決方案,不過(guò)對(duì)多種方法而言仍有很大的余地――即使是Docker發(fā)展過(guò)程中的現(xiàn)階段。Docker的最初網(wǎng)絡(luò)方法很笨拙,很難管理,所以這家公司收購(gòu)了SocketPlane,并將其類似OpenDaylight的網(wǎng)絡(luò)結(jié)構(gòu)(network fabric)添加到了Docker 1.9。該解決方案默認(rèn)情況下隨帶Docker,但是從理論上來(lái)說(shuō),它可以換成可與Docker API兼容的其他網(wǎng)絡(luò)產(chǎn)品。
Cilium的優(yōu)點(diǎn)在于,它是按照與容器同樣的思路構(gòu)建的,使用了現(xiàn)有的Linux內(nèi)核技術(shù);Docker式樣的容器實(shí)際上重新包裝了長(zhǎng)期以來(lái)存在于Linux內(nèi)核中的功能。同樣,Cilium可與存在了一段時(shí)間的現(xiàn)有技術(shù)兼容,有一系列明確的使用場(chǎng)景,跟容器本身一樣接近內(nèi)核中的容器層面。
原文標(biāo)題:Linux kernel holds key for advanced container networking,作者:Serdar Yegulalp
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】