Istio就是Service Mesh的落地实现.

1. Istio的功能

  1. 负载均衡,服务发现
  2. 故障恢复,指标收集和监控
  3. A/B测试,灰度发布
  4. 限流,访问控制和端到端认证

2. Istio的架构

架构图:

  1. 数据平面: 数据平面由一组sidecar方式部署的智能代理(Envoy)节点组成,与每一个微服务节点共存,只负责工作

    1. 可以看到架构图上是Proxy,并不是Envoy, 其实Proxy是在Envoy的基础上包裹了一层的代理层,因为Envoy是使用C++编写的代理,但是Istio大部分都是使用Go编写的,不同语言通信上可能存在问题,所以在Envoy的基础上包裹一层.
  2. 控制平面: 相当于一个控制台的作用,单独部署于微服务集群之外,用于控制/配置数据平面
    1. Mixer:

      1. 实施控制平面的策略,并收集遥测数据;
      2. Istio独有的架构.
    2. Pilot:
      1. 提供服务发现功能
      2. 流量管理(超时/重试/熔断)
      3. 转换路由规则(将高级流控路由规则转换为Envoy可以识别的配置)
    3. Citadel:
      1. 身份和凭证管理
      2. 微服务和最终用户身份验证,认证为双向认证,不光是客户端到服务端的认证,也提供服务端到客户端的认证.
      3. 对未加密流量进行加密
      4. 基于角色的访问控制(RABC)
    4. Galley
      1. Istio的API server
      2. 验证用户编写的API配置
      3. 将接管Istio,获取配置,处理和分配组件.

3. Istio代码结构

github地址: https://github.com/istio/istio

The Istio project is divided across a few GitHub repositories:

  • istio/api. This repository defines component-level APIs and common configuration formats for the Istio platform.
  • istio/community. This repository contains information on the Istio community, including the various documents that govern the Istio open source project.
  • istio/istio. This is the main code repository. It hosts Istio’s core components, install artifacts, and sample programs. It includes:
    • istioctl. This directory contains code for the istioctl command line utility.
    • operator. This directory contains code for the Istio Operator.
    • pilot. This directory contains platform-specific code to populate the abstract service model, dynamically reconfigure the proxies when the application topology changes, as well as translate routing rules into proxy specific configuration.
    • security. This directory contains security related code, including Citadel (acting as Certificate Authority), citadel agent, etc.
  • istio/proxy. The Istio proxy contains extensions to the Envoy proxy (in the form of Envoy filters) that support authentication, authorization, and telemetry collection.

istio除了主库之外,还分散有其他库,比如架构中说到的proxy,就是最后一个库

可以看到istio的代码都是由Go编写的.

4. 基于ACK安装Istio

基于阿里云的容器服务k8s简称ACK,安装Istio,记录安装全过程
首先,需要登陆阿里云账号,找到ACK产品开通该服务,开通是免费的

4.1 创建ACK集群

其实就是创建k8s集群,阿里云提供了一键式创建K8s集群的能力
总结下来就是 买买买!!!

最低配置如上
注意: 开放公网ip

4.2 搭建bookinfo服务

Istio提供了示例程序,我们就用示例程序之一bookinfo来做应用部署
架构图:

4.2.1 下载示例程序

地址: https://github.com/zhangyao-zy/istio/tree/master/samples/bookinfo

4.2.2 安装示例程序镜像

我们要安装的配置文件有两个:

  1. bookinfo.yml 位于bookinfo/platform/kube/下
  2. bookinfo-gateway.yaml 位于 bookinfo/networking/下

4.2.2.1 配置namespace自动加注istio

kubectl label namespace default istio-injection=enabled

其实istio默认每个命名空间都会设置该参数
该参数的含义在于将会设置namespace下的所有pod都会自动注入sidecar

4.2.2.2 安装 bookinfo.yml

kube安装bookinfo.yml

kubectl apply -f bookinfo.yml

等待安装完成

# 查看pod/svc安装进度
kubectl get pod/svc -A

安装完成后可以找一个pod看下,会发现每一个pod里都多部署了一个容器,那就是网络代理

kubectl describe pod [pod名]

4.2.2.3 测试k8s内部调用

测试在pod内部调用微服务接口,看能否调用成功

kubeclt exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings --curl productpage:9080/productpage | grep -o "<title>.*</title>"

进入ratings的容器,调用api,看是否能成功获取productpage页面.

4.2.2.4 安装bookinfo-gateway.yml

kubectl apply -f bookinfo-gateway.yml

安装完成后就可以通过公网访问bookinfo服务了
gateway其实就是k8s的ingress,底层是一个nginx,提供了k8s对外访问的能力

4.2.2.5 测试公网访问

# 获取gateway的对外暴露ip和端口 -n指定命名空间
kubectl get svc istio-ingressgateway -n instio-system

拿到ip端口后就可以通过公网ip和端口访问了

