翻譯一篇 Istio 部署教程,原文鏈接:test-drive-your-first-istio-deployment-using-play-with-kubernetes-platform-cloud-computing
作為一名全棧開(kāi)發(fā)饿序,假如最近花了不少時(shí)間開(kāi)發(fā)應(yīng)用均蜜,肯定已經(jīng)理解了微服務(wù)架構(gòu)下要面臨的一系列全新挑戰(zhàn)。盡管應(yīng)用已經(jīng)從龐大的單體應(yīng)用轉(zhuǎn)變成了開(kāi)發(fā)更快潭辈、彈性更好、更小也更聚焦的微服務(wù),但現(xiàn)實(shí)是屉佳,開(kāi)發(fā)者需要開(kāi)始操心將這些服務(wù)集成到分布式系統(tǒng)中的問(wèn)題了,包括服務(wù)發(fā)現(xiàn)洲押、負(fù)載均衡武花、注冊(cè)、容錯(cuò)杈帐、監(jiān)控体箕、路由专钉、兼容和安全等。
讓我們更詳細(xì)的拆解微服務(wù)架構(gòu)下開(kāi)發(fā)和運(yùn)維面臨的挑戰(zhàn)吧累铅。先來(lái)看看第一代簡(jiǎn)單的 Service Mesh 場(chǎng)景跃须,如下圖所示,服務(wù) A 要和 服務(wù) B 通信娃兽,沒(méi)有采用直接通信的方式菇民,請(qǐng)求是通過(guò) NGINX 路由的。NGINX 從 Consul(服務(wù)發(fā)現(xiàn)工具)查找路由换薄,并在收到 HTTP 502 響應(yīng)時(shí)玉雾,自動(dòng)重試。
但隨著微服務(wù)架構(gòu)的到來(lái)复旬,服務(wù)數(shù)量的增長(zhǎng)一發(fā)不可收拾,下面列出的是開(kāi)發(fā)和運(yùn)維團(tuán)隊(duì)遇到的問(wèn)題:
- 如何讓日益增長(zhǎng)的微服務(wù)們互聯(lián)冲泥?
- 如何為微服務(wù)提供負(fù)載均衡驹碍?
- 為微服務(wù)提供基于角色的路由;
- 如何控制微服務(wù)的出口流量凡恍,如何實(shí)現(xiàn)灰度發(fā)布志秃?
- 如何控制不斷增長(zhǎng)的微服務(wù)的復(fù)雜度?
- 如何用富路由規(guī)則實(shí)現(xiàn)細(xì)粒度的流量控制嚼酝?
- 實(shí)現(xiàn)流量加密浮还、服務(wù)到服務(wù)的鑒權(quán)和強(qiáng)身份聲明的挑戰(zhàn)
簡(jiǎn)而言之,雖然你可以在應(yīng)用和網(wǎng)絡(luò)中間件中開(kāi)啟服務(wù)發(fā)現(xiàn)和重試機(jī)制闽巩,但實(shí)際上钧舌,想讓服務(wù)發(fā)現(xiàn)正常工作是非常困難的。
初試 Istio Service Mesh
Service Mesh 是 2018 年度最火熱的流行詞之一涎跨,它是微服務(wù)的可配置基礎(chǔ)架構(gòu)層洼冻,負(fù)責(zé)微服務(wù)應(yīng)用間的交互,service mesh 讓微服務(wù)實(shí)例間的交互更靈活隅很、可靠和快速撞牢。Mesh 層提供了服務(wù)發(fā)現(xiàn)、負(fù)載均衡叔营、加密屋彪、鑒權(quán)和驗(yàn)證,支持熔斷機(jī)制等其他能力绒尊。
Istio 是完全開(kāi)源的撼班,可透明的部署在已有的分布式應(yīng)用上。Istio 1.0 版本在上個(gè)月發(fā)布垒酬,已經(jīng)生產(chǎn)環(huán)境可用砰嘁。Istio 完全由 Go 語(yǔ)言編寫(xiě)件炉,提供成熟的 API 接口可以接入到任何日志平臺(tái)、遙測(cè)和策略系統(tǒng)中矮湘。Istio 在 GitHub 上發(fā)布斟冕,對(duì)系統(tǒng)的性能影響很小,豐富的特性讓你可以順利缅阳、高效的運(yùn)行分布式微服務(wù)架構(gòu)磕蛇,并提供統(tǒng)一的保護(hù)、連接和監(jiān)控方法十办。
Istio 對(duì)系統(tǒng)的影響很小秀撇,它在 GitHub 上發(fā)布,上個(gè)月向族,Istio 1.0 版本已經(jīng)發(fā)布呵燕,并且生產(chǎn)環(huán)境可用。
Istio 能帶來(lái)什么好處呢件相?
- Istio 提供服務(wù)的連接再扭、保護(hù)、控制和觀測(cè)能力夜矗。
- 減少服務(wù)部署的復(fù)雜度泛范,減輕部署團(tuán)隊(duì)的壓力。
- 在無(wú)需修改應(yīng)用代碼的前提下紊撕,為開(kāi)發(fā)和開(kāi)發(fā)運(yùn)維提供了細(xì)粒度的流量可視化和控制罢荡。
- 為 CIO 提供了幫助全企業(yè)安全實(shí)施和合規(guī)型需求的必要工具。
- 在 service mesh 層提供了統(tǒng)一的行為監(jiān)測(cè)和運(yùn)營(yíng)控制对扶。
- Istio 讓為服務(wù)網(wǎng)絡(luò)提供 HTTP区赵、gRPC、Web Socket 和 TCP 流量的自動(dòng)負(fù)載均衡變的輕松辩稽。
- 提供了細(xì)粒度的流量行為控制惧笛,包括:富路由規(guī)則从媚、重試逞泄、故障轉(zhuǎn)移和失敗注入。
- 支持插件化的策略控制層和配置 API拜效,支持訪問(wèn)控制喷众、流量限制和配額。
- Istio 為集群內(nèi)的全部流量提供自動(dòng)的度量紧憾、日志到千、追蹤,包括進(jìn)群的入口和出口赴穗。
- 以強(qiáng)身份驗(yàn)證和鑒權(quán)的方式憔四,提供了集群內(nèi)安全的服務(wù)間通信膀息。
- 如何想深入 Istio 架構(gòu),我強(qiáng)烈推薦 Istio 官方網(wǎng)站(https://istio.io/zh)了赵。
開(kāi)始演示G敝А!柿汛!
在這篇文章中冗酿,我將展示如何在 Play with Kubernetes(PWK)中免費(fèi)部署 Istio,這是個(gè)由 Docker 提供的實(shí)驗(yàn)網(wǎng)站络断,是讓用戶在幾秒鐘內(nèi)跑起來(lái) Kubernetes 集群的試驗(yàn)環(huán)境裁替。PWK 提供了在瀏覽器中使用免費(fèi) CentOS Linux 虛擬機(jī)的體驗(yàn),實(shí)際上是 Docker-in-Docker(DinD)技術(shù)模擬了多虛擬機(jī)/PC 的效果貌笨。
打開(kāi) https://labs.play-with-k8s.com/弱判,訪問(wèn) Kubernetes Playground。
點(diǎn)擊 "Login" 按鈕躁绸,以 Docker Hub 或 GitHub ID 登陸裕循。
完成本教程,你將獲得自己的實(shí)驗(yàn)環(huán)境净刮。
添加第一個(gè) Kubernetes 節(jié)點(diǎn)
點(diǎn)擊左側(cè)的 "Add New Instance" 來(lái)構(gòu)建你的第一個(gè) Kubernetes 集群節(jié)點(diǎn)剥哑,自動(dòng)命名為 "node1",每個(gè)節(jié)點(diǎn)都預(yù)裝來(lái) Docker 社區(qū)版(CE)和 Kubeadm淹父。這個(gè)節(jié)點(diǎn)將成為集群的主節(jié)點(diǎn)株婴。
啟動(dòng)主節(jié)點(diǎn)
用如下腳本初始化主節(jié)點(diǎn)(node1)來(lái)啟動(dòng) Kubernetes 集群,復(fù)制該腳本內(nèi)容到文件 bootstrap.sh暑认,并執(zhí)行命令添加可執(zhí)行權(quán)限:chmod +x bootstrap.sh
執(zhí)行腳本時(shí)困介,作為初始化的一部分,kubeadm 會(huì)寫(xiě)入幾個(gè)必要的配置文件蘸际、設(shè)置 RBAC 并部署 Kubernetes 控制平面組件(例如 kube-apiserver座哩、kube-dns、kube-proxy粮彤、etcd 等)根穷。控制平面組件以 docker 容器形式部署导坟。
復(fù)制上面的 kubeadm join token 命令屿良,留作下步使用,此命令用來(lái)在集群中加入其他節(jié)點(diǎn)惫周。
添加從節(jié)點(diǎn)
點(diǎn)擊 "Add New Node" 添加新的從節(jié)點(diǎn)
驗(yàn)證集群狀態(tài)
驗(yàn)證運(yùn)行的 Pods
安裝 Istio 1.0.0
Istio 部署在單獨(dú)的 Kubernetes 命名空間里:istio-system尘惧,我們過(guò)后再來(lái)驗(yàn)證。現(xiàn)在递递,復(fù)制如下內(nèi)容到文件喷橙,命名為 install_istio.sh啥么,并保存。添加可執(zhí)行權(quán)限贰逾,運(yùn)行以安裝 Istio 和相關(guān)工具饥臂。
屏幕上應(yīng)顯示如下內(nèi)容:
如上所示,默認(rèn)會(huì)安裝 Prometheus似踱、ServiceGraph隅熙、Jaeger、Grafana 和 Zipkin核芽。
請(qǐng)注意:運(yùn)行該腳本時(shí)囚戚,可能會(huì)報(bào)如下錯(cuò)誤:
unable to recognize "install/kubernetes/istio-demo.yaml": no matches for admissionregistration.k8s.io/, Kind=MutatingWebhookConfiguration
這是正常的,命令一執(zhí)行完轧简,可在頁(yè)面的中央看到一長(zhǎng)串展示的端口驰坊。
驗(yàn)證服務(wù)
暴露服務(wù)
要暴露 Prometheus、Grafana 和 服務(wù)圖標(biāo)服務(wù)哮独,需要先刪除已有的服務(wù)拳芙,用 NodePort 替換 ClusterIP,用實(shí)例頁(yè)頂端展示的端口訪問(wèn)服務(wù)(如下所示)皮璧。
點(diǎn)擊 "30004" 訪問(wèn) Grafana 頁(yè)舟扎,點(diǎn)擊 "30003" 訪問(wèn) Prometheus 頁(yè)。
可以如下圖所示悴务,選擇必要配置查看 Prometheus 度量:
在 Grafana 頁(yè)睹限,添加 Prometheus 數(shù)據(jù)源,并確認(rèn) Dashboard 已經(jīng)運(yùn)行讯檐。
恭喜羡疗!你已經(jīng)將 Istio 部署在 Kubernetes 集群上了,K8S playgroud 上已經(jīng)安裝的服務(wù)包括:
- Istio Controllers别洪,以及相關(guān) RBAC 規(guī)則
- Istio 定制資源定義
- Prometheus 和 Grafana 監(jiān)控系統(tǒng)
- Jeager 分布式追蹤系統(tǒng)
- Istio Sidecar 注入程序(下一節(jié)我們?cè)賮?lái)仔細(xì)看看)
安裝 Istioctl
Istioctl 是 Istio 的命令行配置工具叨恨,可以用來(lái)創(chuàng)建、查詢挖垛、修改和刪除 Istio 系統(tǒng)的配置資源痒钝。
部署 BookInfo 應(yīng)用示例
Istio 已經(jīng)安裝并驗(yàn)證過(guò)了,可以在上面部署示例應(yīng)用 BookInfo 了晕换,這是一個(gè)簡(jiǎn)單的書(shū)店模擬應(yīng)用午乓,由四個(gè)服務(wù)組成:網(wǎng)站首頁(yè)站宗、書(shū)籍信息闸准、評(píng)論(幾個(gè)特定的版本有評(píng)論服務(wù))和評(píng)分,全部由 Isito 管理梢灭。
部署 BookInfo 服務(wù)
定義入口網(wǎng)關(guān)
驗(yàn)證 BookInfo 應(yīng)用
通過(guò) URL 訪問(wèn)
現(xiàn)在應(yīng)該可以看到 BookInfo 示例了:
希望本部程能幫你順利的在 Kubernetes 上部署 Istio夷家。下一篇博客蒸其,我將深入 Isito 的內(nèi)部架構(gòu)、流量控制库快、權(quán)限和遙測(cè)等細(xì)節(jié)摸袁。