系列文章:
总目录索引:九析带你轻松完爆 istio 服务网格系列教程
目录
1 前言
2 微服务的历史
3 istio
4 istio 使用
4.1 下载 istio
4.2 安装 istio
4.3 配置 istioctl 工具路径
4.4 实现 istioctl 自动补全功能
4.5 安装学习版 istio
4.6 卸载 istio
5 总结
1 前言
你可以从下面截图中获取免费的、更生动的视频资料,在 b 站搜索“九析”:
2 微服务的历史
微服务从马丁提出到今天为止,大体上经过了四代。
第一代(1.0 时代):服务发现阶段。单体服务发展到微服务后,原先的通信方式从进程内函数调用发展到了不同服务器上的不同服务之间的进程调用,这样的架构变化,首先要解决的关键问题就是服务的注册与发现。代表技术便是 dubbo 和 grpc、brpc 框架之争。
第二代(2.0 时代):当服务发现问题解决了之后,紧接着带来的挑战便是服务治理。何为服务治理,就是除了服务之间通讯之外,还需要更深层次考虑到服务之间调用的失败重试、容错、降级、监控、安全、灰度、流控能问题。
第三代(3.0 时代):微服务 2.0 时代带来了解决方案的百花齐放,各方你方唱罢,我方登场,相同问题的不同解决方案纷纷亮相,一时间风云际会,好不热闹。比如网关解决方案就有 zuul、gateway;全链路监控就有 pinpoint、zipkin、jaeger 等。各种服务治理的解决方案层出不穷带来了很多的积极作用,但负面影响也随之而来,那便是标准的不统一、维护方式各异。服务治理变成了各种中间件的相互嫁接,服务治理的好坏全靠工程师的技术水平高低。基于此,服务治理的标准化、一致化需求越来越强烈,于是服务网格便应运而生。服务网格的思想便是将服务治理标准化,并统一下沉到基础设施层。就像 50、60 年代的美国,当时帮派林立,不同地盘治理的好坏主要依靠各个帮派屌不屌,但是到了后来政府能力逐渐强大和稳定,很多地下秩序不再依靠黑帮,而统一让政府规则化一样的道理。
第四代(4.0 时代):无服务时代,即 serveless 时代,说的时髦点就是去中心化时代。这个目前还并不成熟,本文先略去不谈。
3 istio
istio 就是微服务 3.0 时代的产物,是 service mesh 的代表性产品。由谷歌和 IBM 联手打造。借助谷歌的拳头产品 k8s,顷刻完爆众神。istio 跟 k8s 之间到底什么关系?你可以这么来理解,k8s 相当于王健林,istio 相当于王思聪。怎么说呢?k8s 负责打地基,打造基础设施,istio 负责在地基之上整合各种服务模式。大家都知道有个女的去万达影院看电影抱怨爆米花少,结果王思聪承诺给她终生免费提供爆米花的事吧。这就相当于请求失败并重试成功的典型服务治理案例。
istio 包括如下特性:
1 http, gRPC, WebSocket 和 TCP 通信的自动负载均衡
2 通过丰富的路有规则、重试、故障转移和故障注入对流量行为进行细粒度控制
3 可插拔的策略层和配置 API,支持访问控制,速率限制和配额
4 集群内所有流量的自动度量,日志和跟踪,包括集群的入口和出口
5 通过强大的基于身份和身份验证和授权,在集群中实现安全的服务间通信
简单总结便是:istio 负责网络数据包的流量管理(traffic management)、服务的安全保护(secure)、策略(policy,比如黑白名单制定)和可观察(observability,比如监控)。
4 istio 使用
逼逼完了理论后(其实我最不喜欢就是扯理论),开始进入完爆 istio 环节。
4.1 下载 istio
在玩 istio 之前,必须要有前置条件,那就是你要先把 k8s 完爆了,你需要首先搭建 k8s 环境。怎么搭建 k8s,你可以参考本人的《一分钟搭建 k8s 教程》,不用谢。
使用如下语句下载 istio,下载速度会有点慢。至于有多慢?谁试谁知道。而且时不时会断,所以你要时刻关注,如果失败了,需要重新执行。这种感觉就好像你在小便,后面总是有人推你,让你整个过程非常不顺畅,非常不爽。
curl -L https://istio.io/downloadIstio | sh -
在下载过程中,如果你遭遇如下错误:
Unable to get latest Istio version. Set ISTIO_VERSION env var and re-run. For example: export ISTIO_VERSION=1.0.4
你需要设置一下你要下载的 istio 版本,语句如下:
export ISTIO_VERSION=1.4.5
下载成功后的截图如下:
4.2 安装 istio
安装 istio 前,首先解压缩:
tar -zxvf istio-1.4.5-linux.tar.gz
解压缩后的目录结构截图如下:
关键目录说明如下:
install/kubernetes # istio 资源文件
samples # istio 样例
bin/istioctl # istio 客户端工具,用来手动注入 envoy
4.3 配置 istioctl 工具路径
istioctl 是 istio 的客户端工具,其作用是手动注入 envoy 作为容器的 sidecar(边车)。什么是 sidecar?你就把它当成鸡你太美的经纪人,懂了没?就是负责跟外界打交道的。配置方式如下:
cd istio-1.4.5
export PATH=$PATH:$PWD/bin
配置完,在 bash 中就可以通过 Tab 键自动补全 istioctl 命令了。但是这样够吗?完美吗?当然不。我们还有更高的要求。
因为 istioctl 有很多配置项,仅仅使用 tab 键只能自动补全 istioctl,但是无法自动补全 istioctl manifest 类似这样的子命令。因此我们需要设置增强自动补全功能。
4.4 实现 istioctl 自动补全功能
将 istio 安装包内 tools 目录下的 istioctl.bash 文件拷贝到用户根目录下:
cp istio/istio-1.4.5/tools/istioctl.bash ~
编辑 ~/.bash_profile 文件,在文件末尾添加如下内容:
source ~/istioctl.bash
添加完毕后,加载配置使配置生效:
source ~/.bash_profile
然后输入 istioctl 然后按两次 tab 键,发现增强自动补全功能已经生效:
4.5 安装学习版 istio
为了降低学习成本,我们选择安装学习版本的 istio。如果你想直接在生产环境安装 istio,可以参考我后续的章节。
执行如下语句安装 istio 学习版:
istioctl manifest apply --set profile=demo
安装后的截图如下:
不要一看到 Installation complete 就高兴到尖叫!因为安装完毕不报错并不意味着你就成功了,就像你看到一个美丽、性感、火辣、清纯、高贵、华丽集一身的女人向你走过来时就以为人家觉得你长得帅想泡你一样的道理。
使用如下命令查看一下 istio 的服务状态:
kubectl get svc -n istio-system
执行结果如下图所示:
服务使用 LoadBalancer 类型一般是在第三方云厂商支持下才有用。如果你是在自己搭建的 k8s 集群环境下一般使用 NodePort 类型。执行如下语句完爆:
kubectl patch svc -n istio-system istio-ingressgateway -p '{"spec": {"type": "NodePort"}}'
执行完毕后,再次查看 svc,发现原来的 LoadBalancer 类型已经被修改为 NodePort 类型,此外 external-ip 也从 pending 状态变成了
查看 istio 的 pod 运行状态:
kubectl get pod -n istio-system
运行状态截图如下,所有 pod 状态都是 running 状态:
自此,整个 istio 环境就被你轻松完爆了。现在你可以停下来,上厕所,喝水和尖叫了。
4.6 卸载 istio
但是假如你觉得不够爽,光有建立的快感,没有破坏的快感总是觉得技术人生不够圆满的话,你可以执行如下语句轻松完爆 istio。
istioctl manifest generate --set profile=demo | kubectl delete -f -
5 总结
好了,一切都回到了原点。这种感觉像极了你拥有了一个女人,然后蹂躏了一番后,又抛弃她的感觉。但是望着消失了一切后的黑乎乎的屏幕后,你或许点燃了一颗烟,问问自己,抛弃的感觉是否真的快乐?如果没有,你就把文章拉倒起点,再来一遍吧。也许当你操作完后,你会重新追回你深爱的她。