基于Istio的多网关运行时:配置、部署和应用

1. 引言

Istio是一个开源的服务网格,主要应用于简化微服务架构中的服务间通信、提供强大的监控能力以及加强服务的安全管理。通过利用Sidecar模式部署的Envoy代理,Istio能够在几乎无需修改服务代码的情况下,实现服务发现、负载均衡、加密通信、访问控制等功能。本文将就如何在 Kubernetes 集群环境下,在 istio-system之外的命名空间中配置、部署和应用用户自定义的网关运行时 Ingress Gateway进行探讨。

2. Istio 处理入站请求的流程

在 Kubernetes 集群环境中,默认配置下的 Istio 将会部署至 istio-system 命名空间下,通过向 pod 中自动注入代理容器,Istio 将 pod 纳入服务网格的管理之中,实现对服务间通信的统一管理和控制。在 istio-system 命名空间中,网关运行时负责处理所有流入服务网格的外部流量。网关运行时将根据 CRD 资源 Gateway 中的定义监听特定的域名与端口,并根据 Virtual Service 与 Destination Rule 将请求智能地路由到后端的 Kubernetes Service,并最终访问到对应的微服务。

3. 为什么需要部署多个网关运行时 Ingress Gateway?

为了保证关键应用的可访问性,用户可能希望将关键应用与一般业务应用进行隔离或单独配置。此外,在多租户的情景下,仅利用 Istio-system 命名空间下的默认 Istio 进行管理可能会引起网关运行时宕机,进而导致在访问各租户部署的应用时出现异常。

为避免上述可能出现的问题,用户可以在其他命名空间中,为每个租户或一组相关服务单独地部署一套网关运行时Ingress Gateway。这样做能够:

1.      有效隔离应用间的网络流量,减少相互影响,提高系统的稳定性和安全性;

2.      能够令用户根据自身需求定制化网络策略和配置,如不同的安全策略、路由规则等,而不受全局配置的限制;

3.      此外,在默认的 Ingress Gateway出现问题而下线时,应用其它命名空间部署的网关运行时可以减少默认 Ingress Gateway 下线对关键应用的影响,便于故障排查和恢复,同时减少对整体服务的影响。

4.   用户自定义网关运行时Ingress Gateway的配置与部署

Ingress Gateway 在 Kubernetes 其他命名空间中的部署依赖于五类 Kubernetes资源,它们默认位于 istio-system 命名空间下,其类型与默认名称如下所示:

1.      Deployment: istio-ingressgateway;

2.      Service: istio-ingressgateway;

3.      ServiceAccount: istio-ingressgateway-service-account;

4.      Role: istio-ingressgateway-sds;

5.      RoleBinding: istio-ingressgateway-sds。

通过获取 istio-system 命名空间中的 Ingress Gateway 的上述五类资源的 YAML 文件,我们即可获得一个网关运行时的配置副本模板。之后,通过对上述资源 YAML 文件中的特定字段进行自定义,用户即可在自己拥有权限的命名空间中部署独立的 Ingress Gateway 管理应用流量。具体配置修改如下:

对于 Deployment,为了保证 Gateway 资源中的选择器 Selector 能够精准匹配到用户配置的 Ingress Gateway,需要对 Deployment 资源的 Label 进行单独配置,其中的 app 字段与 istio 字段可由用户自行定义,如 app: “user-defined”,istio: “user-ingressgateway” 等。之后,再在 Gateway 的 spec.selector 字段中配置上述 label。应保证 Gateway 资源 YAML 中 spec.selector 字段与用户自建的网关运行时的用户修改后的 Label 一致,否则会导致 Gateway 资源不能与用户自建的网关运行时关联。

为了防止 Istio 将用户命名空间中部署的 Ingress Gateway 作为普通应用纳入服务网格中管理,需要在其 Deployment 的 spec.template.annotations 字段中保证sidecar.istio.io/inject: "false" 字段的存在。

