云原生专栏大纲
文章目录
- 什么样的项目适合上istio
- 参考bookinfo中reviews服务资源
- Deployment
- Service
- Gateway
- VirtualService
- DestinationRule
- kustomize资源清单
经过前边的学习我们已经知道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,用于标识和选择该 Deploymentlabels:app: reviewsversion: v3
spec:replicas: 1# 指定了用于选择 Pod 的标签选择器,即选择具有标签 app: reviews 和 version: v3 的 Podselector:matchLabels:app: reviewsversion: v3# 定义了要创建的 Pod 的模板template:metadata:labels:app: reviewsversion: v3spec:# 指定了 Pod 所使用的 ServiceAccount 的名称为 bookinfo-reviews,用于授权 Pod 访问其他 Kubernetes 资源serviceAccountName: bookinfo-reviewscontainers:...
Service
apiVersion: v1
kind: Service
metadata:name: reviewslabels:app: reviewsservice: 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 Gatewayselector:istio: ingressgatewayservers: # 定义了网关监听的端口信息- port:number: 666name: httpprotocol: HTTPhosts:- "*"
VirtualService
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: reviews
spec:hosts:- reviewshttp: # 定义了虚拟服务的 HTTP 路由规则- route: # 定义了路由规则,指定了流量的目的地- destination: # 指定了路由的目的地,即将流量发送到的服务host: reviews # 指定了目标服务的主机为 reviewssubset: v1 # 指定了要发送流量到的服务的子集为 v1,这表示将流量路由到 reviews 服务的 v1 版本
上述的版本对应中Deployment
metadata:labels:app: reviewsversion: v3
DestinationRule
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:name: reviews
spec:host: reviewssubsets:- name: v1labels:version: v1- name: v2labels:version: v2- name: v3labels:version: v3
上述的版本对应中3个Deployment中
metadata:labels:app: reviewsversion: 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