Google、IBM和Lyft开源的微服务管理框架Istio安装与试用

Stella981
• 阅读 673

Istio是Google、IBM和Lyft联合开源的微服务Service Mesh框架,旨在解决大量微服务的发现、连接、管理、监控以及安全等问题。

Istio的主要特性包括:

  • HTTP、gRPC和TCP网络流量的自动负载均衡
  • 丰富的路由规则,细粒度的网络流量行为控制
  • 流量加密、服务间认证,以及强身份声明
  • 全范围(Fleet-wide)策略执行
  • 深度遥测和报告

原理

Istio从逻辑上可以分为数据平面和控制平面:

  • 数据平面主要由一系列的智能代理(Envoy)组成,管理微服务之间的网络通信
  • 控制平面负责管理和配置这些智能代理,并动态执行策略

Istio架构可以如下图所示

Google、IBM和Lyft开源的微服务管理框架Istio安装与试用

主要由以下组件构成

  • Envoy:Lyft开源的高性能代理总线,支持动态服务发现、负载均衡、TLS终止、HTTP/2和gPRC代理、健康检查、性能测量等功能。Envoy以sidecar的方式部署在相关的服务的Pod中。
  • Mixer:负责访问控制、执行策略并从Envoy代理中收集遥测数据。Mixer支持灵活的插件模型,方便扩展
  • Pilot:用户和Istio的接口,验证用户提供的配置和路由策略并发送给Istio组件,管理Envoy示例的生命周期
  • Istio-Auth:提供服务间和终端用户的认证机制

安装环境

  • CentOS 7.2
  • Docker 17.04.0-ce
  • Kubernetes 1.6.2
  • Istio 0.1.6

安装

1.下载安装包

下载地址:https://github.com/istio/istio/releases

下载Linux版本的当前最新版安装包

wget https://github.com/istio/istio/releases/download/0.1.6/istio-0.1.6-linux.tar.gz

2.解压

解压后,得到的目录结构如下:

[root@cz_fbsdb500_06 istio]# tree istio-0.1.6
istio-0.1.6
├── bin
│   └── istioctl
├── CONTRIBUTING.md
├── install
│   ├── kubernetes
│   │   ├── addons
│   │   │   ├── grafana.yaml
│   │   │   ├── prometheus.yaml
│   │   │   ├── servicegraph.yaml
│   │   │   └── zipkin.yaml
│   │   ├── istio-auth-with-cluster-ca.yaml
│   │   ├── istio-auth.yaml
│   │   ├── istio-rbac-alpha.yaml
│   │   ├── istio-rbac-beta.yaml
│   │   ├── istio.yaml
│   │   ├── README.md
│   │   └── templates
│   │       ├── istio-auth
│   │       │   ├── istio-cluster-ca.yaml
│   │       │   ├── istio-egress-auth.yaml
│   │       │   ├── istio-ingress-auth.yaml
│   │       │   └── istio-namespace-ca.yaml
│   │       ├── istio-egress.yaml
│   │       ├── istio-ingress.yaml
│   │       ├── istio-mixer.yaml
│   │       └── istio-pilot.yaml
│   └── README.md
├── istio.VERSION
├── LICENSE
├── README.md
└── samples
    ├── apps
    │   ├── bookinfo
    │   │   ├── bookinfo-ingress.yaml
    │   │   ├── bookinfo-v1.yaml
    │   │   ├── bookinfo.yaml
    │   │   ├── cleanup.sh
    │   │   ├── destination-ratings-test-delay.yaml
    │   │   ├── loadbalancing-policy-reviews.yaml
    │   │   ├── mixer-rule-additional-telemetry.yaml
    │   │   ├── mixer-rule-empty-rule.yaml
    │   │   ├── mixer-rule-ratings-denial.yaml
    │   │   ├── mixer-rule-ratings-ratelimit.yaml
    │   │   ├── README.md
    │   │   ├── route-rule-all-v1.yaml
    │   │   ├── route-rule-delay.yaml
    │   │   ├── route-rule-reviews-50-v3.yaml
    │   │   ├── route-rule-reviews-test-v2.yaml
    │   │   ├── route-rule-reviews-v2-v3.yaml
    │   │   └── route-rule-reviews-v3.yaml
    │   ├── httpbin
    │   │   ├── httpbin.yaml
    │   │   └── README.md
    │   └── sleep
    │       ├── README.md
    │       └── sleep.yaml
    └── README.md

