在Play with Kubernetes平臺上以測試驅動的方式部署Istio

原文連接:www.knowledgehut.com/blog/cloud-… node

轉載自:mp.weixin.qq.com/s/_4cbG5XK0… git

做者:Ajeet Raina github

譯者:blackpigletdocker

在Play with Kubernetes平臺上以測試驅動的方式部署Istio

做爲一名全棧開發,假如最近花了很多時間開發應用,確定已經理解了微服務架構下要面臨的一系列全新挑戰。儘管應用已經從龐大的單體應用轉變成了開發更快、彈性更好、更小也更聚焦的微服務,但現實是,開發者須要開始操心將這些服務集成到分佈式系統中的問題了,包括服務發現、負載均衡、註冊、容錯、監控、路由、兼容和安全等。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 的內部架構、流量控制、權限和遙測等細節。

相關閱讀

ServiceMesher社區信息

微信羣:聯繫我入羣

社區官網:www.servicemesher.com

Slack:servicemesher.slack.com 須要邀請才能加入

Twitter: twitter.com/servicemesh…

GitHub:github.com/

更多Service Mesh諮詢請掃碼關注微信公衆號ServiceMesher。

相關文章
相關標籤/搜索