# istio-mciro
**Repository Path**: cinitial/istio-micro
## Basic Information
- **Project Name**: istio-mciro
- **Description**: 使用 istio 架构 来搭建完整的微服务应用。
仅供学习用啊!
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 9
- **Forks**: 7
- **Created**: 2020-05-26
- **Last Updated**: 2022-06-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# istio-mciro
## 项目介绍
`Istio micro` 是 `Istio` 框架下的一个 Demo 工程。这个工程里介绍了:
- 单机 `Istio` 环境的搭建
- 并在 `Istio` 的框架下开发,实在是不知道做什么了, 我决定还是抄写一遍大神的代码吧。
- 地址:` https://gitee.com/macrozheng/mall?_from=gitee_search`
- mall 商城项目
## 安装基础环境
在 00-install istio.md和01-install base component.md 中 详细描述了 单机 kubernetes 、istio 和 一些组建的安装,大家可以参考。
我是在一台 Centos7 的 虚拟机上安装这些软件的,宿主机的配置我放在下面,感觉运行起来还可以。
| 宿主机配置 | |
| ---------- | --------------------- |
| CPU | i5-9400F 6核 2.90GHz |
| 内存 | 16GB |
| 硬盘 | SSD 500GB |
安装了的组件汇总如下:
| 序号 | 名称 | 版本 | 用途 |
| ---- | ---------- | ------------------------------ | ------------------ |
| 1 | kubernetes | v1.18.3 | |
| 2 | docker | 19.03.9 | |
| 3 | istio | 1.6.0 | |
| 4 | Mariadb | 5.5.65 | 数据库 |
| 5 | Redis | 3.2.12 | 缓存,热数据储存 |
| 6 | Wso2 | 5.10.0 | 用户中心,认证中心 |
| 7 | Minio | 看不出来是啥版本的,请教大佬们 | 储存文件 |
## Istio 简介
现在网上关于Istio的介绍横多,而且官方文档也介绍的比较全面了,所以我就不再重复了,我就稍微讲解以下自己的拙见。
### docker / kubernetes / istio 的关系
三者 层级不一样:
- docker 是基础。
- kubernetes 是管理 docker 容器的,所以也叫资源编排。
- istio 是 kubernetes 的一个插件,用于实现服务网格。
三者 解决的问题不一样:
- docker 应用和操作系统解耦,其实和 Jvm 的思想一样的;
- kubernetes 管理 docker 应用生命周期,主要作用就是主机容灾和弹性伸缩,前者为了应用稳定,后者就是为了省钱;
- istio 是为了实现服务网格,目的就是 微服务的业务 和 微服务平台 解耦。
三者 让不同的工作变得简单:
- docker 让环境搭建的工作简单
- kubernetes 让 应用运维工作简单
- isitio 让 应用开发工作简单
其实我对 docker/kubernetes/istio 有一种恐惧,因为它们让我的工作变得太过简单了,这样自己的价值也就少了,这样工资也就不长了,这样。。。大家懂得,
一定要切记不要被这些方便了自己的工具所迷惑了,他们只是工具,工具背后的东西才是我们的价值所在。
### Istio 的原理
大家看看官网吧,介绍的很详细的。
记住下面几点有助于理解 istio 的工作原理 和 异常的排查:
- 真正工作的是 Proxy,他管理了 流量 和 认证
- 每个 Proxy 都有全量的配置信息
- 所有的配置文件对应的都是抽象概念
### Istio 对微服务开发带来的影响
Istio 的目的就是将 微服务中的非业务代码剥离出来,让微服务中只有纯粹的业务,也就是让大部分开发人员只涉及`curd`就可以了。
那么从微服务中剥离的有什么呢? 以 `Spring Cloud ` 框架为例 ,转用 `Istio` 框架后 微服务 中去除了:
- `Eureka Client`: 不需要向注册中新注册了
- `Spring Security`:不需要做验证权限了
- `Ribbon`:不需要做负载均衡了
- `Hystrix`:不需要做熔断/降级了
还有哪些欢迎大家前来补充。
需要注意的是 注册发现、权限认证、负载均衡等只是换了一个组件来做,其中心思想和原理是没有多大改变的。
## 将 mall 项目部署到 Istio 环境中
03-将mall部署到istio环境中.md 中介绍了如何将 mall 项目部署到 Istio 环境中。
该文档中会介绍:
- 前后端项目 `Dockerfile` 的编写
- 前后端项目 `Service` / `Deployment` / `Gateway` / `VirtualService` 的编写
- 如何使用 `Secret` 管理应用敏感配置信息
- 如何使用`ConfigMap` 管理应用多环境配置信息
- 如何使用 `Headless Service` 将 Mysql / Redis 等外部服务纳入到 K8s 的管理范围内
该文档欠缺的部分
- 由于 mall 已经集成了权限管理的功能,所以没有设计 Istio 的认证鉴权的内容
- 由于 mall 是单体项目,所以没有设计 Istio 框架下 微服务之间如何通讯的内容