kubernetes istio之流量管理
1.部署 Bookinfo 应用
要在 Istio 中运行这一应用,无需对应用自身做出任何改变。我们只要简单的在 Istio 环境中对服务进行配置和运行,具体一点说就是把 Envoy sidecar 注入到每个服务之中。这个过程所需的具体命令和配置方法由运行时环境决定,而部署结果较为一致,如下图所示:
所有的微服务都和 Envoy sidecar 集成在一起,被集成服务所有的出入流量都被 sidecar 所劫持,这样就为外部控制准备了所需的 Hook,然后就可以利用 Istio 控制平面为应用提供服务路由、遥测数据收集以及策略实施等功能。
接下来可以根据 Istio 的运行环境,按照下面的讲解完成应用的部署。
- 进入 Istio 安装目录。
启动应用容器:
- 如果集群用的是手工 Sidecar 注入,使用如下命令:
$ kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo.yaml)
istioctl kube-inject 命令用于在在部署应用之前修改
bookinfo.yaml- 如果集群使用的是自动 Sidecar 注入,只需简单的
kubectl就能完成服务的部署。
$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
上面的命令会启动全部的四个服务,其中也包括了
reviews服务的三个版本(v1、v2以及v3)给应用定义 Ingress gateway:
$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
确认所有的服务和 Pod 都已经正确的定义和启动:
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
details ClusterIP 10.254.86.98 <none> /TCP 3h
kubernetes ClusterIP 10.254.0.1 <none> /TCP 149d
productpage ClusterIP 10.254.199.214 <none> /TCP 3h
ratings ClusterIP 10.254.102.147 <none> /TCP 3h
reviews ClusterIP 10.254.249.86 <none> /TCP 3h$ kubectl get pods
NAME READY STATUS RESTARTS AGE
details-v1-6456dbdb9-crqnw / Running 3h
productpage-v1-6f6887645c-52qhn / Running 3h
ratings-v1-648cf76d8f-g65s5 / Running 3h
reviews-v1-7dcbc85bb5-j748n / Running 3h
reviews-v2-65fd78f5df-r8n6r / Running 3h
reviews-v3-95c85969c-zmpfx / Running 3h确定 Ingress 的 IP 和端口
执行以下命令以确定
ingressgateway是否启用了 NodePort 模式。$ kubectl -n istio-system get svc istio-ingressgateway
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway NodePort 10.254.160.93 <none> :/TCP,:/TCP,:/TCP,:/TCP,:/TCP,:/TCP,:/TCP 3h确定 ingress IP:
$ export INGRESS_HOST=$(kubectl -n istio-system get po -l istio=ingressgateway -o go-template='{{range .items}}{{.status.hostIP}}{{end}}')确定端口:
$ export INGRESS_PORT=$(kubectl -n istio-system get svc istio-ingressgateway -o go-template='{{range .spec.ports}}{{if eq .name "http"}}{{.nodePort}}{{end}}{{end}}')设置
GATEWAY_URL:$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
下面可以用 curl 命令来确认 Bookinfo 应用的运行情况:
$ curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
还可以用浏览器打开网址 http://$GATEWAY_URL/productpage,来浏览应用的 Web 页面。如果刷新几次应用的页面,就会看到页面中会随机展示 reviews 服务的不同版本的效果(红色、黑色的星形或者没有显示)。reviews 服务出现这种情况是因为我们还没有使用 Istio 来控制版本的路由。
3. 金丝雀部署
由于 Bookinfo 示例部署了三个版本的 reviews 微服务,因此我们需要设置默认路由。 否则,如果您当多次访问应用程序,您会注意到有时输出包含星级评分,有时又没有。 这是因为没有为应用明确指定缺省路由时,Istio 会将请求随机路由到该服务的所有可用版本上。
此任务假定您尚未设置任何路由。 如果您已经为示例应用程序创建了存在冲突的路由规则,则需要在下面的命令中使用 replace 代替 create。 请注意:本文档假设还没有设置任何路由规则。
首先将所有微服务的默认路由设置为 v1。
$ istioctl create -f samples/bookinfo/networking/virtual-service-all-v1.yaml
$ istioctl create -f samples/bookinfo/networking/destination-rule-all.yaml
可以通过下面的命令来显示已创建的路由规则:
kubernetes istio之流量管理的更多相关文章
- kubernetes + istio进行流量管理
实验目的: 本文介绍如何通过istio实现域名访问k8s部署的nginx服务 前提: 已经安装了kubernetes的服务器 了解 kubernetes 基本命令如何使用 (kubectl creat ...
- Istio技术与实践05:如何用istio实现流量管理
Istio是Google继Kubernetes之后的又一开源力作,主要参与的公司包括Google,IBM,Lyft等,它提供了完整的非侵入式的微服务治理解决方案,解决微服务的管理.网络连接以及安全管理 ...
- Istio的流量管理(概念)(istio 系列二)
Istio的流量管理(概念) 目录 Istio的流量管理(概念) 概述 Virtual services 为什么使用virtual service Virtual services举例 hosts字段 ...
- Istio的流量管理(实操一)(istio 系列三)
Istio的流量管理(实操一)(istio 系列三) 使用官方的Bookinfo应用进行测试.涵盖官方文档Traffic Management章节中的请求路由,故障注入,流量迁移,TCP流量迁移,请求 ...
- Istio的流量管理(实操二)(istio 系列四)
Istio的流量管理(实操二)(istio 系列四) 涵盖官方文档Traffic Management章节中的inrgess部分. 目录 Istio的流量管理(实操二)(istio 系列四) Ingr ...
- Istio的流量管理(实操三)
Istio的流量管理(实操三) 涵盖官方文档Traffic Management章节中的egress部分.其中有一小部分问题(已在下文标注)待官方解决. 目录 Istio的流量管理(实操三) 访问外部 ...
- 15分钟在笔记本上搭建 Kubernetes + Istio开发环境
11月13~15日,KubeCon 上海大会召开,云原生是这个秋天最火热的技术.很多同学来问如何上手 Kubernetes和Istio 服务网格开发.本文将帮助你利用Docker CE桌面版,15分钟 ...
- Kubernetes+Istio
Kubernetes+Istio 微服务.SpringCloud.k8s.Istio杂谈 一.微服务与SOA “微服务”是一个名词,没有这个名词之前也有“微服务”,一个朗朗上口的名词能让大家产 ...
- kubernetes istio之gateway
[root@master istio-]# kubectl apply -f samples/httpbin/httpbin.yaml service/httpbin created deployme ...
随机推荐
- 用CSS3制作50个超棒动画效果教程
这50个CSS动画集合可以让你通过使用JavaScript函数来让动画更生动.为了能够预览到这些惊人的CSS3技术带来的动画特效,请大家使用如Safari和Chrome这类基于WebKit内核的浏览器 ...
- 对象拷贝extend
如果想要把某个对象拷贝(合并)给另外一个对象使用,此时可以使用$.extend()方法 语法: $.extend([deep],target,object1,[objectN]); 1.deep:如果 ...
- PL/SQL Developer 查看查询的执行计划
https://zhuanlan.zhihu.com/p/65771352 通过 PL/SQL Developer 查看查询的执行计划 1 什么是执行计划 执行计划是一条查询语句在 Oracle 中的 ...
- CSIC_716_20191207【并发编程---进程与线程】
僵尸进程与孤儿进程 ........... 守护进程 from Multiprocessing import Process 在 suboprocess.start( ) 的上一行,增加 subpr ...
- 【Tomcat】Tomcat调优
Tomcat的默认配置,性能并不是最优的,我们可以通过优化tomcat以此来提高网站的并发能力.提高Tomcat的性能可以分为两个方向. 服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有 ...
- 39 Ubuntu下配置python的vscode开发环境
0 引言 最近想在ubuntu下搞深度学习,首先配置了python的vscode开发环境.在配置python时,选择了Anaconda3.x,保证了其相对于系统python2.x的独立性.另外,vsc ...
- NOIp2018集训test-9-6(am)
Problem A. divisor 发现x为k可表达一定可以表示成这种形式,如k=3,x=(1/3+1/2+1/6)x. 于是可以搜索k(k<=7)个1/i加起来等于1的情况,如果一个数是这些 ...
- FFT的应用
FFT的应用 --讲稿 概述 FFT的模板很简单,大家都会背,于是出题的空间就在于建模了.FFT的题目难在建模,往往需要将问题抽象出来,经过一系列转化后得到乘积式的和,再赋予式子各个项的系数一定的意义 ...
- docker快速安装elasticsearch
一.选择版本,拉取镜像 docker pull elasticsearch:5.6.9 #不选择版本就是最新的 二.运行设置容器 # -d 表示在后台运行 docker run -d -p 9200: ...
- NX二次开发-关闭信息窗口UF_UI_close_listing_window
#include <uf.h> #include <uf_ui.h> UF_initialize(); //打开信息窗口 UF_UI_open_listing_window() ...