istio学习(4)Vsvc+DR
K8s中Service我们知道是网络方面的服务,而Virtual Service
是istio中的概念, 虚拟服务(Virtual Service
)以及目标规则(Destination Rule
)是 Istio 流量路由的两大基石。虚拟服务可以将流量路由到 Istio 服务网格中的服务。每个虚拟服务由一组路由规则组成,这些路由规则按顺序进行评估。
虚拟服务相当于 K8s 服务的 sidecar,在原本 K8s 服务的功能之上,提供了更加丰富的路由控制。
在之前的文章中以istio自带的示例做了一些演示,但是有的地方还是比较难懂,在这里再参考一下九析大佬的文章,再进行有目的的学习。
创建虚拟服务
首先再创建一个ns并开启自动注入进行试验。
[root@localhost ~]# kubectl create ns test
[root@localhost ~]# kubectl label ns test istio-injection=enabled
首先创建两个deployment并创建相应的svc关联到deploy
apiVersion: apps/v1
kind: Deployment
metadata:labels:type: web ##共有的labelapp: nginxname: nginx-deploy ##创建nginx的deploy
spec:replicas: 1selector:matchLabels:app: nginxtype: webtemplate:metadata:labels:app: nginxtype: webspec:containers:- name: nginximage: nginx:1.14-alpineimagePullPolicy: IfNotPresentports:- containerPort: 80name: portprotocol: TCP
---
apiVersion: apps/v1
kind: Deployment
metadata:labels:type: web ##共有的labelapp: nginxname: tomcat-deploy ##创建tomcat的deploy
spec:replicas: 1selector:matchLabels:app: tomcattype: webtemplate:metadata:labels:app: tomcattype: webspec:containers:- name: tomcatimage: docker.io/kubeguide/tomcat-app:v1imagePullPolicy: IfNotPresentports:- containerPort: 8080name: portprotocol: TCP
---
apiVersion: v1
kind: Service
metadata:name: web-svc
spec:ports:- name: portport: 8080protocol: TCPtargetPort: 8080selector:type: web ##将有type=web标签的deploy和svc绑定起来
创建完成之后apply一下(nginx和tomcat的端口不一样,所以访问的时候应该只能访问到tomcat的8080端口,访问nginx时会报错,这时候需要进入pod手动去更改端口)
[root@localhost ~]# kubectl get pod -n test
NAME READY STATUS RESTARTS AGE
nginx-deploy-64f67cc576-dhj2j 2/2 Running 0 6m34s
tomcat-deploy-5b9c4b6b64-j7hwr 2/2 Running 0 4m53s
[root@localhost ~]# kubectl get svc -n test
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web-svc ClusterIP 10.68.56.93 <none> 8080/TCP 4m7s
这样的做法在访问服务时,就会出现一次tomcat一次nginx这个时默认50-50的轮询。
[root@localhost ~]# curl 10.68.56.93:8080
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>Apache Tomcat/8.0.35</title><link href="favicon.ico" rel="icon" type="image/x-icon" /><link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /><link href="tomcat.css" rel="stylesheet" type="text/css" /></head>
...[root@localhost ~]# curl 10.68.56.93:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
如果想要更细的控制,那就需要引入istio中的一些概念
1、首先用DR指定目的地
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule ##创建DR
metadata:name: test-dr ##DR的名字
spec: host: web-svc ##走web-svc这个svcsubsets: ##在web-svc这个svc上创建相应的目的地- name: tomcat ##规则名字叫tomcatlabels: ##选择一个标签有app=tomcat的pod作为目的地app: tomcat- name: nginx ##nginx同理labels:app: nginx
创建完成后可以查看
[root@localhost test]# kubectl apply -f dr-test.yaml -n test
destinationrule.networking.istio.io/test-dr created
[root@localhost test]# kubectl get -n test destinationrules.networking.istio.io
NAME HOST AGE
test-dr web-svc 21s
2、再创建vsvc,将vsvc也绑定到k8s中的svc再细化时通过DR去设定规则
apiVersion: networking.istio.io/v1beta1
kind: VirtualService ##创建vsvc
metadata:name: test-virtual-svc ##vsvc的名字
spec:hosts:- web-svc ##host绑定web-svc的svchttp:- route:- destination: ##设定规则,在web-svc之上通过DR这个目的地路由的规则host: web-svcsubset: nginxweight: 25 ##权重25%- destination:host: web-svcsubset: tomcatweight: 75
[root@localhost test]# kubectl apply -f vsvc-test.yaml -n test
virtualservice.networking.istio.io/test-virtual-svc created
[root@localhost test]# kubectl get virtualservices.networking.istio.io -n test
NAME GATEWAYS HOSTS AGE
test-virtual-svc ["web-svc"] 2m14s
设置完成再来看看效果
随便进入一个被注入的容器,
curl web-svc:8080
这个时候就可以看到效果,大部分的返回都是tomcat的,而少部分是nginx,多试几次就可以算出差不多是三比一的概率。
istio学习(4)Vsvc+DR相关推荐
- [istio]istio学习笔记
1.k8s部署,可以参考 k8s部署 2.下载istio curl -L https://istio.io/downloadIstio | sh - 将istio的bin加入到环境变量 [root@m ...
- Istio学习笔记:Istio及Kiali的安装与配置
文章目录 前言 一.前置条件 二.安装步骤 1.准备安装 2.安装Istio 3.Istio IngressGateway代理配置 4.Kiali控制面板配置 三.测试验证 1.Bookinfo Ap ...
- istio学习笔记2:边车模式sidecar
Sidecar 是什么 将本将属于应用程序的功能拆分成单独的进程,这个进程可以被理解为sidecar.在微服务体系内,将集成在应用内的微服务功能剥离到了sidecar内,sidecar提供了微服务发现 ...
- Istio:线上学习,不用搭建K8S集群
Katacode上的Istio学习环境 推荐原因:使用简单,使用官方示例,免费,快速,无需注册,可直接通过互联网访问示例应用页面,支持最新版的Istio. Katacoda已支持Istio 1.0的学 ...
- 字节跳动端到端深度学习召回算法
来源:DataFunTalk 本文约2600字,建议阅读5分钟 本文为你介绍字节跳动AML Team在大规模推荐中构建的可学习的索引结构. [ 导读 ] 传统的召回算法一般基于双塔结构并加以appro ...
- .NET Core on K8S 学习与实践系列文章索引 (更新至20191126)
更新记录: -- 2019-11-26 增加Docker容器日志系列文章 近期在学习Kubernetes,基于之前做笔记的习惯,已经写了一部分文章,因此给自己立一个flag:完成这个<.NET ...
- 糖尿病视网膜病变的深度学习系统笔记
糖尿病视网膜病变的深度学习系统笔记 论文地址:A deep learning system for detecting diabetic retinopathy across the disease ...
- Istio 实践手册 | 服务网格介绍
<Istio 实践手册>,从服务网格概念出发,将逐步渗透到 Istio 具体细节中来,旨在帮助 Istio 学习者.使用者快速掌握相关知识点,可作为 Istio 学习.实践手册,建议收藏! ...
- sidecar 容器_kubernetes学习sidecar容器模式
sidecar 容器 Kubernetes is an open-source container orchestration engine for automating deployment, sc ...
最新文章
- OFDM专题之子载波间干扰问题(二)
- c 函数多次声明_【C语言】- static和extern关键字 - 对函数的作用!
- c语言顺序查找算法,c语言实现排序和查找所有算法
- python数据序列题库_Python题库系列分享一(17道)
- python进程与线程_Python 进程和线程
- 卷积神经网络中的参数计算(转载)
- VS清理中间文件bat脚本
- 野火STM32F429学习笔记
- 重庆地区外卖店铺分析系统的设计与实现
- Netcfg.service failing.
- 安庆集团-冲刺日志(第八天)
- 专访阿里云游戏首席架构师李刚:如何解决云服务技术两大痛点?
- 软件测试人员的一般职业规划是如何的?
- 用Vue实现小Q聊天机器人(二)
- 入职B站一年,被裁员了,我思考了哪些?
- 【深度学习】数据扩充 (Data Augmentation)
- 冬天买什么绒的四件套好用
- 2016 多校4 1002 After a Sleepless Night 树上贪心
- 正版win10要不要装360_要不要装榻榻米?
- MySQL怎么运行的系列(八)14张图说明白MySQL事务原子性和undo日志原理