摘要:?本篇文章是系列中的第一篇,主要講述利用阿里云Kubernetes容器服務(wù),快速搭建一套用于連接、管理以及安全化微服務(wù)的開放平臺Istio,為應(yīng)用引入和配置多個相關(guān)服務(wù)。
概述
Istio是一個用于連接/管理以及安全化微服務(wù)的開放平臺,提供了一種簡單的方式用于創(chuàng)建微服務(wù)網(wǎng)絡(luò),并提供負載均衡、服務(wù)間認證以及監(jiān)控等能力,并且關(guān)鍵的一點是并不需要修改服務(wù)本身就可以實現(xiàn)上述功能。
Istio主要提供以下功能:
流量管理: 控制服務(wù)之間調(diào)用的流量和API調(diào)用; 使得調(diào)用更可靠,并使網(wǎng)絡(luò)在惡劣情況下更加健壯;
可觀察性: 獲取服務(wù)之間的依賴,以及服務(wù)調(diào)用的流量走向; 從而提供快速識別問題的能力;
策略執(zhí)行:控制服務(wù)的訪問策略,不需要改動服務(wù)本身;
服務(wù)身份和安全:為網(wǎng)格中的服務(wù)提供可驗證身份,并提供保護服務(wù)流量的能力,使其可以在不同可信度的網(wǎng)絡(luò)上流轉(zhuǎn);
本篇文章是系列中的第一篇,主要講述利用阿里云Kubernetes容器服務(wù),快速搭建一套用于連接、管理以及安全化微服務(wù)的開放平臺Istio,為應(yīng)用引入和配置多個相關(guān)服務(wù)。
Istio架構(gòu)
從架構(gòu)上看,Istio主要分為2個部分,即:
控制面板: 管理代理,用于支持流量路由/運行時執(zhí)行策略等;
數(shù)據(jù)面板: 由一系列的智能代理(默認為Envoy)構(gòu)成,用于仲裁和控制服務(wù)之間的網(wǎng)絡(luò)交互;
Proxy/Envoy
Envoy將作為一個獨立的sidecar與相關(guān)微服務(wù)部署在同一個Kubernetes的pod上,并提供一系列的屬性給Mixer.Mixer以此作為依據(jù)執(zhí)行策略,并發(fā)送到監(jiān)控系統(tǒng).
這種sidecar代理模型不需要改變?nèi)魏畏?wù)本身的邏輯,并能增加一系列的功能。
Mixer
Mixer負責(zé)在服務(wù)網(wǎng)格上執(zhí)行訪問控制和使用策略,并從Envoy代理和其他服務(wù)收集遙測數(shù)據(jù)。代理提取請求級屬性,發(fā)送到Mixer進行評估。
Mixer包括一個靈活的插件模型,使其能夠接入到各種主機環(huán)境和基礎(chǔ)設(shè)施后端,從這些細節(jié)中抽象出Envoy代理和Istio管理的服務(wù)。 后續(xù)文章會陸續(xù)介紹相關(guān)內(nèi)容。
Pilot
Pilot負責(zé)收集和驗證配置并將其傳播到各種Istio組件。它從Mixer和Envoy中抽取環(huán)境特定的實現(xiàn)細節(jié),為他們提供用戶服務(wù)的抽象表示,獨立于底層平臺。此外,流量管理規(guī)則(即通用4層規(guī)則和7層HTTP/gRPC路由規(guī)則)可以在運行時通過Pilot進行編程。
Citadel
提供服務(wù)間以及用戶之間的認證,確保不需要修改服務(wù)代碼的前提下增強服務(wù)之間的安全性。主要包括以下3個組件:
身份識別
當(dāng)Istio運行在Kubernetes時,Auth會使用Kubernetes提供的服務(wù)賬號來識別運行服務(wù)的主體是誰.
key管理
Auth提供了一個CA自動化生成和管理key和證書.
通訊安全
服務(wù)間的通訊通過Envoy在客戶端和服務(wù)端提供tunnel來保證服務(wù)調(diào)用的安全.
下面講述一下在阿里云Kubernetes容器服務(wù)基礎(chǔ)之上,如何快速搭建一套用于連接、管理以及安全化微服務(wù)的開放平臺Istio。
準備Kubernetes環(huán)境
阿里云容器服務(wù)Kubernetes 1.9.7目前已經(jīng)上線,可以通過容器服務(wù)管理控制臺非常方便地快速創(chuàng)建 Kubernetes 集群。具體過程可以參考創(chuàng)建Kubernetes集群。
體驗通過應(yīng)用目錄簡便部署
點擊左側(cè)的應(yīng)用目錄,在右側(cè)選中ack-istio,如下:
點擊參數(shù), 可以通過修改參數(shù)配置進行定制化,如下所示定義了通用參數(shù):
ParameterDescriptionDefaultglobal.hubSpecifies the HUB for most images used by Istioregistry.cn-hangzhou.aliyuncs.com/aliacs-app-catalogglobal.tagSpecifies the TAG for most images used by Istio0.8global.proxy.imageSpecifies the proxy image nameistio-proxyv2global.imagePullPolicySpecifies the image pull policyIfNotPresentglobal.controlPlaneSecurityEnabledSpecifies whether control plane mTLS is enabledfalseglobal.mtls.enabledSpecifies whether mTLS is enabled by default between servicesfalseglobal.mtls.mtlsExcludedServicesList of FQDNs to exclude from mTLS-"kubernetes.default.svc.cluster.local"global.rbacEnabledSpecifies whether to create Istio RBAC rules or nottrueglobal.refreshIntervalSpecifies the mesh discovery refresh interval10sglobal.arch.amd64Specifies the scheduling policy for amd64 architectures2global.arch.s390xSpecifies the scheduling policy for s390x architectures2global.arch.ppc64leSpecifies the scheduling policy for ppc64le architectures2galley.enabledSpecifies whether Galley should be installed for server-side config validation. Requires k8s >= 1.9false除了上述通用參數(shù)之外,還可以針對不同的模塊進行定制,例如是否啟用grafana、prometheus、tracing、weave-scope以及kiali等:
##?addons?configuration#grafana: ??enabled:?true ??replicaCount:?1 ??image:?istio-grafana ??service: ????name:?http????type:?ClusterIP ????externalPort:?3000 ????internalPort:?3000 .... prometheus: ??enabled:?true ??replicaCount:?1 ??image: ????repository:?registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/istio-prometheus ????tag:?latest .... tracing: ??enabled:?true ??jaeger: ????enabled:?true.... weave-scope: ??enabled:?true ??global:????#?global.image:?the?image?that?will?be?used?for?this?release ????image: ??????repository:?weaveworks/scope ??????tag:?"1.9.0" ??????#?global.image.pullPolicy:?must?be?Always,?IfNotPresent,?or?Never ??????pullPolicy:?"IfNotPresent".... kiali: ??enabled:?true ??replicaCount:?1 ??image: ????repository:?registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/istio-kiali ????tag:?dev
修改之后,在右側(cè)選擇對應(yīng)的集群、命名空間(建議新建一個namespace,如istio-system),指定發(fā)布名稱,然后點擊部署。
幾分鐘之后,一套用于連接、管理以及安全化微服務(wù)的開放平臺Istio實例就可以創(chuàng)建出來。
體驗Istio
點擊左側(cè)的容器組,在右側(cè)可以查看到剛創(chuàng)建的Istio相關(guān)容器組信息,如下所示:
點擊左側(cè)的服務(wù),在右側(cè)可以查看到剛創(chuàng)建的Istio相關(guān)服務(wù)提供的訪問地址,如下所示:
默認參數(shù)配置下,會啟用以下功能模塊:
智能路由
故障注入
流量轉(zhuǎn)移
分布式跟蹤Open Tracing/Jaeger
遙測指標數(shù)據(jù)收集Prometheus
遙測指標數(shù)據(jù)可視化Grafana
服務(wù)圖Service Graph 與Weave支持
服務(wù)網(wǎng)格監(jiān)控Kiali
下一篇文章會通過一個官方示例來講述,在阿里云Kubernetes容器服務(wù)基礎(chǔ)之上,如何使用Istio進行微服務(wù)開發(fā)、管理、保護及監(jiān)控等。
總結(jié)
我們可以利用阿里云Kubernetes容器服務(wù),快速搭建一套用于連接、管理以及安全化微服務(wù)的開放平臺Istio,為應(yīng)用引入和配置多個相關(guān)服務(wù)。歡迎大家使用阿里云上的容器服務(wù),快速搭建微服務(wù)的開放治理平臺Istio,比較簡單地集成到自己項目的微服務(wù)開發(fā)中。
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
評論
查看更多