linux怎么查看本机内存大小
225
2022-10-29
第十九章 九析带你轻松完爆 service mesh - Istio virtual service
系列文章:总目录索引:九析带你轻松完爆 istio 服务网格系列教程
目录
1 前言
2 邀约
3 虚拟服务(Virtual Service)
4 虚拟服务跟 K8s 服务的关系
5 虚拟服务实例
5.1 k8s 资源
5.2 Istio 资源
5.3 Istio 注入
5.4 创建客户端和客户端 Istio 注入
1 前言
2 邀约
3 虚拟服务(Virtual Service)
虚拟服务(Virtual Service)以及目标规则(Destination Rule)是 Istio 流量路由的两大基石。虚拟服务可以将流量路由到 Istio 服务网格中的服务。每个虚拟服务由一组路由规则组成,这些路由规则按顺序进行评估。
如果没有 Istio virtual service,仅仅使用 k8s service 的话,那么只能实现最基本的流量负载均衡转发,但是就不能实现类似按百分比来分配流量等更加复杂、丰富、细粒度的流量控制了。
4 虚拟服务跟 K8s 服务的关系
虚拟服务相当于 K8s 服务的 sidecar,在原本 K8s 服务的功能之上,提供了更加丰富的路由控制。
5 虚拟服务实例
以下介绍使用 “虚拟服务(virtual service)+目标规则(destination rule)” 实现一个流量分流的例子。本示例共需要四种资源,k8s 和 istio 各两种:
k8s 资源介绍如下:
1 两个 deployment,一个 tomcat,一个 nginx2 一个 service 关联上面这两个 deployment
Istio 资源介绍如下:
1 一个 destination rule,设置目标规则定义2 一个 virtual service 关联上面的 service,用来设置分流权重(weight)和设置分流目标规则定义)
5.1 k8s 资源
k8s 资源共有两类,分别为 deployment 和 service,其中 deployment 资源文件明细如下:
# jiuxi-deploy.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployspec: replicas: 1 selector: matchLabels: type: web app: nginx template: metadata: labels: type: web app: nginx spec: containers: - image: nginx:1.14-alpine imagePullPolicy: IfNotPresent name: nginx ports: - containerPort: 80 name: port protocol: TCP---apiVersion: apps/v1kind: Deploymentmetadata: name: tomcat-deployspec: replicas: 1 selector: matchLabels: type: web app: tomcat template: metadata: labels: type: web app: tomcat spec: containers: - image: docker.io/kubeguide/tomcat-app:v1 imagePullPolicy: IfNotPresent name: tomcat ports: - containerPort: 8080 name: port protocol: TCP
部署上面的 jiuxi-deploy.yaml 文件,语句如下:
kubectl apply -f jiuxi-deploy.yaml
service 资源文件明细如下:
# jiuxi-svc.yamlapiVersion: v1kind: Servicemetadata: name: web-svcspec: ports: - name: port port: 8080 protocol: TCP targetPort: 8080 selector: type: web
部署上面的 service 文件,语句如下:
kubectl apply -f jiuxi-svc.yaml
自此,k8s 层面的资源文件准备完毕,现在通过访问 service,可以发现自动实现了RoundBin的负载均衡策略,即分配到 tomcat 和 nginx 的流量各为 50%。
5.2 Istio 资源
Istio 资源共有两类,分别为虚拟服务(Virtual Service)和目的地规则(Destination Rule)。虚拟服务作用在 k8s 服务之上,并加强了原 k8s 服务的功能:
指定目的地(tomcat 或 nginx)重新分配流量(即不再是 50% / 50%,而是 75% / 25%)
目的地规则文件 jiux-dr.yaml 如下:
# jiuxi-dr.yamlapiVersion: networking.istio.io/v1alpha3kind: DestinationRulemetadata: name: jiuxi-drspec: host: jiuxi-svc subsets: - name: tomcat labels: app: tomcat - name: nginx labels: app: nginx
上面的目的地资源文件作用在 jiux-svc 这个 k8s 服务上,通过 labels 字段指定不同的 pod,然后通过 name 字段提供给下面的 virtual service,起到关联到具体 pod 的作用。
如果这里你不好理解,可以这么来理解。以前 k8s service 跟 pod 关联是一维坐标关联,从上面例子可知,nginx 跟 tomcat 对 svc 而言是没什么区别的,因为都是相同的 labels 指定。但是如果采用了 virtual service 和 destination 相当于对 service 后面的 pod 使用了二维坐标关联,这样就可以明确定义 service 后面的 pod 到底有哪些业务含义了(比如一个是 nginx,另外一个是 tomcat)。这里大家仔细琢磨一下。
虚拟服务文件 jiuxi-vs.yaml 如下:
# jiuxi-vs.yamlapiVersion: networking.istio.io/v1alpha3kind: VirtualServicemetadata: name: jiuxi-virtual-svcspec: hosts: - jiuxi-svc route: - destination: host: jiuxi-svc subset: nginx weight: 25 - destination: host: jiuxi-svc subset: tomcat weight: 75
执行上面这两个资源文件:
kubectl apply -f jiuxi-dr.yamlkubectl apply -f jiuxi-vs.yaml
5.3 Istio 注入
执行如下命令进行 Istio 注入:
istioctl kube-inject -f jiuxi-deploy.yaml | kubectl apply -f -
因为 nginx 默认启动是 80 端口,为了保持跟 tomcat 端口保持一致,这里需要登录到 pod 中修改 nginx 端口,操作方法如下:
# pod 后缀根据实际情况进行修改kubectl exec -it nginx-deploy-957f689f5-7svdz -- sh
然后编辑 nginx 配置文件:
vi /etc/nginx/conf.d/default.conf
5.4 创建客户端和客户端 Istio 注入
创建客户端访问经过 Istio 流控过的 k8s 服务,客户端资源文件如下:
# jiuxi-busybox.yamlapiVersion: v1kind: Podmetadata: name: busyboxspec: containers: - name: nginx image: busybox imagePullPolicy: IfNotPresent command: ["/bin/sh", "-c", "sleep 3600" ]
执行如下 Istio 注入命令:
istioctl kube-inject -f jiuxi-busybox.yaml | kubectl apply -f -
Istio 注入成功后,通过 kubectl exec 登录到 busybox 容器中,然后执行如下语句,验证 virtual service 和 destination rule 功能:
curl Istio 注入,因为只有客户端被 Istio 注入,客户端才可以接收到来自 Pilot server 端有关 virtual service 和 destination rule 的配置信息,才可以保证 Istio 的 traffic management 真正生效。
自此,九析带你轻松完爆 Istio virtual service + Destination Rule 功能。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~