原文連接:www.knowledgehut.com/blog/cloud-… node
轉載自:mp.weixin.qq.com/s/_4cbG5XK0… git
做者:Ajeet Raina github
譯者:blackpigletdocker
做爲一名全棧開發,假如最近花了很多時間開發應用,確定已經理解了微服務架構下要面臨的一系列全新挑戰。儘管應用已經從龐大的單體應用轉變成了開發更快、彈性更好、更小也更聚焦的微服務,但現實是,開發者須要開始操心將這些服務集成到分佈式系統中的問題了,包括服務發現、負載均衡、註冊、容錯、監控、路由、兼容和安全等。bootstrap
讓咱們更詳細的拆解微服務架構下開發和運維面臨的挑戰吧。先來看看第一代簡單的 Service Mesh 場景,以下圖所示,服務 A 要和 服務 B 通訊,沒有采用直接通訊的方式,請求是經過 NGINX 路由的。NGINX 從 Consul(服務發現工具)查找路由,並在收到 HTTP 502 響應時,自動重試。api
但隨着微服務架構的到來,服務數量的增加一發不可收拾,下面列出的是開發和運維團隊遇到的問題:瀏覽器
如何讓日益增加的微服務們互聯?安全
如何爲微服務提供負載均衡?bash
爲微服務提供基於角色的路由;微信
如何控制微服務的出口流量,如何實現灰度發佈?
如何控制不斷增加的微服務的複雜度?
如何用富路由規則實現細粒度的流量控制?
實現流量加密、服務到服務的鑑權和強身份聲明的挑戰
簡而言之,雖然你能夠在應用和網絡中間件中開啓服務發現和重試機制,但實際上,想讓服務發現正常工做是很是困難的。
初試 Istio Service Mesh
Service Mesh 是 2018 年度最火熱的流行詞之一,它是微服務的可配置基礎架構層,負責微服務應用間的交互,service mesh 讓微服務實例間的交互更靈活、可靠和快速。Mesh 層提供了服務發現、負載均衡、加密、鑑權和驗證,支持熔斷機制等其餘能力。
Istio 是徹底開源的,可透明的部署在已有的分佈式應用上。Istio 1.0 版本在上個月發佈,已經生產環境可用。Istio 徹底由 Go 語言編寫,提供成熟的 API 接口能夠接入到任何日誌平臺、遙測和策略系統中。Istio 在 GitHub 上發佈,對系統的性能影響很小,豐富的特性讓你能夠順利、高效的運行分佈式微服務架構,並提供統一的保護、鏈接和監控方法。
Istio 對系統的影響很小,它在 GitHub 上發佈,上個月,Istio 1.0 版本已經發布,而且生產環境可用。
Istio 能帶來什麼好處呢?
Istio 提供服務的鏈接、保護、控制和觀測能力。
減小服務部署的複雜度,減輕部署團隊的壓力。
在無需修改應用代碼的前提下,爲開發和開發運維提供了細粒度的流量可視化和控制。
爲 CIO 提供了幫助全企業安全實施和合規型需求的必要工具。
在 service mesh 層提供了統一的行爲監測和運營控制。
Istio 讓爲服務網絡提供 HTTP、gRPC、Web Socket 和 TCP 流量的自動負載均衡變的輕鬆。
提供了細粒度的流量行爲控制,包括:富路由規則、重試、故障轉移和失敗注入。
支持插件化的策略控制層和配置 API,支持訪問控制、流量限制和配額。
Istio 爲集羣內的所有流量提供自動的度量、日誌、追蹤,包括進羣的入口和出口。
以強身份驗證和鑑權的方式,提供了集羣內安全的服務間通訊。
如何想深刻 Istio 架構,我強烈推薦 Istio 官方網站(istio.io/zh)。
開始演示!!!
在這篇文章中,我將展現如何在 Play with Kubernetes(PWK)中免費部署 Istio,這是個由 Docker 提供的實驗網站,是讓用戶在幾秒鐘內跑起來 Kubernetes 集羣的試驗環境。PWK 提供了在瀏覽器中使用免費 CentOS Linux 虛擬機的體驗,其實是 Docker-in-Docker(DinD)技術模擬了多虛擬機/PC 的效果。
打開 labs.play-with-k8s.com/,訪問 Kubernetes Playground。
點擊 "Login" 按鈕,以 Docker Hub 或 GitHub ID 登錄。
完成本教程,你將得到本身的實驗環境。
添加第一個 Kubernetes 節點
點擊左側的 "Add New Instance" 來構建你的第一個 Kubernetes 集羣節點,自動命名爲 "node1",每一個節點都預裝來 Docker 社區版(CE)和 Kubeadm。這個節點將成爲集羣的主節點。
啓動主節點
用以下腳本初始化主節點(node1)來啓動 Kubernetes 集羣,複製該腳本內容到文件 bootstrap.sh,並執行命令添加可執行權限:chmod +x bootstrap.sh
執行腳本時,做爲初始化的一部分,kubeadm 會寫入幾個必要的配置文件、設置 RBAC 並部署 Kubernetes 控制平面組件(例如 kube-apiserver、kube-dns、kube-proxy、etcd 等)。控制平面組件以 docker 容器形式部署。
複製上面的 kubeadm join token 命令,留做下步使用,此命令用來在集羣中加入其餘節點。
添加從節點
點擊 "Add New Node" 添加新的從節點
驗證集羣狀態
驗證運行的 Pods
安裝 Istio 1.0.0
Istio 部署在單獨的 Kubernetes 命名空間裏:istio-system,咱們事後再來驗證。如今,複製以下內容到文件,命名爲 install_istio.sh,並保存。添加可執行權限,運行以安裝 Istio 和相關工具。
屏幕上應顯示以下內容:
如上所示,默認會安裝 Prometheus、ServiceGraph、Jaeger、Grafana 和 Zipkin。
請注意:運行該腳本時,可能會報以下錯誤:
unable to recognize "install/kubernetes/istio-demo.yaml": no matches for admissionregistration.k8s.io/, Kind=MutatingWebhookConfiguration複製代碼
這是正常的,命令一執行完,可在頁面的中央看到一長串展現的端口。
驗證服務
暴露服務
要暴露 Prometheus、Grafana 和 服務圖標服務,須要先刪除已有的服務,用 NodePort 替換 ClusterIP,用實例頁頂端展現的端口訪問服務(以下所示)。
點擊 "30004" 訪問 Grafana 頁,點擊 "30003" 訪問 Prometheus 頁。
能夠以下圖所示,選擇必要配置查看 Prometheus 度量:
在 Grafana 頁,添加 Prometheus 數據源,並確認 Dashboard 已經運行。
恭喜!你已經將 Istio 部署在 Kubernetes 集羣上了,K8S playgroud 上已經安裝的服務包括:
Istio Controllers,以及相關 RBAC 規則
Istio 定製資源定義
Prometheus 和 Grafana 監控系統
Jeager 分佈式追蹤系統
Istio Sidecar 注入程序(下一節咱們再來仔細看看)
安裝 Istioctl
Istioctl 是 Istio 的命令行配置工具,能夠用來建立、查詢、修改和刪除 Istio 系統的配置資源。
部署 BookInfo 應用示例
Istio 已經安裝並驗證過了,能夠在上面部署示例應用 BookInfo 了,這是一個簡單的書店模擬應用,由四個服務組成:網站首頁、書籍信息、評論(幾個特定的版本有評論服務)和評分,所有由 Isito 管理。
部署 BookInfo 服務
定義入口網關
驗證 BookInfo 應用
經過 URL 訪問
如今應該能夠看到 BookInfo 示例了:
但願本部程能幫你順利的在 Kubernetes 上部署 Istio。下一篇博客,我將深刻 Isito 的內部架構、流量控制、權限和遙測等細節。
微信羣:聯繫我入羣
Slack:servicemesher.slack.com 須要邀請才能加入
Twitter: twitter.com/servicemesh…
GitHub:github.com/
更多Service Mesh諮詢請掃碼關注微信公衆號ServiceMesher。