摘要:?本篇文章是系列中的第一篇,主要講述利用阿里云Kubernetes容器服務(wù),快速搭建一套用于連接、管理以及安全化微服務(wù)的開(kāi)放平臺(tái)Istio,為應(yīng)用引入和配置多個(gè)相關(guān)服務(wù)。
概述
Istio是一個(gè)用于連接/管理以及安全化微服務(wù)的開(kāi)放平臺(tái),提供了一種簡(jiǎn)單的方式用于創(chuàng)建微服務(wù)網(wǎng)絡(luò),并提供負(fù)載均衡、服務(wù)間認(rèn)證以及監(jiān)控等能力,并且關(guān)鍵的一點(diǎn)是并不需要修改服務(wù)本身就可以實(shí)現(xiàn)上述功能。
Istio主要提供以下功能:
流量管理: 控制服務(wù)之間調(diào)用的流量和API調(diào)用; 使得調(diào)用更可靠,并使網(wǎng)絡(luò)在惡劣情況下更加健壯;
可觀察性: 獲取服務(wù)之間的依賴(lài),以及服務(wù)調(diào)用的流量走向; 從而提供快速識(shí)別問(wèn)題的能力;
策略執(zhí)行:控制服務(wù)的訪(fǎng)問(wèn)策略,不需要改動(dòng)服務(wù)本身;
服務(wù)身份和安全:為網(wǎng)格中的服務(wù)提供可驗(yàn)證身份,并提供保護(hù)服務(wù)流量的能力,使其可以在不同可信度的網(wǎng)絡(luò)上流轉(zhuǎn);
本篇文章是系列中的第一篇,主要講述利用阿里云Kubernetes容器服務(wù),快速搭建一套用于連接、管理以及安全化微服務(wù)的開(kāi)放平臺(tái)Istio,為應(yīng)用引入和配置多個(gè)相關(guān)服務(wù)。
Istio架構(gòu)
從架構(gòu)上看,Istio主要分為2個(gè)部分,即:
控制面板: 管理代理,用于支持流量路由/運(yùn)行時(shí)執(zhí)行策略等;
數(shù)據(jù)面板: 由一系列的智能代理(默認(rèn)為Envoy)構(gòu)成,用于仲裁和控制服務(wù)之間的網(wǎng)絡(luò)交互;
Proxy/Envoy
Envoy將作為一個(gè)獨(dú)立的sidecar與相關(guān)微服務(wù)部署在同一個(gè)Kubernetes的pod上,并提供一系列的屬性給Mixer.Mixer以此作為依據(jù)執(zhí)行策略,并發(fā)送到監(jiān)控系統(tǒng).
這種sidecar代理模型不需要改變?nèi)魏畏?wù)本身的邏輯,并能增加一系列的功能。
Mixer
Mixer負(fù)責(zé)在服務(wù)網(wǎng)格上執(zhí)行訪(fǎng)問(wèn)控制和使用策略,并從Envoy代理和其他服務(wù)收集遙測(cè)數(shù)據(jù)。代理提取請(qǐng)求級(jí)屬性,發(fā)送到Mixer進(jìn)行評(píng)估。
Mixer包括一個(gè)靈活的插件模型,使其能夠接入到各種主機(jī)環(huán)境和基礎(chǔ)設(shè)施后端,從這些細(xì)節(jié)中抽象出Envoy代理和Istio管理的服務(wù)。 后續(xù)文章會(huì)陸續(xù)介紹相關(guān)內(nèi)容。
Pilot
Pilot負(fù)責(zé)收集和驗(yàn)證配置并將其傳播到各種Istio組件。它從Mixer和Envoy中抽取環(huán)境特定的實(shí)現(xiàn)細(xì)節(jié),為他們提供用戶(hù)服務(wù)的抽象表示,獨(dú)立于底層平臺(tái)。此外,流量管理規(guī)則(即通用4層規(guī)則和7層HTTP/gRPC路由規(guī)則)可以在運(yùn)行時(shí)通過(guò)Pilot進(jìn)行編程。
Citadel
提供服務(wù)間以及用戶(hù)之間的認(rèn)證,確保不需要修改服務(wù)代碼的前提下增強(qiáng)服務(wù)之間的安全性。主要包括以下3個(gè)組件:
身份識(shí)別
當(dāng)Istio運(yùn)行在Kubernetes時(shí),Auth會(huì)使用Kubernetes提供的服務(wù)賬號(hào)來(lái)識(shí)別運(yùn)行服務(wù)的主體是誰(shuí).
key管理
Auth提供了一個(gè)CA自動(dòng)化生成和管理key和證書(shū).
通訊安全
服務(wù)間的通訊通過(guò)Envoy在客戶(hù)端和服務(wù)端提供tunnel來(lái)保證服務(wù)調(diào)用的安全.
下面講述一下在阿里云Kubernetes容器服務(wù)基礎(chǔ)之上,如何快速搭建一套用于連接、管理以及安全化微服務(wù)的開(kāi)放平臺(tái)Istio。
準(zhǔn)備Kubernetes環(huán)境
阿里云容器服務(wù)Kubernetes 1.9.7目前已經(jīng)上線(xiàn),可以通過(guò)容器服務(wù)管理控制臺(tái)非常方便地快速創(chuàng)建 Kubernetes 集群。具體過(guò)程可以參考創(chuàng)建Kubernetes集群。
體驗(yàn)通過(guò)應(yīng)用目錄簡(jiǎn)便部署
點(diǎn)擊左側(cè)的應(yīng)用目錄,在右側(cè)選中ack-istio,如下:
點(diǎn)擊參數(shù), 可以通過(guò)修改參數(shù)配置進(jìn)行定制化,如下所示定義了通用參數(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ù)之外,還可以針對(duì)不同的模塊進(jìn)行定制,例如是否啟用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è)選擇對(duì)應(yīng)的集群、命名空間(建議新建一個(gè)namespace,如istio-system),指定發(fā)布名稱(chēng),然后點(diǎn)擊部署。
幾分鐘之后,一套用于連接、管理以及安全化微服務(wù)的開(kāi)放平臺(tái)Istio實(shí)例就可以創(chuàng)建出來(lái)。
體驗(yàn)Istio
點(diǎn)擊左側(cè)的容器組,在右側(cè)可以查看到剛創(chuàng)建的Istio相關(guān)容器組信息,如下所示:
點(diǎn)擊左側(cè)的服務(wù),在右側(cè)可以查看到剛創(chuàng)建的Istio相關(guān)服務(wù)提供的訪(fǎng)問(wèn)地址,如下所示:
默認(rèn)參數(shù)配置下,會(huì)啟用以下功能模塊:
智能路由
故障注入
流量轉(zhuǎn)移
分布式跟蹤Open Tracing/Jaeger
遙測(cè)指標(biāo)數(shù)據(jù)收集Prometheus
遙測(cè)指標(biāo)數(shù)據(jù)可視化Grafana
服務(wù)圖Service Graph 與Weave支持
服務(wù)網(wǎng)格監(jiān)控Kiali
下一篇文章會(huì)通過(guò)一個(gè)官方示例來(lái)講述,在阿里云Kubernetes容器服務(wù)基礎(chǔ)之上,如何使用Istio進(jìn)行微服務(wù)開(kāi)發(fā)、管理、保護(hù)及監(jiān)控等。
總結(jié)
我們可以利用阿里云Kubernetes容器服務(wù),快速搭建一套用于連接、管理以及安全化微服務(wù)的開(kāi)放平臺(tái)Istio,為應(yīng)用引入和配置多個(gè)相關(guān)服務(wù)。歡迎大家使用阿里云上的容器服務(wù),快速搭建微服務(wù)的開(kāi)放治理平臺(tái)Istio,比較簡(jiǎn)單地集成到自己項(xiàng)目的微服務(wù)開(kāi)發(fā)中。
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
評(píng)論