11 directories, 46 files

3.安装istioctl
./bin/istioctl拷贝到你的$PATH目录下。

4.检查RBAC
因为我们安装的kuberentes版本是1.6.2默认支持RBAC,这一步可以跳过。如果你使用的其他版本的kubernetes,请参考官方文档操作。

执行以下命令,正确的输出是这样的:

$ kubectl api-versions | grep rbac rbac.authorization.k8s.io/v1alpha1 rbac.authorization.k8s.io/v1beta1

5.创建角色绑定

$ kubectl create -f install/kubernetes/istio-rbac-beta.yaml clusterrole "istio-manager" created clusterrole "istio-ca" created clusterrole "istio-sidecar" created clusterrolebinding "istio-manager-admin-role-binding" created clusterrolebinding "istio-ca-role-binding" created clusterrolebinding "istio-ingress-admin-role-binding" created clusterrolebinding "istio-sidecar-role-binding" created

注意:官网的安装包中的该文件中存在RoleBinding错误,应该是集群级别的clusterrolebinding,而release里的代码只是普通的rolebinding,查看该Issue Istio manager cannot list of create k8s TPR when RBAC enabled #327

6.安装istio核心组件
用到的镜像有:

docker.io/istio/mixer:0.1.6 docker.io/istio/pilot:0.1.6 docker.io/istio/proxy_debug:0.1.6

我们暂时不开启Istio Auth
注意:本文中用到的所有yaml文件中的type: LoadBalancer去掉,使用默认的ClusterIP,然后配置Traefik ingress,就可以在集群外部访问。请参考安装Traefik ingress

bash kubectl apply -f install/kubernetes/istio.yaml

7.安装监控插件
用到的镜像有:

docker.io/istio/grafana:0.1.6 quay.io/coreos/prometheus:v1.1.1 gcr.io/istio-testing/servicegraph:latest docker.io/openzipkin/zipkin:latest

安装插件

bash kubectl apply -f install/kubernetes/addons/prometheus.yaml kubectl apply -f install/kubernetes/addons/grafana.yaml kubectl apply -f install/kubernetes/addons/servicegraph.yaml kubectl apply -f install/kubernetes/addons/zipkin.yaml

在traefik ingress中增加以上几个服务的配置,同时增加istio-ingress配置。

Yaml - host: grafana.istio.io   http:     paths:     - path: /       backend:         serviceName: grafana         servicePort: 3000 - host: servicegraph.istio.io   http:     paths:     - path: /       backend:         serviceName: servicegraph         servicePort: 8088 - host: prometheus.istio.io   http:     paths:     - path: /       backend:         serviceName: prometheus         servicePort: 9090 - host: zipkin.istio.io   http:     paths:     - path: /       backend:         serviceName: zipkin         servicePort: 9411 - host: ingress.istio.io   http:     paths:     - path: /       backend:         serviceName: istio-ingress         servicePort: 80

测试

我们使用Istio提供的测试应用bookinfo微服务来进行测试。该应用架构图如下:

Google、IBM和Lyft开源的微服务管理框架Istio安装与试用

部署应用

kubectl create -f <(istioctl kube-inject -f samples/apps/bookinfo/bookinfo.yaml) 

Istio kube-inject命令会在bookinfo.yaml文件中增加Envoy sidecar信息。参考:https://istio.io/docs/referenc ... nject
在本机的/etc/hosts下增加VIP节点和ingress.istio.io的对应信息。具体步骤参考:边缘节点配置
在浏览器中访问http://ingress.istio.io/productpage

监控

不断刷新productpage页面,将可以在以下几个监控中看到如下界面。
Grafana页面
http://grafana.istio.io

Google、IBM和Lyft开源的微服务管理框架Istio安装与试用

Prometheus页面
http://prometheus.istio.io

Google、IBM和Lyft开源的微服务管理框架Istio安装与试用

Zipkin页面
http://zipkin.istio.io

Google、IBM和Lyft开源的微服务管理框架Istio安装与试用

ServiceGraph页面
http://servicegraph.istio.io/dotviz
可以用来查看服务间的依赖关系。
展示服务之间调用关系图 ,访问http://servicegraph.istio.io/graph

Google、IBM和Lyft开源的微服务管理框架Istio安装与试用

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法
Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法参考文章:(1)Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.codeprj.com%2Fblo
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这