而在 Service 中,可以根据实际需求修改 Service 的类型为 NodePort 或 LoadBalancer。在改为 NodePort 时,需要保证 Service 中配置的五个端口值(status-port,http2,https,tcp,tls)均未被占用。

对于 ServiceAccount、Role与RoleBinding,在修改ServiceAccount与Role的资源名后需要在 RoleBinding 中对应地更新资源名称。

通过利用修改后的 YAML 在 Kubernetes 集群的特定命名空间中进行部署,即可实现用户自定义的 Ingress Gateway。在完成 Gateway 的配置之后,后续的 Virtual Service 与 Destination Rule 的配置则与在默认的网关运行时上进行配置的步骤相同。

5.   用户自定义网关运行时Ingress Gateway的应用

在完成上述配置之后,便实现了用户自建的网关运行时 Ingress Gateway – Gateway – Virtual Service 等资源的联动,用户能够根据 Gateway 的定义利用域名:端口访问 Kubernetes 集群中的资源。下图为一个简单样例,展示了在按照上述流程设置成功后,访问集群中某命名空间中的 nginx 的测试页面。其中,在 Gateway 和 VirtualService 中配置了 a.cn 的路由规则,并在 host 文件中对 a.cn 配置了对应的 IP 地址,端口号为用户自建的网关运行时的 Service 中的 http2 对应的 Nodeport 端口。

6.   总结

本文主要介绍了如何通过获取位于Kubernetes集群环境中的 istio-ingressgateway 的 yaml 资源模板,以及如何经过用户自行修改配置并在自己指定的命名空间中部署与应用。

种草环节:欢迎大家下载我们的inBuilder低代码平台开源社区版,可免费下载使用,加入我们,开启开发之旅!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/40894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LinuxC语言】管理者线程函数

文章目录 前言工作者工作流程函数实现实现原理函数代码概况总结前言 在并发编程中,管理者线程函数是一个重要的组成部分,它负责管理和调度工作线程。在Linux C语言环境下,我们可以使用POSIX线程库(pthread)来创建和控制管理者线程。管理者线程通常负责添加任务到任务队列…

WRF学习——使用CMIP6数据驱动WRF/基于ncl与vdo的CMIP6数据处理

