如何將虛擬機(jī)整合到Istio服務(wù)網(wǎng)格中?
譯文【51CTO.com快譯】 Istio是一種流行的服務(wù)網(wǎng)格,用于連接、保護(hù)、控制和觀察服務(wù)。Kubernetes于2017年作為開(kāi)源系統(tǒng)首次亮相后,贏得了容器編排大戰(zhàn),Istio滿足了向微服務(wù)遷移的組織的需要。雖然Istio聲稱支持Nomad、Consul、Eureka、Cloud Foundry和Mesos等異構(gòu)環(huán)境,但實(shí)際上始終與Kubernetes協(xié)同運(yùn)行最順暢,畢竟Istio的服務(wù)發(fā)現(xiàn)基于Kubernetes。
Istio在開(kāi)發(fā)初期因許多問(wèn)題而飽受詬病:組件數(shù)量眾多,安裝和維護(hù)復(fù)雜,調(diào)試?yán)щy,因引入太多新概念和對(duì)象(多達(dá)50個(gè)CRD)而不易上手,Mixer組件給性能帶來(lái)了影響。但是Istio團(tuán)隊(duì)在逐步解決這些問(wèn)題。從2020年初發(fā)布的路線圖可以看出,Istio已取得長(zhǎng)足進(jìn)展。
Istio團(tuán)隊(duì)今年的主要重點(diǎn)是將基于虛擬機(jī)的工作負(fù)載更好地整合到網(wǎng)格中。本文介紹了為什么Istio需要與虛擬機(jī)整合以及如何實(shí)現(xiàn)。
為什么Istio應(yīng)支持虛擬機(jī)?
雖然容器和Kubernetes現(xiàn)已被廣泛使用,但是仍有許多服務(wù)部署在需要由Istio網(wǎng)格管理的Kubernetes集群之外的虛擬機(jī)和API上。將舊環(huán)境與新環(huán)境的管理統(tǒng)一起來(lái)是個(gè)巨大挑戰(zhàn)。
將虛擬機(jī)添加到網(wǎng)格需要什么?
介紹如何添加之前,先介紹將虛擬機(jī)添加到網(wǎng)格需要什么。支持虛擬機(jī)流量時(shí),Istio須了解以下幾點(diǎn):哪些虛擬機(jī)擁有應(yīng)是網(wǎng)格一部分的服務(wù)?如何訪問(wèn)虛擬機(jī)?每個(gè)虛擬機(jī)還需要身份,以便與網(wǎng)格的其余部分安全地聯(lián)系。這些要求與Kubernetes CRD以及像Consul這種功能完備的服務(wù)注冊(cè)中心(Service Registry)兼容。而基于服務(wù)帳戶的身份引導(dǎo)可充當(dāng)為沒(méi)有平臺(tái)身份的虛擬機(jī)分配工作負(fù)載身份的機(jī)制。對(duì)于確實(shí)有平臺(tái)身份的虛擬機(jī)(比如EC2、GCP或Azure等),Istio正致力于將Kubernetes身份與平臺(tái)身份進(jìn)行交換,以便建立mTLS通信。
Istio如何支持虛擬機(jī)?
Istio支持虛擬機(jī)始于其服務(wù)注冊(cè)機(jī)制。Istio網(wǎng)格中有關(guān)服務(wù)和實(shí)例的信息來(lái)自Istio的服務(wù)注冊(cè)中心,到目前為止,服務(wù)注冊(cè)中心只查看或跟蹤pod。在較新版本中,Istio現(xiàn)在擁有用于跟蹤和監(jiān)測(cè)虛擬機(jī)的資源類型。網(wǎng)格內(nèi)的邊車(sidecar)無(wú)法觀察和控制進(jìn)入到網(wǎng)格外服務(wù)的流量,因?yàn)樗鼈儧](méi)有任何關(guān)于它們的信息。
Istio社區(qū)在Istio支持虛擬機(jī)方面做了很多的工作。1.6版本增加了WorkloadEntry,使您可以像描述Kubernetes中運(yùn)行的主機(jī)那樣描述虛擬機(jī)。在1.7版本中,該版本開(kāi)始通過(guò)令牌將引導(dǎo)虛擬機(jī)的基礎(chǔ)自動(dòng)添加到網(wǎng)格中,Istio處理繁重的任務(wù)。Istio 1.8將首次引入名為WorkloadGroup的另一個(gè)抽象,它類似Kubernetes Deployment對(duì)象,不過(guò)面向虛擬機(jī)。
下圖顯示了Istio如何為網(wǎng)格中的服務(wù)建模。信息的主要來(lái)源來(lái)自平臺(tái)服務(wù)注冊(cè)中心(比如Kubernetes)或系統(tǒng)(比如Consul)。另外,ServiceEntry充當(dāng)用戶定義的服務(wù)注冊(cè)中心,可為虛擬機(jī)上的服務(wù)或組織外的外部服務(wù)建模。
Istio中的服務(wù)注冊(cè)模型
既然只要使用ServiceEntry就可以在虛擬機(jī)中引入服務(wù),為什么在虛擬機(jī)中安裝Istio?
使用ServiceEntry,您可以啟用網(wǎng)格內(nèi)的服務(wù)來(lái)發(fā)現(xiàn)和訪問(wèn)外部服務(wù),并管理進(jìn)入到那些外部服務(wù)的流量。與VirtualService結(jié)合使用,您還可以配置相應(yīng)外部服務(wù)的訪問(wèn)規(guī)則(比如請(qǐng)求超時(shí)和故障注入等),從而實(shí)現(xiàn)有控制地訪問(wèn)指定的外部服務(wù)。
即便如此,它也只能控制客戶端上的流量,無(wú)法控制對(duì)引入到其他服務(wù)的外部服務(wù)的訪問(wèn)。也就是說(shuō),它無(wú)法控制作為呼叫發(fā)起者的服務(wù)的行為。在虛擬機(jī)中部署邊車,并通過(guò)工作負(fù)載選擇器引入虛擬機(jī)工作負(fù)載,讓虛擬機(jī)可以隨意加以管理,就像Kubernetes中的pod那樣。
展望未來(lái)
從bookinfo演示(https://istio.io/latest/docs/examples/virtual-machines/bookinfo/)可以看到,這個(gè)過(guò)程涉及太多的手動(dòng)工作,很容易出錯(cuò)。將來(lái),Istio將提高虛擬機(jī)測(cè)試的逼真度,基于平臺(tái)身份實(shí)現(xiàn)自動(dòng)引導(dǎo),改善DNS支持和istioctl調(diào)試等。您可以關(guān)注Istio環(huán)境工作組(https://github.com/istio/community/blob/master/WORKING-GROUPS.md),以獲得有關(guān)虛擬機(jī)支持的更多詳細(xì)信息。
原文標(biāo)題:How to Integrate Virtual Machines into Istio Service Mesh,作者:Jimmy Song
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】