istio入门教程
广告 | kubernetes各版本离线安装包
安装
安装k8s 强势插播广告
三步安装,不多说
安装helm, 推荐生产环境用helm安装,可以调参
如我使用的2.9.1版本
yum install -y socat # 这个不装会报错
[root@istiohost ~]# wget https://storage.googleapis.com/kubernetes-helm/helm-v2.9.1-linux-amd64.tar.gz
[root@istiohost ~]# tar zxvf helm-v2.9.1-linux-amd64.tar.gz
[root@istiohost ~]# cp linux-amd64/helm /usr/bin
先创建一个service account 把管理员权限给helm:
[root@istiohost ~]# cat helmserviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: tiller-clusterrolebinding
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: ""
kubectl create -f helmserviceaccount.yaml
安装helm 服务端 tiller :
helm init --service-account tiller # 如果已安装更新加 --upgrade 参数
helm list #没任何返回表示成功
安装istio
curl -L https://git.io/getLatestIstio | sh -
cd istio-1.0.0/
export PATH=$PWD/bin:$PATH
helm 2.10.0以前的版本需要装一下CRD:
kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml
kubectl apply -f install/kubernetes/helm/istio/charts/certmanager/templates/crds.yaml
安装istio, 由于你没有LB所以用NodePort代替:
helm install install/kubernetes/helm/istio --name istio --namespace istio-system --set gateways.istio-ingressgateway.type=NodePort --set gateways.istio-egressgateway.type=NodePort
安装成功:
[root@istiohost istio-1.0.0]# kubectl get pod -n istio-system
NAME READY STATUS RESTARTS AGE
istio-citadel-7d8f9748c5-ntqnp 1/1 Running 0 5m
istio-egressgateway-676c8546c5-2w4cq 1/1 Running 0 5m
istio-galley-5669f7c9b-mkxjg 1/1 Running 0 5m
istio-ingressgateway-5475685bbb-96mbr 1/1 Running 0 5m
istio-pilot-5795d6d695-gr4h4 2/2 Running 0 5m
istio-policy-7f945bf487-gkpxr 2/2 Running 0 5m
istio-sidecar-injector-d96cd9459-674pk 1/1 Running 0 5m
istio-statsd-prom-bridge-549d687fd9-6cbzs 1/1 Running 0 5m
istio-telemetry-6c587bdbc4-jndjn 2/2 Running 0 5m
prometheus-6ffc56584f-98mr9 1/1 Running 0 5m
[root@istiohost istio-1.0.0]# kubectl get svc -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-citadel ClusterIP 10.108.253.89 <none> 8060/TCP,9093/TCP 5m
istio-egressgateway NodePort 10.96.151.14 <none> 80:30830/TCP,443:30038/TCP 5m
istio-galley ClusterIP 10.102.83.130 <none> 443/TCP,9093/TCP 5m
istio-ingressgateway NodePort 10.99.194.13 <none> 80:31380/TCP,443:31390/TCP,31400:31400/TCP,15011:31577/TCP,8060:30037/TCP,15030:31855/TCP,15031:30775/TCP 5m
istio-pilot ClusterIP 10.101.4.143 <none> 15010/TCP,15011/TCP,8080/TCP,9093/TCP 5m
istio-policy ClusterIP 10.106.221.68 <none> 9091/TCP,15004/TCP,9093/TCP 5m
istio-sidecar-injector ClusterIP 10.100.5.170 <none> 443/TCP 5m
istio-statsd-prom-bridge ClusterIP 10.107.28.242 <none> 9102/TCP,9125/UDP 5m
istio-telemetry ClusterIP 10.105.66.20 <none> 9091/TCP,15004/TCP,9093/TCP,42422/TCP 5m
prometheus ClusterIP 10.103.128.152 <none> 9090/TCP
使用教程
官网事例 Bookinfo Application
- productpage 调用details和reviews渲染页面
- details包含书本信息
- reviews 书本反馈,调用ratings服务
- ratings 书本租借信息
reviews服务有三个版本:
- V1 不请求ratings
- V2 请求ratings,返回1到5个黑星
- V3 请求ratings,返回1到5个红星
数据平面:
安装应用:
kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo.yaml)
安装完成:
[root@istiohost istio-1.0.0]# kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
details ClusterIP 10.104.66.31 <none> 9080/TCP 2m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4h
productpage ClusterIP 10.109.68.13 <none> 9080/TCP 2m
ratings ClusterIP 10.99.55.110 <none> 9080/TCP 2m
reviews ClusterIP 10.102.19.129 <none> 9080/TCP 2m
[root@istiohost istio-1.0.0]# kubectl get pods
NAME READY STATUS RESTARTS AGE
details-v1-fc9649d9c-dpnlp 2/2 Running 0 2m
productpage-v1-58845c779c-7g8th 2/2 Running 0 2m
ratings-v1-6cc485c997-fb7nh 2/2 Running 0 2m
reviews-v1-76987687b7-x5n7z 2/2 Running 0 2m
reviews-v2-86749dcd5-xchzb 2/2 Running 0 2m
reviews-v3-7f4746b959-nthrq 2/2 Running 0 2m
创建一个gateway,这是为了集群外可以访问
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
浏览器访问url:
47.254.28.88是我的节点ip,使用nodeport模式
http://47.254.28.88:31380/productpage
连续点击三次,你会发现右边没星星-> 黑星星-> 红星星切换,对应三个版本的review,默认策略是轮询
创建destination rules, 配置路由访问规则,现在还是轮询
kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
智能路由
请求路由 request routing
根据版本路由
把所有路由切换到v1版本
kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
这样执行完后,不管怎么刷页面,我们都看不到星星,因为v1版本没星
可以看到destination是这样的:
http:
- route:
- destination:
host: details
subset: v1
试想如此我们做版本切换将是何等简单
根据用户路由
kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml
你会发现用jason用户登录就能看到黑星星,而其它方式看到的页面都是无星星
因为这个user走了v2版本,能不强大? 那当然还能根据header什么的做路由了,就不多说了
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v1
故障注入 Fault injection
kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml
假设代码里有个bug,用户jason, reviews:v2 访问ratings时会卡10s, 我们任然希望端到端的测试能正常走完
kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-test-delay.yaml
注入错误让jason用户有个7s的延迟
hosts:
- ratings
http:
- fault:
delay:
fixedDelay: 7s
percent: 100
match:
- headers:
end-user:
exact: jason
route:
- destination:
host: ratings
subset: v1
- route:
- destination:
host: ratings
subset: v1
这时访问页面显然会出错,因为我们希望7s内能返回,这样我们就发现了一个延迟的bug
Error fetching product reviews!
Sorry, product reviews are currently unavailable for this book.
所以我们就可能通过故障注入去发现这些异常现象
链路切换 Traffic Shifting
我们先把50%流量发送给reviews:v1 50%流量发送给v3,然后再把100%的流量都切给v3
把100%流量切到v1
kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml
此时不论刷几遍,都没有星星
v1 v3各50%流量
kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml
- route:
- destination:
host: reviews
subset: v1
weight: 50
- destination:
host: reviews
subset: v3
weight: 50
此时一会有星,一会没星,但是已经不是轮询算法了
全切v3
kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-v3.yaml
这时不管怎么刷都是红心了
扫码关注sealyun

