第二十章 九析带你轻松完爆 Istio - virtual service 简述

系列文章:


总目录索引:九析带你轻松完爆 istio 服务网格系列教程

目录

1 前言

2 邀约

3 virtual service 简述

4 virtual service 样例

    4.1 jiuxi-busybox.yaml

    4.2 jiuxi-deployment.yaml

    4.3 jiuxi-svc.yaml

    4.4 jiuxi-vs.yaml

5 Istio 注入

6 登录客户端验证规则生效

7 总结


1 前言

        如果你对博客有任何疑问,请告诉我。1.png


2 邀约

        你可以从 b 站搜索 “九析”,获取免费的、更生动的视频资料:clipboard2.png


3 virtual service 简述

        在前面的章节中已经讲过了 virtual service 的概念和理论了。这里再做一个赘述,virtual service 是虚拟服务,它并非真正的 k8s service,首先不能通过 kubectl get svc 的方式找到它,其次在服务调用的时候也不会直接调用它,它就像 k8s service 背后的女人一样,紧紧握着 k8s service 的老二,让它乖乖按照自己的旨意将请求流量路由到网格内的特定目标。

如下是经常困扰初学者的问题,下面一一做解答。

问题一:Virtual service 跟 k8s service 的关系是什么。属于强绑定吗?

回答:不是强绑定。virtual service 可以帮助 k8s service 在路由控制上做到更细粒度,不必只是 Round-Robin 策略。


问题二:Virtual service 必须要跟 Istio traffic management 的其他资源,比如 destination rule、gateway、service entries 捆绑使用吗?

回答:否。Virtual service 自身就可以产生作用。当然它也可以跟网关,或者跟 destination rule 一起构造更加灵活、丰富的路由规则。


问题三:路由规则(Routing rules)跟 Destination rule 是同样的东西吗?

回答:否。路由规则是逻辑上的概念,而 Destination rule 是 Istio 的一种资源。你可以将 Destination rule 看做 Routing rules 的子集。


问题四:Virtaul service 的 hosts 字段填写什么内容?

回答:hosts 字段值是客户端向服务发送请求时使用的地址。这个地址可以是 IP 地址、DNS 名称、也可以是 k8s service 名称(短名词地址或者完整地址,比如 web-svc.default.cluster.local),如果是短名称,要求可以隐式或者显式地解析为完全限定域名(FQDN)。当然也可以使用通配符(*)前缀,从而为所有匹配的服务创建一套路由规则。虚拟服务主机实际上不一定是 Istio 服务注册表的一部分,它们只是可以可寻址的虚拟目的地而已。这样,也就可以为网格内没有可路由条目的虚拟主机流量进行建模。


4 virtual service 样例

        下面介绍一个 virtual service 独立作用的例子,本例需要的资源如下:

# 调用服务的客户端

jiuxi-busybox.yaml

# 两个 web 服务器: tomcat 和 httpd。模拟两个微服务,需要被 Istio 注入,注入后就变成服务网格中的服务

jiuxi-deployment.yaml


# 定义 3 个服务:httpd-svc 指向 httpd,tomcat-svc 指向 tomcat。web-svc 同时指向 httpd 和 tomcat

jiuxi-svc.yaml


# Istio virtual service:定义虚拟服务,该虚拟服务作用在 web-svc 服务上,并设置简单的路由规则(Routing rule,而非 Destination rule)

jiuxi-vs.yaml

        下面一一介绍各个资源文件明细。

4.1 jiuxi-busybox.yaml

        代码如下图所示:clipboard3.png

4.2 jiuxi-deployment.yaml

        代码如下截图所示:clipboard4.png

4.3 jiuxi-svc.yaml

        代码如下截图所示:clipboard5.png

4.4 jiuxi-vs.yaml

        代码如下截图所示:clipboard6.png


5 Istio 注入

        针对客户端和 deployment 执行手工注入:

istioctl kube-inject -f jiuxi-deploy.yaml jiuxi-busybox.yaml | kubectl apply -f -

istioctl kube-inject -f jiuxi-busybox.yaml | kubectl apply -f -


6 登录客户端验证规则生效

        登录到 busybox,然后通过如下命令均可以看到规则生效:

wget -q -O - http://web-svc:8080 # web-svc 是 k8s service。字母 O,非数字 0

wget -q -O - http://IP:8080 # IP 是 web-svc 的 ClusterIP。


7 总结

        自此九析带你轻松完爆了 Istio traffic management 的 virtaul service。

猜你喜欢

转载自blog.51cto.com/14625168/2485899