
翻譯一篇 Istio 部署教程,原文鏈接:test-drive-your-first-istio-deployment-using-play-with-kubernetes-platform-cloud-computing
作為一名全棧開發(fā),假如最近花了不少時(shí)間開發(fā)應(yīng)用,肯定已經(jīng)理解了微服務(wù)架構(gòu)下要面臨的一系列全新挑戰(zhàn)。盡管應(yīng)用已經(jīng)從龐大的單體應(yīng)用轉(zhuǎn)變成了開發(fā)更快、彈性更好、更小也更聚焦的微服務(wù),但現(xiàn)實(shí)是,開發(fā)者需要開始操心將這些服務(wù)集成到分布式系統(tǒng)中的問題了,包括服務(wù)發(fā)現(xiàn)、負(fù)載均衡、注冊、容錯(cuò)、監(jiān)控、路由、兼容和安全等。
讓我們更詳細(xì)的拆解微服務(wù)架構(gòu)下開發(fā)和運(yùn)維面臨的挑戰(zhàn)吧。先來看看第一代簡單的 Service Mesh 場景,如下圖所示,服務(wù) A 要和 服務(wù) B 通信,沒有采用直接通信的方式,請求是通過 NGINX 路由的。NGINX 從 Consul(服務(wù)發(fā)現(xiàn)工具)查找路由,并在收到 HTTP 502 響應(yīng)時(shí),自動(dòng)重試。


但隨著微服務(wù)架構(gòu)的到來,服務(wù)數(shù)量的增長一發(fā)不可收拾,下面列出的是開發(fā)和運(yùn)維團(tuán)隊(duì)遇到的問題:
- 如何讓日益增長的微服務(wù)們互聯(lián)?
- 如何為微服務(wù)提供負(fù)載均衡?
- 為微服務(wù)提供基于角色的路由;
- 如何控制微服務(wù)的出口流量,如何實(shí)現(xiàn)灰度發(fā)布?
- 如何控制不斷增長的微服務(wù)的復(fù)雜度?
- 如何用富路由規(guī)則實(shí)現(xiàn)細(xì)粒度的流量控制?
- 實(shí)現(xiàn)流量加密、服務(wù)到服務(wù)的鑒權(quán)和強(qiáng)身份聲明的挑戰(zhàn)
簡而言之,雖然你可以在應(yīng)用和網(wǎng)絡(luò)中間件中開啟服務(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 是完全開源的,可透明的部署在已有的分布式應(yīng)用上。Istio 1.0 版本在上個(gè)月發(fā)布,已經(jīng)生產(chǎn)環(huán)境可用。Istio 完全由 Go 語言編寫,提供成熟的 API 接口可以接入到任何日志平臺、遙測和策略系統(tǒng)中。Istio 在 GitHub 上發(fā)布,對系統(tǒng)的性能影響很小,豐富的特性讓你可以順利、高效的運(yùn)行分布式微服務(wù)架構(gòu),并提供統(tǒng)一的保護(hù)、連接和監(jiān)控方法。

Istio 對系統(tǒng)的影響很小,它在 GitHub 上發(fā)布,上個(gè)月,Istio 1.0 版本已經(jīng)發(fā)布,并且生產(chǎn)環(huán)境可用。
Istio 能帶來什么好處呢?
- Istio 提供服務(wù)的連接、保護(hù)、控制和觀測能力。
- 減少服務(wù)部署的復(fù)雜度,減輕部署團(tuán)隊(duì)的壓力。
- 在無需修改應(yīng)用代碼的前提下,為開發(fā)和開發(fā)運(yùn)維提供了細(xì)粒度的流量可視化和控制。
- 為 CIO 提供了幫助全企業(yè)安全實(shí)施和合規(guī)型需求的必要工具。
- 在 service mesh 層提供了統(tǒng)一的行為監(jiān)測和運(yùn)營控制。
- Istio 讓為服務(wù)網(wǎng)絡(luò)提供 HTTP、gRPC、Web Socket 和 TCP 流量的自動(dòng)負(fù)載均衡變的輕松。
- 提供了細(xì)粒度的流量行為控制,包括:富路由規(guī)則、重試、故障轉(zhuǎn)移和失敗注入。
- 支持插件化的策略控制層和配置 API,支持訪問控制、流量限制和配額。
- 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)。

