天天看點

使用Istio服務網格管理微服務

【編者的話】今天的文章由Istio團隊展示如何為Kubernetes的微服務提供可視化,彈性,安全和控制功能。

本文講的是<b>使用Istio服務網格管理微服務</b>服務化是現代軟體架構的核心。部署一系列子產品化的小型服務而非龐大的單體應用,可以給開發者更大的靈活性。開發者對不同子產品可以使用不同的技術,不同的語言采用不同的版本,以實作更高的效率和速度,這一點對大型開發尤為重要。

采用微服務,新問題也随之而來。因為大型系統中會包含大量微服務。獨立應用需要面對的問題,例如安全,負載均衡,監控,請求頻率限定等在每個服務中都需要處理。

目前的Istio版本專門針對Kubernetes使用者,隻需要安裝幾行代碼就可以使Kubernetes微服務即刻獲得可視化,彈性,安全管理和控制功能。

我們會在一系列的部落格文章中,講解由四個微服務組成的簡單應用。先來看怎樣用單純的Kubernetes來部署應用。接下來将要把同樣的服務部署到Istio叢集而不需要更改任何應用代碼,同時提供metrics。

在接下來的文章中,我們會更關注更先進的功能例如HTTP 請求路由,政策,認證和安全管理。

Bookinfo是一個簡單應用,其功能包括展示資訊,檢查和評價書店的書籍。這個應用由不同語言編寫的4個微服務組成。

使用Istio服務網格管理微服務

這些容器鏡像都可以在Docker Hub上找到,在Kubernetes上部署隻需要配置yaml就可以了。

我們先關注這個應用的第一個版本:

使用Istio服務網格管理微服務

用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用上。首先在叢集中安裝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服務網格管理微服務

設定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服務網格管理微服務

Istio的另一項功能是利用Zipkin進行跟蹤。我們獲得它的NodePort URL:

通過連結http://$ZIPKIN_URL/ 可以跟蹤整個bookinfo服務流程。

使用Istio服務網格管理微服務

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>

繼續閱讀