概述
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.9.7 目前已经上线, 可以通过容器服务管理控制台非常方便地快速创建 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 | 0.8 |
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, 比较简单地集成到自己项目的微服务开发中.
来源: https://yq.aliyun.com/articles/599874