1. Istio简介

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

2. 环境准备与安装

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

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

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

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

  • 自动注入(给命名空间打指定标签,启用自动注入)
      sudo kubectl label namespace springistiodemo istio-injection=enabled

  • 查看标签状态
      sudo kubectl get ns springistiodemo --show-labels

  • 禁用自动注入命令
      sudo kubectl label namespace springistiodemo istio-injection=disabled –overwrite

  • 启用命名空间,自动注入后,rancher界面显示按钮为:禁用Istio自动注入

  • 手动注入方式,(其他安装方式),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


  • 稍等片刻,可以看到两个服务创建完成

  • 创建及部署目标规则springbootapp-destination.yaml
      sudo kubectl apply -f springbootapp-destination.yaml -n springistiodemo

  • GateWay创建,供外网访问
      sudo kubectl apply -f springbootapp-vs-v1.yaml -n springistiodemo

  • 创建及部署默认路由springbootapp-vs-v1.yaml,访问都访问v1版本服务
      sudo kubectl apply -f springbootapp-vs-v1.yaml -n springistiodemo

  • 输入命令:sudo kubectl get svc istio-ingressgateway -n istio-system,查看端口映射,发现31380端口对应80端口

  • 通过k3s主机ip+端口/method,访问api,http://192.168.231.133:31380/hello or http://192.168.231.134:31380/hello, 可以看到结果都被转到v1版本上:

  • 查看kiali界面,查看调用路径,namespace选择2个istio-system和springistiodemo,发现通过ingressgateway访问的服务都定位在了v1版本上

  • 也可以通过在istio-ingressgateway的service中,添加端口映射,映射到应用上,可以不用80端口;例如:加端口映射8066-8080-31386,同时gateway的yaml文件,number属性改为8066,即可通过31386端口,访问服务(http://ip:31386

Istio实践(1)-环境搭建及应用部署的更多相关文章

  1. 从零开始针对 .NET 应用的 DevOps 运营实践 - 运行环境搭建

    一.Overview 最近的一段时间,在公司里我都在进行基于 Jenkins 和 SonarQube 配合已有的 Gitlab 搭建部门的持续集成环境的工作,虽然之前有使用过 GitHub Actio ...

  2. windows下vue+webpack前端开发环境搭建及nginx部署

    一.开发环境搭建 1.前端框架一般都依赖nodejs,我们首先要安装node.js.请参考http://www.cnblogs.com/wuac/p/6381819.html. 2.由于许多npm的源 ...

  3. appium使用教程(一 环境搭建)-------------2.安装部署

    1)      安装appium     2)      SDK(不建议使用模拟器,占用内存很大,会造成机器卡顿.另外模拟器还存在兼容性问题:pc为x86架构,绝大多数的手机都是ARM架构,app的兼 ...

  4. NetCore2.2开发环境搭建和2008R2部署环境搭建

    开发环境: 开发工具:VS2017 系统:Win10 64位 Skd下载地址: https://dotnet.microsoft.com/download 3个都下载下载,安装dotnet-sdk-2 ...

  5. CC2B本地环境搭建步骤及部署问题解决

    由于最近的项目是之前没接触过的netbeans+glassfish,记录一下最近在工作中搭建本地环境的步骤及遇到的一些问题解决方法: 1.配置java jdk 此过程中遇到一个问题就是在配置系统环境变 ...

  6. Linux环境搭建及项目部署

    一. VMWare安装图解 1.点击下一步 2.接受条款,下一步 3.选择安装目录,不建议有中文目录和空格目录.下一步 4.下一步 5.这两个选项根据可以爱好习惯选择,下一步 6.安装 7.完成 9. ...

  7. asp.net core2.0网站的环境搭建和网站部署

    使用到的软件和硬件 1.       centos7.3服务器一台 2.       xshell.xftp 3.       vs2017 4.       .NET Core   1. 安装 li ...

  8. 【朝夕Net社区技术专刊】Core3.1 WebApi集群实战专题---WebApi环境搭建运行发布部署篇

    欢迎大家阅读<朝夕Net社区技术专刊>第1期 原文是我在知乎发表的,现在在这里分享! 我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为首 ...

  9. Mac下的Docker及Kubernetes(k8s)本地环境搭建与应用部署、管理界面kubernetes-dashboard

    mac安装docker: brew cask install docker 当然也可以直接去官网下载docker的pkg文件安装 mac的docker国内镜像:网易的镜像地址:http://hub-m ...

随机推荐

  1. async-validator 源码学习笔记(三):rule

    系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 rule 主要实现的是校验规则,文件结构为下图: 一.rul ...

  2. ArcgisServer在Linux系统上更新许可

    以下是引用Arcgis知乎的: [解决办法]:步骤1,删除旧许可.具体方法如下:切换至 arcgis server 账户,导航至[ArcGIS for Server 安装目录]/framework/r ...

  3. nginx+keepalived 高可用方案

    nginx+keepalived 高可用方案 准备工作 192.168.157.11 192.168.157.12 安装nginx 跟新yum源文件 rpm -ivh http://nginx.org ...

  4. First Note

    第一篇博客 入驻博客园.

  5. springcloud学习03-spring cloud eureka(上)

    对eureka一个大概介绍:https://blog.csdn.net/u010623927/article/details/88762525 这里面有个我做dubbo时的一个理解的错误:服务注册中不 ...

  6. go语言学习入门篇 3-- 程序执行流程

    先看下 Go 语言的程序结构: package main // 当前包名 import "fmt" // 导入程序中使用到的包 // 初始化函数 func init() { // ...

  7. Mycat 数据切分 看这一篇就够了

    数据切分 ​ 数据切分指的是通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库上面,以达到分散单台设备负载的效果. ​ 数据的切分根据其切分规则的类型,可以分为两种切分模式.一种 ...

  8. VS Code通过code runner插件编译运行多个cpp文件 | 链接编译.h文件

    1.多个cpp文件在同一级目录 参考:https://jingyan.baidu.com/article/2f9b480d7ceb3d01ca6cc224.html 此时可通过修改Code Runne ...

  9. 你应该知道的Redis事务

    前两篇 Redis 文章都大几千字,今天我们换个小清新点的 如果你也了解过关系型数据库事务的话,相信这篇文章对你来说是很容易理解的了.具体什么是事务我就不说不多了,直接讲 Redis 事务相关的部分. ...

  10. const char * 组合理解

    1 . const char *ptr 从char *ptr 可以理解为指向字符常量的指针,ptr是一个指向char *的常量,*ptr的值为const,不能修改. 2. char const *pt ...