34.云原生之devops集成istio

云原生专栏大纲


经过前边的学习我们已经知道istio官方bookinfo应用的部署及流量治理。我们自己的项目cicd发布后如何使用Istio呢?

  1. 首先在发布namespace配置Istio自动注入云原生KubeSphere服务网格实战之Istio安装配置
  2. 参照bookinfo应用编写项目对应的Istio-Gateway、VirtualService、DestinationRule等CRD资源配置响应规则。云原生Istio官网Bookinfo应用实战之Bookinfo部署
  3. 我们使用kustomize资源清单进行管理
  4. CICD过程参考云原生之ArgoCD CICD实战

什么样的项目适合上istio

先了解几个现象:

  1. 使用Istio目的是为了下沉服务治理基础设施,简化项目结构
  2. 老项目没集成服务治理组件,又想上服务治理功能,此时可考虑istio
  3. 目前市面上多数项目以OpenFegin和Dubbo为主,老项目以Dubbo为主
  4. Istio 和其他流行的服务网格实现对 HTTP 和 gRPC 协议之外的7层协议的支持非常有限
  5. Istio集成Aeraki可以支持任何七层流量

老旧的dubbo项目,可让Istio集成Aeraki来支持dubbo协议
新项目什么样的结构跟合适istio?

  1. 采用HTTP协议,选择OpenFegin
  2. 服务治理下沉,抛弃传统注册配置中心,考虑使用spring-cloud-starter-kubernetes
  3. 网关考虑使用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      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值