istio使用教程
安装
安装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使用教程的更多相关文章
- istio入门教程
广告 | kubernetes各版本离线安装包 安装 安装k8s 强势插播广告 三步安装,不多说 安装helm, 推荐生产环境用helm安装,可以调参 release地址 如我使用的2.9.1版本 y ...
- Istio Routing极简教程
官网文档: https://istio.io/docs/reference/config/networking/#VirtualService 在学习像Istio这样的新技术时,看一下示例应用程序总是 ...
- istio添加Fluentd
这个教程展示了istio如何自定义日志格式,并且将其发送给fluent.Fluentd 是一个开源的日志收集器,支持多种数据输出并且有一个可插拔架构.Elasticsearch是一个流行的后端日志记录 ...
- Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh
本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于Kubernetes的教程仿佛不是亲儿子,写得非常随便,不仅缺 ...
- Istio 1.1尝鲜记
近几天Istio1.1的发布引起了技术界巨大的反响,为了让更多技术爱好者能够亲自体验Istio1.1,公司的技术大佬赶出了这篇尝鲜教程,其中包括环境.安装.可能遇到的问题及解决方式等,希望对大家有所帮 ...
- 利用 istio 来对运行在 Kubernetes 上的微服务进行管理
尝试在一个准生产环境下,利用 istio 来对运行在 Kubernetes 上的微服务进行管理. 这一篇是第一篇,将一些主要的坑和环境准备工作. 内容较多,因此无法写成手把手教程,希望读者有一定 Ku ...
- istio 简介
最近接触到了 istio,感觉十分强大,写篇短文推荐给大家.本文所涉及的具体实验步骤可以参考官网教程. istio 相关文章列表: istio 简介 istio 性能测试 istio 是什么 Isti ...
- Istio 1.4 部署指南
原文链接:Istio 1.4 部署指南 Istio 一直处于快速迭代更新的过程中,它的部署方法也在不断更新,之前我在 1.0 版本中介绍的安装方法,对于最新的 1.4 版本已经不适用了.以后主流的部署 ...
- 与IBM的Lin Sun关于Istio 1.0和微服务的问答
北京时间 7 月 31 日,Istio 正式发布了 1.0 版本,并表示已经可用于生产环境.该版本的主要新特性包括跨集群 mesh 支持.细粒度流量控制以及在一个 mesh 中增量推出 mutual ...
随机推荐
- 分析RESTful API安全性及如何采取保护措施
本文中讨论了API安全性和采用安全措施的重要性,如身份验证,API密钥,访问控制和输入验证. API设计的第一步是撰写接口文档 根据TechTarget(海外IT专业媒体)的定义,RESTful AP ...
- 【工具】java发送GET、POST请求
前项目使用这种HTTP的方式进行数据交互,目前已更换数据交互方式,但是作为接口提供调用来说还是比较简洁高效的: 总体流程就是: 1.发送HTTP请求 2.获取返回的JSON对象 3.JSON转换 pa ...
- Java web环境的搭建
学习java web 首先得要能够在自己的电脑上配置环境,经查阅资料后了解,需要装java EEEclipse ,即企业版的,还有就是tomcat服务器. 第一步,从网上下载,eclipse 企业版的 ...
- springboot-redis-crda example
springboot-redis-crda example 1. 从 https://github.com/XLuffyStory/springboot-redis-crdu 拿到源码之后,导入到ST ...
- 如何使用JavaScript导入和导出Excel文件
本文由葡萄城技术团队于原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. JavaScript是一个涵盖多种框架.直译式.可以轻松自定义客户端的脚本 ...
- python的比较关系运算符和逻辑运算符
比较运算符 运算符 描述 示例 == 检查两个操作数的值是否相等,如果是则条件变为真. 如a=2,b=2则(a == b) 为 true. != 检查两个操作数的值是否相等,如果值不相等,则条件变为真 ...
- HDU 3062:Party(2-SAT入门)
http://acm.hdu.edu.cn/showproblem.php?pid=3062 题意:中文. 思路:裸的2-SAT.判断二元组的两个人是否在同一个强连通分量. 学习地址:http://w ...
- 从微信小程序开发者工具源码看实现原理(一)- - 小程序架构设计
使用微信小程序开发已经很长时间了,对小程序开发已经相当熟练了:但是作为一名对技术有追求的前端开发,仅仅熟练掌握小程序的开发感觉还是不够的,我们应该更进一步的去理解其背后实现的原理以及对应的考量,这可能 ...
- Linux命令及安装
1.三大操作系统 1.Unix Solaris(SUN) IOS(Aplle移动端) Mas OS(Aplle平板,电脑端) 2.Windows XP win7 win8 win10 3.Linux ...
- Spark 中 RDD的运行机制
1. RDD 的设计与运行原理 Spark 的核心是建立在统一的抽象 RDD 之上,基于 RDD 的转换和行动操作使得 Spark 的各个组件可以无缝进行集成,从而在同一个应用程序中完成大数据计算任务 ...