前言
本系列文章主要从源码(35e2b904)出发,对istio做深入剖析,让大家对istio有更深的认知,从而方便平时排查问题。不了解Service Mesh和Istio的同学请先阅读敖小剑老师如下文章进行概念上的理解:
本文主要对istio在ubuntu16.04下环境搭建做简单介绍,Mac用户和其他linux发行版用户请根据bash脚本做相应调整。
概述
Istio为希腊文,意思是“启航”,和“kubernetes(舵手)”遥相呼应,是一个开源的微服务管理、保护、监控的基础设施。Istio发音“意丝帝欧”,重音在“意”上。
前两篇文章主要对istio开发环境以及通过服务治理配置生效流程做了介绍。考虑到有些用户可能没有接触过Istio,本文会对Istio整体架构、内部各组件做介绍。
Istio是逻辑上分为数据平面(Data Plane)和控制平面(Control Plane)。
- 数据平面的含义是什么?官网是这么描述的:
The data plane is composed of a set of intelligent proxies (Envoy) deployed as sidecars that mediate and control all network communication between microservices.
数据平面由一组作为sidecar智能代理(Envoy)和它掌控网络通信的的微服务实例组成。sidecar的意思是边三轮,一个Envoy实例掌控一个微服务实例的入口和出口流量,像边三轮一样。
- 对于控制平面,官网给出的定义是:
The control plane is responsible for managing and configuring proxies to route traffic, as well as enforcing policies at runtime.
控制平面由Pliot、Mixer、Istio-Auth组成,负责管理和配置代理的路由流量以及运行时服务治理策略的执行。
整体架构
Istio架构图如下所示:
Envoy
是一个高性能轻量级代理,它掌控了service的入口流量和出口流量,它提供了很多内置功能,如动态负载服务发现、负载均衡、TLS终止、HTTP/2 & gRPC流量代理、熔断、健康检查等功能。Mixer
翻译过来是混音器,Mixer负责在整个Service Mesh中实施访问控制和使用策略。Mixer是一个可扩展组件,内部提供了多个模块化的适配器(adapter)。通过各种适配器。
Envoy提供request级别的属性(attributes)数据。这些数据交由Mixer进行评估和处理,Mixer中的各种适配器(adapter)基于这些属性数据,来实现日志记录、监控指标采集展示、配额管理、ACL检查等功能。Pilot
翻译过来是领航员,Pliot对Envoy的生命周期进行管理,同时提供了智能路由(如A/B测试、金丝雀部署)、流量管理(超时、重试、熔断)功能。Pliot接收用户指定的高级路由规则配置,转换成Envoy的配置,使这些规则生效。Istio-Auth
服务间认证和终端用户认证功能。
源码结构介绍
Istio源码托管于Github,项目使用Go开发。
以35e2b904为例,istio代码结构如下所示:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32.
├── addons
├── bin
├── broker
├── docker
├── galley
├── install
├── istioctl
├── mixer
├── pilot
├── pkg
├── prow
├── release
├── samples
├── security
├── tests
├── tools
├── vendor
├── codecov.requirement
├── codecov.skip
├── CONTRIBUTING.md
├── downloadIstio.sh
├── Gopkg.lock
├── Gopkg.toml
├── istio.deps
├── istio.VERSION
├── istio.yaml
├── LICENSE
├── lintconfig_base.json
├── Makefile
├── OWNERS
└── README.md
部分包\文件\文件夹功能列表如下:
Package/Directory/File | Introduction |
---|---|
addons | 一些插件,比如展示metrics的grafana和绘制服务调用图的servicegraph |
bin | 存放初始化依赖、编译、插件证书检查、代码生成的脚本 |
broker | Istio对Open Service Broker的一种实现,该API使得外部服务能自动访问Istio服务。broker目前还处于研发阶段。 |
galley | 提供了Istio的配置管理功能,目前还处于研发阶段。 |
install | 生成各环境(ansible、consul、ereka、kubernetes等)安装istio时需要yaml配置清单。 |
istioctl | istio终端控制工具(类似kubectl之于kubernetes),用户通过istioctl来修改istio运行时配置,执行服务治理策略。 |
mixer | “混音器”,参与到tracffic处理流程。通过对envoy上报的attributes进行处理,结合内部的adapters实现日志记录、监控指标采集展示、配额管理、ACL检查等功能。 |
pilot | “领航员”,pliot对Envoy的生命周期进行管理,同时提供了智能路由(如A/B测试、金丝雀部署)、流量管理(超时、重试、熔断)功能。 |
pkg | 顶级公共包,包含istio版本处理、tracing、日志记录、缓存管理等。 |
release | 包含Istio在各平台上进行编译的脚本。 |
samples | Istio提供的微服务样例,比如bookinfo。 |
security | Istio用户身份验证、服务间认证。 |
tests | 测试用例、脚本等。 |
vendor | dep生成的第三方依赖。 |
Gopkg.* | dep需要version config和version lock文件。 |
Makefile | Istio Makefile,编译docker镜像时会引用tools/istio-docker.mk这个Makefile。 |
开发环境搭建
安装docker
1 | # 参考 https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-docker-ce-1 |
配置docker代理[可选]
新建/etc/systemd/system/docker.service.d/http-proxy.conf,添加如下配置
1 | [Service] |
安装virtualbox
1 | # virtualbox需要装最新的5.2.10, https://www.virtualbox.org/wiki/Linux_Downloads |
安装k8s集群
使用vagrant安装k8s集群[建议]
参考jimmysong的vagrant教程kubernetes-vagrant-centos-cluster,其中节点个数根据自己机器配置酌情更改(参考kubernetes-vagrant-centos-cluster)。
使用minikube安装k8s集群[可选]
- 安装minikube
1 | curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/ # 下载minikube |
- 启动k8s
1 | # 注minikube可以不使用virtualbox启动k8s,不过需要dockerc处于桥接模式,否则可能导致网络连接不通,配置过程请自行搜索 |
配置Istio repo
- 配置github并拉取代码
1 | # 配置github代理 |
- 配置环境变量
未避免污染全局环境变量,强烈建议安装autoenv。
1 | cd $GOPATH/src/istio.io/istio |
在istio根目录下新增.env文件,配置如下:
1 | export GOPATH=$YOUR_GOPATH # $YOUR_GOPATH为你的GOPATH路径 |
使当前.env生效:
1 | cd . |
Istio编译组件并测试
- 编译镜像
1 | # make init # 初始化,检查目录结构、Go版本号、初始化环境变量、检查vendor等 |
1 | # 其他指令 |
- 其他脚本
1 | cd $GOPATH/src/istio.io/istio |
- 测试镜像
作者
郑伟,小米信息技术部基础架构组
招聘
小米信息部武汉研发中心,信息部是小米公司整体系统规划建设的核心部门,支撑公司国内外的线上线下销售服务体系、供应链体系、ERP体系、内网OA体系、数据决策体系等精细化管控的执行落地工作,服务小米内部所有的业务部门以及 40 家生态链公司。
同时部门承担大数据基础平台研发和微服务体系建设落,语言涉及 Java、Go,长年虚位以待对大数据处理、大型电商后端系统、微服务落地有深入理解和实践的各路英雄。
欢迎投递简历:jin.zhang(a)xiaomi.com
更多技术文章:小米信息部技术团队
扫描二维码,分享此文章