• Istio实践(1)- 环境搭建及应用部署


    1. Istio简介

    Istio是最初由IBM,Google和Lyft开发的服务网格的开源实现。它可以透明地分层到分布式应用程序上,并提供服务网格的所有优点,例如流量管理,安全性和可观察性。
    它旨在与各种部署配合使用,例如本地部署,云托管,Kubernetes容器以及虚拟机上运行的服务程序。尽管Istio与平台无关,但它经常与Kubernetes平台上部署的微服务一起使用。
    从根本上讲,Istio的工作原理是以Sidcar的形式将Envoy的扩展版本作为代理布署到每个微服务中

    image

    2. 环境准备与安装

    本文使用现有的k3s集群环境,使用rancher2.6.3管理工具安装Istio,比较方便,当然你也可以使用k8s的环境进行安装,方法请自行查找
    进入Rancher管理工具界面,点击“集群工具”,分别安装Istio与Monitoring,我这里已安装完毕,点击安装后,等待安装成功即可

    image

    安装Istio工具,可以选择想安装的组件,这里勾上Jaeger跟踪

    image

    安装成功后,点击Istio工具菜单,即可进入Istio工具界面

    image

    3. Istio组件-VirtualService(虚拟服务)

    VirtualService中文名称虚拟服务,是istio中一个重要的资源, 它定义了一系列针对指定服务的流量路由规则。每个路由规则都针对特定协议的匹配规则。如果流量符合这些特征,就会根据规则发送到服务注册表中的目标服务(或者目标服务的子集或版本)。
    VirtualService和k8s service的区别
    如果没有 Istio virtual service,仅仅使用 k8s service 的话,那么只能实现最基本的流量负载均衡转发,但是就不能实现类似按百分比来分配流量等更加复杂、丰富、细粒度的流量控制了。

    4. Istio组件-目标规则 (Destination Rule)

    目标规则(Destination Rule)是 Istio 重要的资源对象之一,它不能独自使用,必须跟 Virtual Service 共同发挥作用,作用是将流量标记分组并路由到具体服务。
    Destination Rule 还可以做什么?
    通常在生产场景下,用使用 Destination Rule 对用户进行身份、地址位置等条件的识别后的流量路由,例如部分用户优先享用新版本,则可以通过HTTP Header附加相关的字段进行识别,路由到新版本的服务上。或者在版本更新的时候,使用灰度发布,对新旧版本标记子集,按照不同的负载百分比进行调整逐步迭代。

    5. Istio应用部署实战

    • 应用准备:使用以前springbootapp镜像,xjk27400861/springbootapp:42与xjk27400861/springbootapp:43两个镜像,部署两个版本的应用
    • 创建命名空间,springistiodemo,在k3s集群的任意一个节点执行
      命令:
        sudo kubectl create namespace springistiodemo
      
      image
    • 自动注入(给命名空间打指定标签,启用自动注入)
        sudo kubectl label namespace springistiodemo istio-injection=enabled
      
      image
    • 查看标签状态
        sudo kubectl get ns springistiodemo --show-labels
      
      image
    • 禁用自动注入命令
        sudo kubectl label namespace springistiodemo istio-injection=disabled –overwrite
      
      image
    • 启用命名空间,自动注入后,rancher界面显示按钮为:禁用Istio自动注入
      image
    • 手动注入方式,(其他安装方式),rancher暂未找到执行istioctl命令的窗口
        sudo istioctl kube-inject -f springbootapp-2nodes.yaml | sudo kubectl apply -f -
      
    • 新建springbootapp-2nodes.yaml文件,执行命令部署应用
        sudo kubectl create -f springbootapp-2nodes.yaml -n springistiodemo
      
    • springbootapp-2nodes.yaml文件内容,2个版本的服务,分别为v1和v2
      image
      image
    • 稍等片刻,可以看到两个服务创建完成
      image
    • 创建及部署目标规则springbootapp-destination.yaml
        sudo kubectl apply -f springbootapp-destination.yaml -n springistiodemo
      
      image
    • GateWay创建,供外网访问
        sudo kubectl apply -f springbootapp-vs-v1.yaml -n springistiodemo
      
      image
    • 创建及部署默认路由springbootapp-vs-v1.yaml,访问都访问v1版本服务
        sudo kubectl apply -f springbootapp-vs-v1.yaml -n springistiodemo
      
      image
    • 输入命令:sudo kubectl get svc istio-ingressgateway -n istio-system,查看端口映射,发现31380端口对应80端口
      image
    • 通过k3s主机ip+端口/method,访问api,http://192.168.231.133:31380/hello or http://192.168.231.134:31380/hello, 可以看到结果都被转到v1版本上:
      image
    • 查看kiali界面,查看调用路径,namespace选择2个istio-system和springistiodemo,发现通过ingressgateway访问的服务都定位在了v1版本上
      image
    • 也可以通过在istio-ingressgateway的service中,添加端口映射,映射到应用上,可以不用80端口;例如:加端口映射8066-8080-31386,同时gateway的yaml文件,number属性改为8066,即可通过31386端口,访问服务(http://ip:31386
      image
  • 相关阅读:
    【无标题】
    输入框规则
    2022宁夏杯C新冠疫情对宁夏旅游业的影响分析及对策研究
    x程无忧sign逆向分析
    用于验证的verilog语法--0
    TikTok与老年用户:社交媒体的跨代交流
    spring cloud vs k8s
    社区分享丨东风康明斯基于JumpServer构建统一运维安全审计平台
    题目0010:整数转二进制(附二进制转整数与字符串知识点)
    双非本科是如何逆袭的?这位同学有点东西
  • 原文地址:https://www.cnblogs.com/kunwn/p/16104179.html