【編者的話】今天的文章由Istio團隊展示如何為Kubernetes的微服務提供可視化,彈性,安全和控制功能。
本文講的是<b>使用Istio服務網格管理微服務</b>服務化是現代軟體架構的核心。部署一系列子產品化的小型服務而非龐大的單體應用,可以給開發者更大的靈活性。開發者對不同子產品可以使用不同的技術,不同的語言采用不同的版本,以實作更高的效率和速度,這一點對大型開發尤為重要。
采用微服務,新問題也随之而來。因為大型系統中會包含大量微服務。獨立應用需要面對的問題,例如安全,負載均衡,監控,請求頻率限定等在每個服務中都需要處理。
目前的Istio版本專門針對Kubernetes使用者,隻需要安裝幾行代碼就可以使Kubernetes微服務即刻獲得可視化,彈性,安全管理和控制功能。
我們會在一系列的部落格文章中,講解由四個微服務組成的簡單應用。先來看怎樣用單純的Kubernetes來部署應用。接下來将要把同樣的服務部署到Istio叢集而不需要更改任何應用代碼,同時提供metrics。
在接下來的文章中,我們會更關注更先進的功能例如HTTP 請求路由,政策,認證和安全管理。
Bookinfo是一個簡單應用,其功能包括展示資訊,檢查和評價書店的書籍。這個應用由不同語言編寫的4個微服務組成。

這些容器鏡像都可以在Docker Hub上找到,在Kubernetes上部署隻需要配置yaml就可以了。
我們先關注這個應用的第一個版本:
用Kubernetes部署和部署其它服務沒有什麼不同。
ProductPage 微服務的配置檔案如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: productpage-v1
spec:
replicas: 1
template:
labels:
app: productpage
track: stable
containers:
- name: productpage
image: istio/examples-bookinfo-productpage-v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 9080
作為普通Kubernetes app運作微服務:
如果要從外部叢集通路應用,需要提供productpage服務的Nodeport位址:
現在可以通過連結位址用浏覽器通路應用了: http://$BOOKINFO_URL/productpage。
現在稍微調整一下部署,把Istio用上。首先在叢集中安裝Istio,然後再安裝Prometheus,Grafana和Zipkin。我們現在可以把之前的版本删掉,用同樣的yaml配置檔案重新開機應用,不過加上Istio。
請注意,在部署之前,我們用istioctl kube-inject指令更改了bookinfo-v1.yaml。它會把Envoy sidecar加入到Kubernetes pod,最終結果就是微服務和Envoy sidecar打包在一起并管理整個服務的通信。
在Istio網格服務中不是直接通路應用,而是通過在通路路徑中加入Envoy sideca,由Istio的管理功能來控制productpage的外部調用。 Istio的 ingress controller就是用于這個目的。
使用Istio和v1版本的bookinfo應用程式生成的部署如下所示:
設定Istio Ingress controller的NodePort address:
現在我們可以通過連結 http://$BOOKINFO_URL/productpage通路productpage,對使用者來說,這和之前沒有Istio一樣。
Istio的另外一個功能是為普羅米修斯提供metrics。這些metrics由Envoy産生,根據定義好的規則(也可以客戶化)收集并發送給普羅米修斯。這些metrics也可以用Grafana的Istio儀表盤來圖形化展現。盡管普羅米修斯是預設的監控工具,Istio也允許使用其他工具,這個在未來的部落格中會提到。
下面,我們會運作一條指令來給應用加負載:
設定Grafana’s NodePort URL:
打開連結 http://$GRAFANA_URL/dashboard/db/istio-dashboar, 可以檢查每個bookinfo服務的性能名額。
Istio的另一項功能是利用Zipkin進行跟蹤。我們獲得它的NodePort URL:
通過連結http://$ZIPKIN_URL/ 可以跟蹤整個bookinfo服務流程。
Istio的metrics功能遠不隻是友善,它通過統一的metrics為服務網格提供連貫一緻的視圖。這樣我們不用再擔心如何整合不同agent産生的metrics,不用再擔心如何為傳統app插入agent來收集metrics,也不用再擔心如何在開發流程中控制應用産生metrics。服務網格會監控所有的通信,包括那些傳統的黑盒子類的應用,并産生統一的metrics。
以上這個例子展示了如何運作Istio支援的微服務。接下來的幾周,我們将會繼續展示Istio的功能,例如政策管理和HTTP請求路由。
Istio是整個大社群共同努力的成果,Google、IBM、Lyft都在緻力于将Istio應用到大型而複雜的微服務部署中。
我們興奮地看到各方合作者熱情的參與,随着Istio越來越廣泛的應用,社群期待各位更多的參與和貢獻。
Istio團隊:Frank Budinsky,IBM 軟體工程師,Andra Cismaru,Google軟體工程師, Israel Shalom Google 産品經理。
<b>原文釋出時間為:</b>2017-10-08
<b>本文來自雲栖社群合作夥伴Dockerone.io,了解相關資訊可以關注Dockerone.io。</b>
<b></b>
<b>原文标題:</b><b>使用Istio服務網格管理微服務</b>