第三十章 九析带你轻松完爆 Istio - 网关 gateway 实例

网友投稿 353 2022-10-28

第三十章 九析带你轻松完爆 Istio - 网关 gateway 实例

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

目录

1 前言

2 邀约

3 Istio 网关介绍

4 Istio 网关实例资源

4.1 k8s 服务资源

4.2 k8s deployment 资源

4.3 Istio virtual service 资源

4.4 Istio gateway 资源

5 istio-ingressgateway 配置

5.1 修改 istio-ingressgateway 服务类型

5.2 修改 istio-ingressgateway 网络命名空间配置

5.2.1 开启 istio-ingressgateway 容器 80、443 端口

5.2.2 将容器网络空间绑定宿主机网络空间

6 部署 Istio 资源

7 访问 istio 网关

8 总结

1 前言

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

2 邀约

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

3 Istio 网关介绍

在前面的 Istio 系列文章中轻松完爆了 Virtual Service、Destination Rule 等,同时也介绍了网格的概念(Service Mesh,资源被 Istio 注入,在 Pod 中创建并运行了一个 Istio-proxy 容器,该容器内部运行 Envoy 代理)。在本小节将轻松完爆 Istio 网关(gateway)。

Istio 使用网关来管理网格边缘流量(即:入站和出站流量),明确地说是 istio-ingressgateway 管理网格的入口流量,istio-egressgateway 管理网格的出口流量。在以前的章节中,我们了解网格的流量只所以可被管理,是因为资源被 istio 注入后在 Pod 中创建并运行了 istio-proxy 容器的缘故。而网关流量管理的本质也基于同样道理,唯一不同的是 istio-ingressgateway 和 istio-egressgateway 运行时就是一个 istio-proxy 容器,即独立的 Envoy 代理,而不是与 pod 一起运行的 sidecar Envoy 代理。

与其他控制进入系统的流量机制(例如:K8S Ingress API )不同,Istio 网关充分利用了 Istio 流量路由的功能和灵活性。因为 Istio 的网关资源仅配置 4-6 层负载平衡属性,例如要公开的 port 和 tls 设置等,而将 L7 层(即应用层)流量路由使用 Istio 虚拟服务(virtual service)绑定网关来实现,这样的一番神操作就可以像管理 Istio 网格中的任何其他数据平面流量一样,来管理网关流量。

k8s ingress 资源如下图所示:

由上图可知,在 Ingress 层直接就实现了流量管理。

istio gateway 资源如下图所示:

由上图可知,istio gateway 并不像 k8s ingress 一样直接在网关层实现流量路由,而是通过 virtual service 绑定到网关的机制实现流量路由,这样的方式就像将 virtual service 跟 gateway 解耦一样,大家各司其职。gateway 的作用就是分流,而 virtual service 的作用就是将分流来的流量进行管理。

virtual service 资源如下图所示:

4 Istio 网关实例资源

该实例需要如下四个资源文件,前两个资源是 Istio 专有的,后两个是 k8s 层面的:

jiuxi-gw.yaml # 网关资源jiuxi-vs.yaml # 虚拟服务资源jiuxi-svc.yaml # k8s 服务资源jiuxi-deploy.yaml # k8s deployment 资源

4.1 k8s 服务资源

4.2 k8s deployment 资源

4.3 Istio virtual service 资源

4.4 Istio gateway 资源

自此,整个网关运行需要的资源文件已经编写完毕。

5 istio-ingressgateway 配置

5.1 修改 istio-ingressgateway 服务类型

默认情况下,istio-ingressgateway 的 k8s 服务类型是 LoadBalancer,因为 LoadBalancer 服务类型一般针对的是云服务商,所以使用基于 NodePort 的 k8s 服务方式。

使用如下命令修改 istio-ingressgateway 服务类型:

kubectl patch svc -n istio-system istio-ingressgateway -p '{"spec": {"type": "NodePort"}}'

5.2 修改 istio-ingressgateway 网络命名空间配置

5.2.1 开启 istio-ingressgateway 容器 80、443 端口

使用 kubectl edit deployment -n istio-system istio-ingressgateway 指令编辑资源配置,添加 istio-proxy 容器对外服务端口 80 和 443,截图如下所示:

5.2.2 将容器网络空间绑定宿主机网络空间

执行此步是因为 istio gateway 资源指定名为 jiuxi-gw 的 host 端口为 80,而上面 istio-ingressgateway 的 NodePort 服务端口默认只能处于 30000 ~ 32767 之间,所以基于“jiuxi-gw:NodePort”方式是无法访问到 istio gateway 的。如果要直接通过 istio gateway 访问,需要开放 istio-ingressgateway pod 的 hostNetwork 配置项:

使用 kubectl edit deployment -n istio-system istio-ingressgateway 指令编辑资源配置:

修改完毕后,执行如下命令查看 istio-ingressgateway pod 所在宿主机 IP:

ssh 登录宿主机 IP(本人是 10.110.101.203),执行如下指令验证是否宿主机开启了 80 端口:

6 部署 Istio 资源

执行如下语句部署前面创建的 4 个 Istio 资源:

kubectl apply -f .

执行结果如下图所示:

7 访问 istio 网关

随便找一台虚拟机,编辑 /etc/hosts 文件,添加 istio-ingressgateway pod 所在主机映射:

映射内容如下:

10.110.101.203 jiuxi.gw.org

使用 curl 命令行访问 jiuxi.gw.org,发现基于 gateway 的流量管理已经生效(即:负载均衡权重为 50 - 50)。

8 总结

在 istio 中,有关 istio-ingressgateway、gateway、virtual service 和 destination rule 之间的关系很容易让大家引起混淆。其实你不妨这么来理解:

istio-ingressgateway 作用就像飞机场的出口,这里承载了所有的流量;gateway 作用就像旅行社,起到了分流的作用;virtual service 指旅行社的导游,起到了对分流后的流量进行管理和路由的作用;而 destination rule 就像导游指派的大巴一样,将 vs 的流量路由到真正的地方去。

自此,九析带你们轻松完爆了 Istio 的 gateway。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java制作证书的工具keytool用法详解
下一篇:电视背后为什么有那么多接口 真相其实很简单
相关文章

 发表评论

暂时没有评论,来抢沙发吧~