探讨可加QQ群:98488045
istio入门教程的更多相关文章
- wepack+sass+vue 入门教程(三)
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
- wepack+sass+vue 入门教程(二)
六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...
- wepack+sass+vue 入门教程(一)
一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...
- Content Security Policy 入门教程
阮一峰文章:Content Security Policy 入门教程
- gulp详细入门教程
本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...
- UE4新手引导入门教程
请大家去这个地址下载:file:///D:/UE4%20Doc/虚幻4新手引导入门教程.pdf
- ABP(现代ASP.NET样板开发框架)系列之2、ABP入门教程
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- webpack入门教程之初识loader(二)
上一节我们学习了webpack的安装和编译,这一节我们来一起学习webpack的加载器和配置文件. 要想让网页看起来绚丽多彩,那么css就是必不可少的一份子.如果想要在应用中增加一个css文件,那么w ...
- 转载:TypeScript 简介与《TypeScript 中文入门教程》
简介 TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程.安德斯·海尔斯伯格,C#的首席架构 ...
随机推荐
- .NET开发框架(四)-服务器IIS安装教程
Windows Server 2012 R2 配置篇,包括服务器IIS安装.网络负载均衡器安装.ASP.NET Core 安装. 前三篇教程中,我们分享了框架的功能与视频演示介绍(文尾扫码 加入 框架 ...
- python 基础学习笔记(3)--列表与元组
**本次笔记主要内容为 列表,元组主要的功能和特性** **1.列表**: 学习过c语言的同学应该知道,c语言有数组这一功能,就是将数据类型相同的元素放在一起.由于python的变量没有数据类型,也就 ...
- 记一次linux通过jstack定位CPU使用过高问题或排查线上死锁问题
一.java定位进程 在服务器中终端输入命令:top 可以看到进程ID,为5421的cpu这列100多了. 记下这个数字:5421 二.定位问题进程对应的线程 然后在服务器中终端输入命令:top -H ...
- PAT L3-002: 堆栈(线段树)
https://www.patest.cn/contests/gplt/L3-002 题意:中文题意. 思路:因为所有数<=1e5,权值线段树维护每个数出现多少次,然后每次出栈入栈都更新权值就好 ...
- RedisDesktopManager远程连接Linux系统的Redis服务
linux下安装redis :https://www.runoob.com/redis/redis-install.html 进入 src 运行redis : ./redis-server 打开另 ...
- php中对象类型与数组之间的转换
1.刚看视频学习的时候看到一个困扰很久的问题, 有时候我们在进行做项目的时候会碰到的一个小问题.举一个小例子. 获取一个xml文件里面的数据. xml.xml文件如下: <?xml versi ...
- Flask-登录练习
基于蓝图CBV模式的登录 使用蓝图并用cbv模式完成登录功能 登录成功后跳转到首页 将session保存在liunx上的redis数据库 使用before_request验证是否是登陆用户 蓝图 fr ...
- 華氏溫度轉化為攝氏溫度的簡單JavaScript代碼
今天,跟著W3School學到了"JavaScript函數",代碼都挺簡單的,在運算符調用函數的地方寫了一個小程序.原碼程序是這樣的: <!DOCTYPE html> ...
- http接口测试和使用,首先要了解什么是http请求
http接口测试和使用,首先要了解什么是http请求: http请求通俗讲就是把客户端的东西通过http协议发送到服务端,服务端根据http协议的定义解析客户端发过 来的东西! http请求中常用到的 ...
- 论文阅读 <Relocalization, Global Optimization and Map Merging for Monocular Visual-Inertial SLAM>
看了一下港科的基于vins拓展的论文<relocalization, global optimization and merging for vins>,在回环的实现部分总体没有什么变化, ...