系列文章:
总目录索引:九析带你轻松完爆 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 前言
如果你对博客有任何疑问,请告诉我。
2 邀约
你可以从 b 站搜索 “九析”,获取免费的、更生动的视频资料:
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
代码如下图所示:
4.2 jiuxi-deployment.yaml
代码如下截图所示:
4.3 jiuxi-svc.yaml
代码如下截图所示:
4.4 jiuxi-vs.yaml
代码如下截图所示:
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。
来源:oschina
链接:https://my.oschina.net/u/4271440/blog/3228062