今日头条
摘要: 本篇文章是系列中的第一篇,主要讲述利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio,为应用引入和配置多个相关服务。
Istio是一个用于连接/管理以及安全化微服务的开放平台,提供了一种简单的方式用于创建微服务网络,并提供负载均衡、服务间认证以及监控等能力,并且关键的一点是并不需要修改服务本身就可以实现上述功能。
Istio主要提供以下功能:
流量管理: 控制服务之间调用的流量和API调用; 使得调用更可靠,并使网络在恶劣情况下更加健壮;
可观察性: 获取服务之间的依赖,以及服务调用的流量走向; 从而提供快速识别问题的能力;
策略执行:控制服务的访问策略,不需要改动服务本身;
服务身份和安全:为网格中的服务提供可验证身份,并提供保护服务流量的能力,使其可以在不同可信度的网络上流转;
本篇文章是系列中的第一篇,主要讲述利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio,为应用引入和配置多个相关服务。
从架构上看,Istio主要分为2个部分,即:
控制面板: 管理代理,用于支持流量路由/运行时执行策略等;
数据面板: 由一系列的智能代理(默认为Envoy)构成,用于仲裁和控制服务之间的网络交互;
Envoy将作为一个独立的sidecar与相关微服务部署在同一个Kubernetes的pod上,并提供一系列的属性给Mixer.Mixer以此作为依据执行策略,并发送到监控系统.
这种sidecar代理模型不需要改变任何服务本身的逻辑,并能增加一系列的功能。
Mixer负责在服务网格上执行访问控制和使用策略,并从Envoy代理和其他服务收集遥测数据。代理提取请求级属性,发送到Mixer进行评估。
Mixer包括一个灵活的插件模型,使其能够接入到各种主机环境和基础设施后端,从这些细节中抽象出Envoy代理和Istio管理的服务。 后续文章会陆续介绍相关内容。
Pilot负责收集和验证配置并将其传播到各种Istio组件。它从Mixer和Envoy中抽取环境特定的实现细节,为他们提供用户服务的抽象表示,独立于底层平台。此外,流量管理规则(即通用4层规则和7层HTTP/gRPC路由规则)可以在运行时通过Pilot进行编程。
提供服务间以及用户之间的认证,确保不需要修改服务代码的前提下增强服务之间的安全性。主要包括以下3个组件:
身份识别
当Istio运行在Kubernetes时,Auth会使用Kubernetes提供的服务账号来识别运行服务的主体是谁.
key管理
Auth提供了一个CA自动化生成和管理key和证书.
通讯安全
服务间的通讯通过Envoy在客户端和服务端提供tunnel来保证服务调用的安全.
下面讲述一下在阿里云Kubernetes容器服务基础之上,如何快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio。
阿里云容器服务Kubernetes 1.9.7目前已经上线,可以通过容器服务管理控制台非常方便地快速创建 Kubernetes 集群。具体过程可以参考创建Kubernetes集群。
点击左侧的应用目录,在右侧选中ack-istio,如下:
点击参数, 可以通过修改参数配置进行定制化,如下所示定义了通用参数:
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除了上述通用参数之外,还可以针对不同的模块进行定制,例如是否启用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
修改之后,在右侧选择对应的集群、命名空间(建议新建一个namespace,如istio-system),指定发布名称,然后点击部署。
几分钟之后,一套用于连接、管理以及安全化微服务的开放平台Istio实例就可以创建出来。
点击左侧的容器组,在右侧可以查看到刚创建的Istio相关容器组信息,如下所示:
点击左侧的服务,在右侧可以查看到刚创建的Istio相关服务提供的访问地址,如下所示:
默认参数配置下,会启用以下功能模块:
智能路由
故障注入
流量转移
分布式跟踪Open Tracing/Jaeger
遥测指标数据收集Prometheus
遥测指标数据可视化Grafana
服务图Service Graph 与Weave支持
服务网格监控Kiali
下一篇文章会通过一个官方示例来讲述,在阿里云Kubernetes容器服务基础之上,如何使用Istio进行微服务开发、管理、保护及监控等。
我们可以利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio,为应用引入和配置多个相关服务。欢迎大家使用阿里云上的容器服务,快速搭建微服务的开放治理平台Istio,比较简单地集成到自己项目的微服务开发中。
本文为云栖社区原创内容,未经允许不得转载。
全部0条评论
快来发表一下你的评论吧 !