開始演示?。?!
在這篇文章中,我將展示如何在 Play with Kubernetes(PWK)中免費(fèi)部署 Istio,這是個(gè)由 Docker 提供的實(shí)驗(yàn)網(wǎng)站,是讓用戶在幾秒鐘內(nèi)跑起來 Kubernetes 集群的試驗(yàn)環(huán)境。PWK 提供了在瀏覽器中使用免費(fèi) CentOS Linux 虛擬機(jī)的體驗(yàn),實(shí)際上是 Docker-in-Docker(DinD)技術(shù)模擬了多虛擬機(jī)/PC 的效果。
打開 https://labs.play-with-k8s.com/,訪問 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" 來構(gòu)建你的第一個(gè) Kubernetes 集群節(jié)點(diǎn),自動(dòng)命名為 "node1",每個(gè)節(jié)點(diǎn)都預(yù)裝來 Docker 社區(qū)版(CE)和 Kubeadm。這個(gè)節(jié)點(diǎn)將成為集群的主節(jié)點(diǎn)。

啟動(dòng)主節(jié)點(diǎn)
用如下腳本初始化主節(jié)點(diǎn)(node1)來啟動(dòng) Kubernetes 集群,復(fù)制該腳本內(nèi)容到文件 bootstrap.sh,并執(zhí)行命令添加可執(zhí)行權(quán)限:chmod +x bootstrap.sh

執(zhí)行腳本時(shí),作為初始化的一部分,kubeadm 會寫入幾個(gè)必要的配置文件、設(shè)置 RBAC 并部署 Kubernetes 控制平面組件(例如 kube-apiserver、kube-dns、kube-proxy、etcd 等)??刂破矫娼M件以 docker 容器形式部署。

復(fù)制上面的 kubeadm join token 命令,留作下步使用,此命令用來在集群中加入其他節(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,我們過后再來驗(yàn)證?,F(xiàn)在,復(fù)制如下內(nèi)容到文件,命名為 install_istio.sh,并保存。添加可執(zhí)行權(quán)限,運(yùn)行以安裝 Istio 和相關(guān)工具。

屏幕上應(yīng)顯示如下內(nèi)容:

如上所示,默認(rèn)會安裝 Prometheus、ServiceGraph、Jaeger、Grafana 和 Zipkin。
請注意:運(yùn)行該腳本時(shí),可能會報(bào)如下錯(cuò)誤:
unable to recognize "install/kubernetes/istio-demo.yaml": no matches for admissionregistration.k8s.io/, Kind=MutatingWebhookConfiguration
這是正常的,命令一執(zhí)行完,可在頁面的中央看到一長串展示的端口。


驗(yàn)證服務(wù)

暴露服務(wù)
要暴露 Prometheus、Grafana 和 服務(wù)圖標(biāo)服務(wù),需要先刪除已有的服務(wù),用 NodePort 替換 ClusterIP,用實(shí)例頁頂端展示的端口訪問服務(wù)(如下所示)。


點(diǎn)擊 "30004" 訪問 Grafana 頁,點(diǎn)擊 "30003" 訪問 Prometheus 頁。


可以如下圖所示,選擇必要配置查看 Prometheus 度量:

在 Grafana 頁,添加 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é)我們再來仔細(xì)看看)
安裝 Istioctl
Istioctl 是 Istio 的命令行配置工具,可以用來創(chuàng)建、查詢、修改和刪除 Istio 系統(tǒng)的配置資源。

部署 BookInfo 應(yīng)用示例
Istio 已經(jīng)安裝并驗(yàn)證過了,可以在上面部署示例應(yīng)用 BookInfo 了,這是一個(gè)簡單的書店模擬應(yīng)用,由四個(gè)服務(wù)組成:網(wǎng)站首頁、書籍信息、評論(幾個(gè)特定的版本有評論服務(wù))和評分,全部由 Isito 管理。
部署 BookInfo 服務(wù)

定義入口網(wǎng)關(guān)

驗(yàn)證 BookInfo 應(yīng)用


通過 URL 訪問

現(xiàn)在應(yīng)該可以看到 BookInfo 示例了:

希望本部程能幫你順利的在 Kubernetes 上部署 Istio。下一篇博客,我將深入 Isito 的內(nèi)部架構(gòu)、流量控制、權(quán)限和遙測等細(xì)節(jié)。