动力降尺度 国际耦合模式比较计划(CMIP)为研究不同情景下的气候变化提供了大量的模拟数据,而在实际研究中,全球气候模式输出的数据空间分辨率往往较低(>100Km,缺乏区域气候特征,为了更好地研…

有哪些在本地运行大模型的方法

前言 在本文中,我们将看到在本地运行任何 LLM 的不同方法 1/ LMStudio LM Studio 是一款桌面应用程序,用于在计算机上运行本地 LLM。链接:https://lmstudio.ai/ 2/ Ollama Ollama 是一款工具,可让您在机器上本地运行开源大型语…

vue项目静态图片下载

正常情况下只需要传入图片路径就可以进行下载 methods: {downs(path, name) {//必须同源才能下载var alink document.createElement("a");alink.href path;alink.download name; //图片名alink.click();},}, 但是当我们downs方法中直接传入"/assets/load/xx…

二、分布式软总线是如何高效的传输数据和任务的

分布式软总线在HarmonyOS中高效传输数据和任务主要依靠以下几个关键技术点和设计原则: 设备快速发现与连接: 利用多种通信技术(如Wi-Fi、蓝牙、有线连接等),结合广播、多播及服务发现协议,实现设备间的快速发现与稳定连接。这包括设备的唯一标识管理、网络条件自适应选择…

【pytorch14】感知机

单层感知机模型 对于单层的感知机,它的激活函数是一个sigmoid 对于符号的定义做一个规范化,输入层每一层进行一个编号 输入是第0层,上标0表示属于输入层,下标0到n表示一共有n个节点(这里严格来说应该是0~n-1,为了书写…

一站式广告监测新体验,Xinstall助你广告投放更精准

在这个移动互联网飞速发展的时代,App推广与运营成为了每个开发者与广告主关注的焦点。然而,面对琳琅满目的广告平台和复杂的投放环境,如何精准评估广告效果、优化投放策略,成为了摆在面前的一道难题。今天,我们就来聊聊…

Jemeter--关联接口压测

Jemeter–独立不变参接口压测 Jemeter–独立变参接口压测 Jemeter–关联接口压测 案例分析 比如:有个波次复核接口很慢,优化后需要压测。但是波次复核接口数据是由另外两个接口(配单详情、内盒信息)的数据组合而来,而…

排序题目:三个数的最大乘积

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:三个数的最大乘积 出处:628. 三个数的最大乘积 难度 3 级 题目描述 要求 给定一个整数数组 nums …

fastadmin最新版导出数据时 表格中会有 html标签的解决办法

fastadmin 自带的导出方法, 是一个纯前端的导出, 没有请求后台的接口 当我们使用导出功能时, 有些数据, 我们在设计的时候,配置的是 枚举类型的 但是当我们导出数据的时候, 居然导出的数据中带有 html 的…

使用el-col和el-row布局,有版心,一页有两栏布局 三栏布局 四栏布局 使用vue动态渲染元素

使用Vue结合Element UI的el-row和el-col组件来实现版心布局,并动态渲染不同栏数的布局,可以通过以下步骤实现: 定义版心容器:使用el-container来定义整个页面的容器,其中el-header、el-main、el-footer分别定义头部、主…

k8s-第十节-Ingress

Ingress 介绍 Ingress 为外部访问集群提供了一个 统一 入口,避免了对外暴露集群端口;功能类似 Nginx,可以根据域名、路径把请求转发到不同的 Service。可以配置 https 跟 LoadBalancer 有什么区别? LoadBalancer 需要对外暴露…

Promise解决异步编程问题

一个典型的异步编程问题:即您尝试在循环中发起多个异步请求,并希望在所有请求都完成后执行某些操作。然而,由于JavaScript的异步性质,num和total的比较在循环结束时立即执行,而不是在所有请求都完成后执行。这可能导致…

【12321骚扰电话举报受理中心-短信验证安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

开发常识:命令行终端、库源码、开发环境阶段

目录 命令行终端 集成开发环境(IDE ):有插件校验等限制,成功率低于操作系统 库源码 github上搜 官网 UNPKG托管开源的包 专业名词 环境 开发:本地机 开发和调试 生产:最终部署 测试:…

交流负载箱的主要功能有哪些?

交流负载箱可以模拟各种实际用电设备的功率、电流、电压等参数,使得电源系统在运行过程中能够承受实际负载的考验,确保电源系统的稳定运行。通过交流负载箱对电源设备进行测试,可以检测出电源设备在过载、短路等异常情况下的保护功能是否正常…

Linux和mysql中的基础知识

cpu读取的指令大部分在内存中(不考虑缓存) 任何程序在运行之前都的加入到内存。 eip->pc指针,指明当前指令在什么位置。 代码大概率是从上往下执行的,基于这样的基本理论。既可以将一部分指令加载到CPU对应的缓存中&#xf…

解决zip文件中文乱码问题

后台微服务运行在linux环境里,前端Vue。在一个项目中,把后台的文件打包成zip,下载到前台。结果发现zip文件名本身乱码,zip文件内压缩的文件也是乱码。所谓乱码,程序员都见过,就是中文变成了乱七八糟的字符。…

【CSAPP】-datalab实验

实验原理与内容 本实验每位学生拿到一个datalab-handout.tar文件。学生可以通过U盘、网盘、虚拟机共享文件等方式将其导入到Unbuntu实验环境中,选择合适位置存放。然后在Ubuntu环境下解压。解压后,根据文件中的叙述和要求更改bits.c文件。本次实验的主要…

【全网最全】2024年APMCM第十四届亚太地区大学生数学建模竞赛(中文赛项)完整思路解析+代码+论文

我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…