概述
[Announcement
] Istio第一个生产可用版本1.0于2018年7月31日正式发布。
注意:在使用阿里云Kubernetes容器服务Istio 1.0的过程中,如果遇到类似CRD版本问题,请参考我们提供的问题分析。 我们会持续更新遇到的问题及其解决方法。
Istio是一个用于连接/管理以及安全化微服务的开放平台,提供了一种简单的方式用于创建微服务网络,并提供负载均衡、服务间认证以及监控等能力,并且关键的一点是并不需要修改服务本身就可以实现上述功能。
Istio主要提供以下功能:
- 流量管理: 控制服务之间调用的流量和API调用; 使得调用更可靠,并使网络在恶劣情况下更加健壮;
- 可观察性: 获取服务之间的依赖,以及服务调用的流量走向; 从而提供快速识别问题的能力;
- 策略执行:控制服务的访问策略,不需要改动服务本身;
- 服务身份和安全:为网格中的服务提供可验证身份,并提供保护服务流量的能力,使其可以在不同可信度的网络上流转;
本篇文章是系列中的第一篇,主要讲述利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio,为应用引入和配置多个相关服务。
阿里云Kubernetes Service Mesh实践进行时(1): Istio初体验
阿里云Kubernetes Service Mesh实践进行时(2): 通过示例深入Istio
阿里云Kubernetes Service Mesh实践进行时(3): 智能路由
阿里云Kubernetes Service Mesh实践进行时(4): 分布式追踪
阿里云Kubernetes Service Mesh实践进行时(5): 遥测数据收集、查询及可视化
阿里云Kubernetes Service Mesh实践进行时(6): 故障诊断与检测工具Weave Scope
阿里云Kubernetes Service Mesh实践进行时(7): 可观测性分析服务Kiali
Istio架构
从架构上看,Istio主要分为2个部分,即:
- 控制面板: 管理代理,用于支持流量路由/运行时执行策略等;
- 数据面板: 由一系列的智能代理(默认为Envoy)构成,用于仲裁和控制服务之间的网络交互;
Proxy/Envoy
Envoy将作为一个独立的sidecar与相关微服务部署在同一个Kubernetes的pod上,并提供一系列的属性给Mixer.Mixer以此作为依据执行策略,并发送到监控系统.
这种sidecar代理模型不需要改变任何服务本身的逻辑,并能增加一系列的功能。
Mixer
Mixer负责在服务网格上执行访问控制和使用策略,并从Envoy代理和其他服务收集遥测数据。代理提取请求级属性,发送到Mixer进行评估。
Mixer包括一个灵活的插件模型,使其能够接入到各种主机环境和基础设施后端,从这些细节中抽象出Envoy代理和Istio管理的服务。 后续文章会陆续介绍相关内容。
Pilot
Pilot负责收集和验证配置并将其传播到各种Istio组件。它从Mixer和Envoy中抽取环境特定的实现细节,为他们提供用户服务的抽象表示,独立于底层平台。此外,流量管理规则(即通用4层规则和7层HTTP/gRPC路由规则)可以在运行时通过Pilot进行编程。
Citadel
提供服务间以及用户之间的认证,确保不需要修改服务代码的前提下增强服务之间的安全性。主要包括以下3个组件:
- 身份识别
- 当Istio运行在Kubernetes时,Auth会使用Kubernetes提供的服务账号来识别运行服务的主体是谁.
- key管理
- Auth提供了一个CA自动化生成和管理key和证书.
- 通讯安全
- 服务间的通讯通过Envoy在客户端和服务端提供tunnel来保证服务调用的安全.
下面讲述一下在阿里云Kubernetes容器服务基础之上,如何快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio。
准备Kubernetes环境
阿里云容器服务Kubernetes 1.10.4目前已经上线,可以通过容器服务管理控制台非常方便地快速创建 Kubernetes 集群。具体过程可以参考[创建Kubernetes集群]
体验通过应用目录简便部署
点击左侧的应用目录
,在右侧选中ack-istio
,如下:
点击参数
, 可以通过修改参数配置进行定制化,如下所示定义了通用参数:
Parameter | Description | Default |
---|---|---|
global.hub |
Specifies the HUB for most images used by Istio | registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog |
global.tag |
Specifies the TAG for most images used by Istio | 1.0.0 |
global.proxy.image |
Specifies the proxy image name | istio-proxyv2 |
global.imagePullPolicy |
Specifies the image pull policy | IfNotPresent |
global.controlPlaneSecurityEnabled |
Specifies whether control plane mTLS is enabled | false |
global.mtls.enabled |
Specifies whether mTLS is enabled by default between services | false |
global.mtls.mtlsExcludedServices |
List of FQDNs to exclude from mTLS | -"kubernetes.default.svc.cluster.local" |
global.rbacEnabled |
Specifies whether to create Istio RBAC rules or not | true |
global.refreshInterval |
Specifies the mesh discovery refresh interval | 10s |
global.arch.amd64 |
Specifies the scheduling policy for amd64 architectures | 2 |
global.arch.s390x |
Specifies the scheduling policy for s390x architectures | 2 |
global.arch.ppc64le |
Specifies the scheduling policy for ppc64le architectures | 2 |
galley.enabled |
Specifies whether Galley should be installed for server-side config validation. Requires k8s >= 1.9 | false |
除了上述通用参数之外,还可以针对不同的模块进行定制,例如是否启用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相关容器组信息,如下所示:
点击左侧的服务
,在右侧可以查看到刚创建的Istio相关服务提供的访问地址,如下所示:
默认参数配置下,会启用以下功能模块:
- 智能路由
- 故障注入
- 流量转移
- 分布式跟踪Open Tracing/Jaeger
- 遥测指标数据收集Prometheus
- 遥测指标数据可视化Grafana
- 服务图Service Graph 与Weave支持
- 服务网格监控Kiali
下一篇文章会通过一个官方示例来讲述,在阿里云Kubernetes容器服务基础之上,如何使用Istio进行微服务开发、管理、保护及监控等。
总结
我们可以利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及安全化微服务的开放平台Istio,为应用引入和配置多个相关服务。欢迎大家使用阿里云上的容器服务,快速搭建微服务的开放治理平台Istio,比较简单地集成到自己项目的微服务开发中。