Istio新架構(gòu)揭秘:環(huán)境化Mesh
自問世以來,Istio因其使用Sidecar(可編程代理與應(yīng)用容器一同部署)而備受認可。這種架構(gòu)選擇使Istio用戶能夠享受其好處,而無需對其應(yīng)用進行 drast 改變。這些可編程代理,與應(yīng)用容器緊密部署在一起,因其能夠引入Istio的諸多好處而備受贊譽,同時又無需對應(yīng)用進行重大更改。但總有改進的空間,現(xiàn)在Istio引入了環(huán)境化Mesh,這是其架構(gòu)的重大演進。
Sidecar模型:優(yōu)勢和限制
傳統(tǒng)Istio模型:Istio在工作負載的Pod中部署Envoy代理作為Sidecar。
Sidecar的優(yōu)勢:無需重構(gòu)應(yīng)用即可享受Istio的功能。
Sidecar的限制:
- 侵入性: Sidecar需要集成到應(yīng)用中,影響其Kubernetes Pod規(guī)格并重定向Pod流量。這經(jīng)常導致需要重啟應(yīng)用Pod。
- 資源利用不足: 由于每個Sidecar代理專門分配給其配對的工作負載,資源分配可能導致集群效率低下。
- 流量中斷: Istio的Sidecar可能對一些應(yīng)用的流量捕獲和HTTP處理造成問題。
環(huán)境化Mesh:克服限制
環(huán)境化Mesh采用分層方法,分割了Istio的功能:
- 基礎(chǔ)層: 一個安全的覆蓋層,負責路由和確保流量的零信任安全。
- 上層: 當用戶需要訪問Istio的廣泛功能時,可以啟用L7處理,而無需改變應(yīng)用Pod。
這種方法的優(yōu)勢包括:
- 允許逐步采用Istio:從無Mesh -> 安全覆蓋層 -> 完整的L7處理。
- 在不同環(huán)境模式或帶有Sidecar的工作負載之間實現(xiàn)兼容性。
環(huán)境化Mesh的工作原理
- 在Kubernetes集群的每個節(jié)點上都有一個共享代理(ztunnel),負責Mesh內(nèi)的安全連接。
- Ztunnel僅處理L4流量,將Istio的數(shù)據(jù)平面與應(yīng)用關(guān)注點分離。
- 當命名空間激活環(huán)境化模式時,將建立一個零信任覆蓋層(具有mTLS、遙測、認證和L4授權(quán))。
- 對于L7功能,命名空間可以部署一個或多個基于Envoy的Waypoint代理。這些代理可以根據(jù)實時流量需求進行自動縮放。
安裝環(huán)境化Mesh
(1) 下載Istio的最新版本,其中包含對環(huán)境化Mesh的alpha支持。
(2) 安裝Kubernetes網(wǎng)關(guān)CRDs,在大多數(shù)Kubernetes集群上默認未安裝
kubectl get crd gateways.gateway.networking.k8s.io &> /dev/null || \
{ kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd/experimental?ref=v0.8.0" | kubectl apply -f -; }
(3) ambient配置文件旨在幫助您開始使用環(huán)境化Mesh。使用上面下載的istioctl命令,在您的Kubernetes集群上安裝帶有ambient配置文件的Istio:
istioctl install --set profile=ambient --set "components.ingressGateways[0].enabled=true" --set "components.ingressGateways[0].name=istio-ingressgateway" --skip-confirmation
- 安裝了Istio核心
- 安裝了Istiod
- 安裝了CNI
- 安裝了入口網(wǎng)關(guān)
- 安裝了Ztunnel
- 安裝完成
(4) 使用以下命令驗證已安裝的組件:
kubectl get pods -n istio-system
名稱 就緒 狀態(tài) 重啟次數(shù) 年齡
istio-cni-node-n9tcd 1/1 運行中 0 57秒
istio-ingressgateway-5b79b5bb88-897lp 1/1 運行中 0 57秒
istiod-69d4d646cd-26cth 1/1 運行中 0 67秒
ztunnel-lr7lz 1/1 運行中 0 69秒
kubectl get daemonset -n istio-system
名稱 預期 當前 就緒 最新 可用 節(jié)點選擇器 年齡
istio-cni-node 1 1 1 1 1 kubernetes.io/os=linux 70秒
ztunnel 1 1 1 1 1 kubernetes.io/os=linux 82秒
安全考慮
環(huán)境化Mesh將安全性放在首位:
Ztunnel:盡管是一個共享資源,但ztunnel將其密鑰限制在其節(jié)點上的工作負載上,降低風險。
- Waypoint代理: 這些共享資源被限制在一個服務(wù)賬戶中,減少了來自受損代理的潛在傷害。
- Envoy的作用: 憑借其強大、經(jīng)過考驗的特性,Envoy被認為比它配對的許多應(yīng)用更安全。
性能和資源影響
- 資源效率: 環(huán)境化Mesh的ztunnel減少了每個工作負載的預留資源。Waypoint代理的動態(tài)擴展也確保了資源優(yōu)化。
- 延遲問題: 雖然有一種看法認為Waypoint代理可能引入延遲,但Istio認為這能夠通過與傳統(tǒng)Sidecar模型相比減少的L7處理來平衡。
Sidecar的未來
環(huán)境化Mesh的推出并不意味著Sidecar的結(jié)束。它們?nèi)匀贿m用于需要專用數(shù)據(jù)平面資源的情景,比如合規(guī)性或性能調(diào)整。Istio將繼續(xù)支持Sidecar,確保它們與環(huán)境化Mesh和諧共存。
總之,環(huán)境化Mesh代表了服務(wù)網(wǎng)格架構(gòu)邁出的一大步,解決了Sidecar模型的一些挑戰(zhàn),并為用戶提供了更多的靈活性和效率。