文章目录
经过前边的学习我们已经知道istio官方bookinfo应用的部署及流量治理。我们自己的项目cicd发布后如何使用Istio呢?
- 首先在发布namespace配置Istio自动注入云原生KubeSphere服务网格实战之Istio安装配置
- 参照bookinfo应用编写项目对应的Istio-Gateway、VirtualService、DestinationRule等CRD资源配置响应规则。云原生Istio官网Bookinfo应用实战之Bookinfo部署
- 我们使用kustomize资源清单进行管理
- CICD过程参考云原生之ArgoCD CICD实战
什么样的项目适合上istio
先了解几个现象:
- 使用Istio目的是为了下沉服务治理基础设施,简化项目结构
- 老项目没集成服务治理组件,又想上服务治理功能,此时可考虑istio
- 目前市面上多数项目以OpenFegin和Dubbo为主,老项目以Dubbo为主
- Istio 和其他流行的服务网格实现对 HTTP 和 gRPC 协议之外的7层协议的支持非常有限
- Istio集成Aeraki可以支持任何七层流量
老旧的dubbo项目,可让Istio集成Aeraki来支持dubbo协议
新项目什么样的结构跟合适istio?
- 采用HTTP协议,选择OpenFegin
- 服务治理下沉,抛弃传统注册配置中心,考虑使用spring-cloud-starter-kubernetes
- 网关考虑使用SringCloudGateway
总结:采用上述方案,让我们的项目更加简单,不用项目开发人员过多考虑技术细节。上述方案开发人员还需考虑的是分布式事务问题(使用Seata、Atomikos解决),以及数据量过大后分库分表问题(使用tidb解决)
参考bookinfo中reviews服务资源
Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: reviews-v3
# 定义了 Deployment 的标签,包括 app: reviews 和 version: v3,用于标识和选择该 Deployment
labels:
app: reviews
version: v3
spec:
replicas: 1
# 指定了用于选择 Pod 的标签选择器,即选择具有标签 app: reviews 和 version: v3 的 Pod
selector:
matchLabels:
app: reviews
version: v3
# 定义了要创建的 Pod 的模板
template:
metadata:
labels:
app: reviews
version: v3
spec:
# 指定了 Pod 所使用的 ServiceAccount 的名称为 bookinfo-reviews,用于授权 Pod 访问其他 Kubernetes 资源
serviceAccountName: bookinfo-reviews
containers:
...
Service
apiVersion: v1
kind: Service
metadata:
name: reviews
labels:
app: reviews
service: reviews
spec:
ports:
- port: 9080 # 服务暴露端口
targetPort: 9080 # 容器端口
name: http
# 指定了用于选择后端 Pod 的标签选择器,即选择具有标签 app: reviews 的 Pod。这个选择器决定了哪些后端 Pod 会接收到该服务的流量。
selector:
app: reviews
Gateway
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
# 指定了这个 Gateway 的名称
name: 应用名称-gateway
spec:
# 指定了这个 Gateway 的目标选择器为 istio: ingressgateway,表示这个网关将指向 Istio 中的 Ingress Gateway
selector:
istio: ingressgateway
servers: # 定义了网关监听的端口信息
- port:
number: 666
name: http
protocol: HTTP
hosts:
- "*"
VirtualService
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http: # 定义了虚拟服务的 HTTP 路由规则
- route: # 定义了路由规则,指定了流量的目的地
- destination: # 指定了路由的目的地,即将流量发送到的服务
host: reviews # 指定了目标服务的主机为 reviews
subset: v1 # 指定了要发送流量到的服务的子集为 v1,这表示将流量路由到 reviews 服务的 v1 版本
上述的版本对应中Deployment
metadata:
labels:
app: reviews
version: v3
DestinationRule
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
- name: v3
labels:
version: v3
上述的版本对应中3个Deployment中
metadata:
labels:
app: reviews
version: v3
kustomize资源清单
kustomize 父工程管理所有kustomize项目清单
|--kustomize-devops-web 具体哪一个项目部署清单
|--base 基本资源
|--kustomization.yaml 组织资源文件
|--devops-web-deployment.yaml deployment资源
|--devops-web-svc.yaml svc资源
|--devops-web-istio-gateway.yaml 类似nginx配置反向代理
|--devops-web-vs.yaml 虚拟服务资源,绑定
|--devops-web-dr.yaml
|--build cicd打包后构建的资源会替换该目录资源
|--build.yaml
|--kustomization.yaml
|--overlay 补丁目录
|--dev 补丁名也可对应环境
|--kustomization.yaml