最近接觸到了 istio呻澜,感覺十分強大,寫篇短文推薦給大家侨拦。本文所涉及的具體實驗步驟可以參考官網(wǎng)教程。
istio 相關(guān)文章列表:
istio 是什么
Istio 提供一種簡單的方式來為已部署的服務(wù)建立網(wǎng)絡(luò)蹦锋,該網(wǎng)絡(luò)具有負(fù)載均衡、服務(wù)間認(rèn)證、監(jiān)控等功能,而不需要對服務(wù)的代碼做任何改動推正。
- istio 適用于容器或虛擬機環(huán)境(特別是 k8s),兼容異構(gòu)架構(gòu)宝惰。
- istio 使用 sidecar(邊車模式)代理服務(wù)的網(wǎng)絡(luò)植榕,不需要對業(yè)務(wù)代碼本身做任何的改動。
- HTTP尼夺、gRPC尊残、WebSocket 和 TCP 流量的自動負(fù)載均衡。
- istio 通過豐富的路由規(guī)則淤堵、重試夜郁、故障轉(zhuǎn)移和故障注入,可以對流量行為進(jìn)行細(xì)粒度控制粘勒;支持訪問控制、速率限制和配額屎即。
- istio 對出入集群入口和出口中所有流量的自動度量指標(biāo)庙睡、日志記錄和跟蹤。
部署示例
官網(wǎng)的例子在我的環(huán)境下有點問題技俐,直接使用部署 review 應(yīng)用會報 com.ibm.ws.kernel.boot.LaunchException
錯誤乘陪,啟動失敗。具體原因沒找到雕擂,猜測是 websphere 和我的環(huán)境有點沖突(網(wǎng)上很多直接用 kubeadm 起的集群好像都有點問題)啡邑?我將它改寫成了 spring boot 項目,代碼可見 github 井赌。
首先部署一個簡短書評網(wǎng)站谤逼,構(gòu)架如圖。
網(wǎng)站包括四個微服務(wù):
- productpage :本服務(wù)會調(diào)用 details 和 reviews 兩個微服務(wù)仇穗,用來生成頁面流部。
- details :這個微服務(wù)包含了書籍的信息。
- reviews :這個微服務(wù)包含了書籍相關(guān)的評論纹坐。它還會調(diào)用 ratings 微服務(wù)枝冀。
- ratings :ratings 微服務(wù)中包含了由書籍評價組成的評級信息。
reviews 微服務(wù)有 3 個版本:
- v1 版本不會調(diào)用 ratings 服務(wù)。
- v2 版本會調(diào)用 ratings 服務(wù)果漾,并使用 1 到 5 個黑色星形圖標(biāo)來顯示評分信息球切。
- v3 版本會調(diào)用 ratings 服務(wù),并使用 1 到 5 個紅色星形圖標(biāo)來顯示評分信息绒障。
訪問效果如下:
由于 Bookinfo 示例部署了三個版本的 reviews 微服務(wù)吨凑,當(dāng)我們多次訪問應(yīng)用程序時,可以看到有時輸出包含星級評分端盆,有時又沒有怀骤。
智能路由
可以通過路由規(guī)則對流量進(jìn)行細(xì)粒度的控制。
1. 自定義路由
首先將所有流量導(dǎo)入 v1 版本的 reviews
使用如下配置焕妙,并提交給 k8s 蒋伦。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- route:
- destination:
host: reviews
subset: v1
稍等幾秒鐘就可以看到變化:
可以看到現(xiàn)在所有流量都走 v1 版 review。
根據(jù) header 內(nèi)容分發(fā)流量
istio 可以基于內(nèi)容分發(fā)流量焚鹊,在這里我們讓普通用戶全部訪問 v1 版痕届,而特殊用戶(jason)訪問 v2 版。
使用如下配置末患,并提交給 k8s研叫。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v1
可以看到普通用戶仍然訪問 v1 版 review。
而以 jason 身份登錄后會訪問 v2 版 review(黑色五角星)璧针。
除此以外 istio 可以在服務(wù)之間注入延遲嚷炉、斷開等故障。也可以做到按比例遷移等需求探橱。
監(jiān)控
在 Istio 中申屹,可以讓 Mixer 自動為所有的網(wǎng)格內(nèi)流量生成和報告新的指標(biāo)以及新的日志流。下面以 book-info 應(yīng)用為例隧膏,展示分布式追蹤哗讥。
Prometheus
用作指標(biāo)采集與查詢。
分布式追蹤
雖然 Istio 代理能夠自動發(fā)送 Span 信息胞枕,但還是需要一些輔助手段來把整個跟蹤過程統(tǒng)一起來杆煞。應(yīng)用程序應(yīng)該自行傳播跟蹤相關(guān)的 HTTP Header,這樣在代理發(fā)送 Span 信息的時候腐泻,才能正確的把同一個跟蹤過程統(tǒng)一起來决乎。
grafana
使用 grafana 對 istio 本身和服務(wù)網(wǎng)格進(jìn)行監(jiān)控。