stio简介及基于阿里云ACK安装Istio相关推荐

  1. ModaHub魔搭社区:基于阿里云 ACK 搭建开源向量数据库 Milvus

    目录 一.准备资源 二.集群创建: 本集群基于Terway网络构建 二.连接刚刚创建的ACK集群 三.部署Milvus数据库 四.优化Milvus配置 简介: 生成式 AI(Generative AI ...

  2. 多云混合云之多集群统一管理:基于阿里云ACK统一纳管多个不同Kubernetes集群

    目前阿里云云原生产品家族已经支持多集群管理功能,允许使用阿里云容器服务Kubernetes(简称ACK)控制台或kubectl命令接入.统一纳管其他公有云.客户IDC自建K8s集群,集中管理部署K8s ...

  3. 比心云平台基于阿里云容器服务 ACK 的弹性架构实践

    作者:韩韬|比心技术 前言 应用容器化改造后,不可避免地会面临这样一个问题:Kubernetes 集群的 Node 资源配置不足会导致 Pod 无法及时运行,购买过多的 Node 又会导致资源的闲置浪 ...

  4. 基于阿里云的API简介

    基于阿里云的API简介 API简介 如果您熟悉网络服务协议和一种以上编程语言,推荐您调用API管理您的云上资源和开发自己的应用程序. 使用说明 ECS API支持HTTP或者HTTPS网络请求协议,允 ...

  5. 基于阿里云服务器环境搭建到项目上线系列文章之三——安装git

    基于阿里云服务器环境搭建到项目上线系列 前言:最近购买了域名和一台阿里云服务器准备做点东西放上去,所以准备把环境搭建到项目上线的过程记录下来,计划一个系列6篇文章 基于阿里云服务器环境搭建到项目上线系 ...

  6. 基于阿里云服务器环境搭建到项目上线系列文章之四——安装composer

    基于阿里云服务器环境搭建到项目上线系列 前言:最近购买了域名和一台阿里云服务器准备做点东西放上去,所以准备把环境搭建到项目上线的过程记录下来,计划一个系列6篇文章 基于阿里云服务器环境搭建到项目上线系 ...

  7. 在阿里云 ACK 上部署 EMQX MQTT 服务器集群

    云进入以「应用为中心」的云原生阶段,Operator 模式的出现,则为 Kubernetes 中的自动化任务创建配置与管理提供了一套行之有效的标准规范.通过将运维知识固化成高级语言 Go/Java 代 ...

  8. 基于阿里云 K8S 的 DolphinDB 套件部署教程

    1. 简介 阿里云容器服务 Kubernetes 版(Alibaba Cloud Container Service for Kubernetes,简称 ACK)是全球首批通过 Kubernetes ...

  9. 基于阿里云的OSS上传从简单实现 到项目业务应用(一)入门了解篇

    使用阿里云OSS 功能的准备工作 环境准备 环境要求 使用Java 1.8及以上版本. 查看版本 执行命令java -version查看Java版本. 安装方法一: 如果使用Maven 安装阿里云OS ...

最新文章

  1. mingw w64 v8.0.0_使用Visual Studio Code和MinGW编译运行C++代码
  2. 【记】jQuery中的选择器:visible对visibility:hidden的处理
  3. vmware安装ubuntu
  4. deprecated conversion from string constant to ‘char*’
  5. 实现查询所有商品功能
  6. [访问系统] C#计算机信息类ComputerInfo (转载)
  7. 算法的时间复杂度与空间复杂度
  8. C语言回调函数详解及实例
  9. Https网络安全传输详解
  10. python开源IP代理池--IPProxys
  11. 关于复制粘贴快捷键失效问题的解决方法
  12. 两台服务器联通如何配置文件,两个服务器之间数据库怎么连接
  13. 私企招聘:腾讯TME社会招聘
  14. Autodesk 3ds Max 2023安装图文教程
  15. python列表查找值_查找列表中某个值的位置(python)
  16. 【数据库】ER模型的简单例子
  17. mysql-ACID
  18. 药物优化中的Oracle什么意思?评价指标(Metrics)是什么?
  19. Eric Lippert推荐的C#书单
  20. 《甄嬛传》解读--后宫女人的心酸血泪史之腹黑学

热门文章

  1. Ubuntu安装python开发必备软件
  2. macOS 上如何禁用 Adob​​e 后台进程,但保存 CPU、内存和网络活动呢
  3. 计算机辅助英语训练新方法,一种新的计算机辅助英语教学模式
  4. 知乎上这个程序员火了,竟是因为给老板修了一 次U盘...
  5. 【现代密码学原理】——传统加密技术(学习笔记)
  6. Vue 项目应用 —— 后台管理系统模板
  7. Python-使用正则表达式爬取斗破苍穹小说文字内容(使用Requests库实现)
  8. 做销售,好心态才有好业绩
  9. java表格点击添加按钮一行_JavaScript_JQuery实现动态表格点击按钮表格增加一行,功能实现:点击添加按钮,表 - phpStudy...
  10. 上周热点回顾(8.20-8.26)