通过两级网关设计来路由服务网格流量

ce79dcfeb55a10fed49bd70e2926d4dc.gif

9e0054a2f100991c9e7021de9941ac10.png

编者的话

本文是来自笔者的公司 Tetrate[1] 工程师 Petr McAllister 的分享,Tetrate 的拳头产品是 Tetrate Service Bridge[2](下文简称 TSB),它是在开源的 Istio 和 Envoy 基础上构建的,但为其增加了管理平面。

简介

Tetrate 的应用连接平台 Tetrate Service Bridge(TSB)提供两种网关类型,分别为一级网关(Tier-1)和二级网关(Tier-2),它们都基于 Envoy 构建,但是目的有所不同。本文将探讨这两种类型网关的功能,以及何时选用哪种网关。

关于两级网关的简要介绍:

  • • 一级网关(下文简称 T1)位于应用边缘,用于多集群环境。同一应用会同时托管在不同的集群上,T1 网关将对该应用的请求流量在这些集群之间路由。

  • • 二级网关(下文简称 T2)位于一个的集群边缘,用于将流量路由到该集群内由服务网格管理的服务。

两级网关释义

托管在 TSB 管理的集群中的应用部署的设计与开源的 Istio 模型非常相似。它们的结构相同,使用入口网关来路由传入的流量。T2 网关相当于 Istio 的入口网关(Ingress Gateway),在逻辑上与 Istio 开源模型相同,如图 1 所示。

1642a08819b018c79028651ade095b14.png

图 1:Istio 网关对比 Tetrate T2 网关

Tetrate Service Bridge 使用 Istio 和 Envoy 构建的服务网格管理集群的控制平面和数据平面,其本身不存在于应用数据路径中。比较开源 Istio 管理的集群和 TSB 管理的集群之间的数据包路径,你会发现两者之间没有区别。TSB 的配置清单(manifest)被 Istio 消费和使用。通过这种方式,TSB 的作用类似于 CI/CD 自动化逻辑,其中部署过程会影响应用程序的行为,但不会影响应用程序逻辑本身。

TSB 在开源 Istio 的增加了一些组件,以管理每组应用程序网关范围的安装和配置,以加快开发和运维人员的工作进度,将基础设施和应用程序之间的职责分离,将错误配置网关的影响与其他应用程序 / 业务组隔离。

何时使用 T1 网关?

当你有两个或更多的 Kubernetes 集群为同一个应用服务时,为了增加容量、蓝绿部署、故障转移等,问题总是出现:入站流量如何在这些集群之间分配?在每个集群边缘的 T2 网关允许直接访问应用程序 —— 例如,集群 A 将监听 service1A.example.com,集群 X 将监听 service1X.example.com。反过来,T2 网关提供跨集群的全局负载均衡。跨集群的流量路由分配基于 1 到 100 之间的权重值,指定发送到特定集群的流量的百分比。

下面是一个简单的 T1 网关配置的例子。这个例子表示了一个完整的 T1 网关清单,以证明该解决方案的简单性。关于具体设置的细节,请参考 Tetrate API 文档 [3]

apiVersion: gateway.tsb.tetrate.io/v2
kind: Tier1Gateway
metadata:name: service1-tier1group: demo-gw-grouporganization: demo-orgtenant: demo-tenantworkspace: demo-ws
spec:workloadSelector:namespace: service1-tier1labels:app: tsb-gateway-service1-tier1istio: ingressgatewayexternalServers:- name: service1hostname: service1.cx.example.comport: 80tls: {}clusters:- name: site-1-gcpweight: 75- name: site-2-awsweight: 25

在这个例子中,到 service1.cx.example.com 的 75% 用户请求被转发到 GCP 中的 site-1,其余的转发到 AWS 中的 site-2。这个例子中的流量到达明文端口 80,之后 T1 网关和应用集群之间的所有通信都经过 mTLS 加密。

127ddfa047c340aa47a93ef19e026151.png

图 2:T1 和 T2 网关网络路径图

云供应网关整合

Istio 用户通常按应用模型实施入口网关。这种方法保证了对一个应用程序及其工件的安全、独立管理。

这里注意到的最常见的痛点 —— 每个应用都需要使用云供应商的负载均衡器。这样做使得用户需要维护位于 Envoy 入口网关 Pod 前大量的负载均衡器,这带来资金开销和管理成本。

TSB 允许通过 NodePort 服务类型而不是 LoadBalancer 进行服务发现和通信,这意味着不再需要云供应商的负载均衡器;TSB 集群内的服务可以通过 NodePort 直接到达。T1 网关允许我们将云供应商负载均衡器的使用压缩到一个单一的入口点。

1570d86376e5be812d00abd37113e6da.png

图 3:云供应商网关整合

图 3 展示了通过将集群内的服务连接转移到 TSB,而不使用云供应商的负载均衡器来简化云设置。在没有 TSB 的情况下,要实现上述设置,需要使用外部负载均衡器。TSB 还维护 Kubernetes 节点的列表。

资源要求

就 T2 网关所需的资源而言,开源 Istio 和 TSB 的要求没有什么不同。事实上,实现方式是一样的 —— Gateway 和 VirtualService 清单可以手动创建,也可以通过开源的自动化工具创建。在 Tetrate 的用例中,TSB 为 Istio 创建清单。

T1 网关确实需要一个专门的控制平面,这意味着网格管理的应用程序和 T1 网关不能在同一个集群中运行,尽管承载 T1 网关的 Kubernetes 集群也可以承载服务网格以外的应用程序。不过,Tetrate 的有些客户将 T1 网关放在与 TSB 管理平面相同的集群上。

架构考虑因素

随着应用环境的发展和成熟,出现新的需求是很常见的。T1 网关可以作为初始服务网格架构实施的一部分进行规划和实施,也可以在以后添加。增加一级网关只影响入口点的入站流量,但不需要对现有集群做任何改变。

图 4 展示了一个没有 T1 网关的部署配置。

8ad24f9dcaf9991f2a2ed1692e65adbd.png

图 4:没有 T1 网关的部署配置

当引入 T1 网关时(图 5),必须更新 DNS 记录以指向一级网关,而不需要对应用集群的设置进行修改。

6a031e7d08857fc681b2d6610b6416f6.png

图 5:带有一级网关的多集群部署实例

注意:TSB 不是 DNS 管理工具,DNS 记录的更改是在 TSB 之外进行的(有多种自动化工具和技术可用于该操作)。

然而,在添加 T2 网关时,从使用 LoadBalancer 切换到 NodePort 架构,确实需要对应用集群进行轻微的改变。

虽然 T1 网关作为应用边缘传入流量的前端,但它可以部署在一个高可用性的配置中(图 6)。

4861be644447d4fe07419c57af3345cb.png

图 6:高可用性配置中的 T1 网关

在高可用性方面,可以使用 T1 网关的数量没有限制。这种灵活的架构允许用户建立强大的设计以满足广泛的要求。

总结

本文涵盖了服务网格架构师在企业环境中设计 TSB 部署时最常见的架构问题。以下是最重要的收获:

  • • TSB T1 和 T2 网关使用 Istio 入口网关 Pod 和服务。这里没有引入额外的专有组件。

  • • TSB 支持开源 Istio 中的网关模式。仅仅是名称上的改变,如 TSB 的入口网关被称为 T2 网关。

  • • 单一的网关可以用于所有的应用,也可以采用按应用划分的网关模式。

  • • TSB 可以通过利用 Kubernetes NodePort 而不是 LoadBalancer 进行集群内通信,减少使用的云厂商负载均衡器的数量,从而降低云计算成本。

  • • TSB T1 网关提供跨集群负载均衡功能。

  • • 由于在实施的早期阶段可能不需要跨集群负载均衡,因此 T1 网关不需要成为初始部署的一部分,可以在以后添加,对现有的应用程序没有重大影响。

  • • 多个 T1 网关可以部署在同一个应用程序前面,以实现高可用性。

引用链接

[1] Tetrate: https://tetrate.io/
[2] Tetrate Service Bridge: https://tetrate.io/tetrate-service-bridge
[3] Tetrate API 文档: https://docs.tetrate.io/service-bridge/1.4.x/en-us/refs/tsb/gateway/v2/tier1_gateway#tier1gateway

获取更多云原生社区资讯,加入微信群,请加入云原生社区,点击阅读原文了解更多。

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

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

相关文章

各个线程顺序循环执行

问题描述:A任务执行完之后执行B任务,B任务执行之后再执行C任务,C任务执行完之后A再执行任务,以此循环下去 Task 1 package com.ydd.work.concurrent;2 3 import java.util.concurrent.atomic.AtomicInteger;4 /**5 * 6 * author…

python类相关

class A:def bar(self):print("BAR")self.f1() class B(A):def f1(self):print("B") class C:def f1(self):print("C") class D(C,B):pass obj D() obj.bar() # 创建了类A、B、C、D; # D继承了C和B,B继承了A,…

Python File 介绍

Open() 方法 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。 注意:使用 open() 方法一定要保证关闭文件对象,即调用…

H5开发中常用的js方法

2019独角兽企业重金招聘Python工程师标准>>> h5和app之间的webview交互 这是常用的交互方法之一,iOS可以使用WKWebView,安卓可以使用JsBridge,完成常见的交互效果。function webViewHandler(iosCallback, adrCallback) {if (getMobileOperatingSystem() …

【前端优化】

如何进行前端优化 (1) 减少http 请求次数:css spirit(多张小图放一个大图上,用定位选择不同小图),data uri(压缩图片大小), 图片大小控制合适;网页Gzip&#…

GPS RTK(银河1)基准站架设、移动站设置完整操作流程

本文讲解GPS RTK(银河1)基站架设完整操作流程,包括相对坐标、点校正等操作。 文章目录 一、架设基准站二、启动基准站三、架设移动站四、设置移动站一、架设基准站 基准站一定要架设在视野比较开阔,周围环境比较空旷的地方,地势比较高的地方;避免架在高压输变电设备附近…

在.NET 6.0上使用Kestrel配置和自定义HTTPS

本章是《定制ASP NET 6.0框架系列文章》的第四篇。在本章,我们将学习ASP.NET Core的Kestrel配置和自定义HTTPS,好我们开始正文。在ASP.NET Core中,默认情况下HTTPS处于打开状态,这个不是问题,我们无需禁用它。因为如果…

dom4j-2.1.1 jaxen-1.1.6 读取xml数据源

<?xml version"1.0" encoding"UTF-8"?> <data><row><id>1</id><name>JackieChen</name></row><row><id>2</id><name>TomLee</name></row> </data> package…

Virtualbox安装增强工具失败

在安装Virtualbox增强工具安装时出现unable to find the sources of your current Linux kernel&#xff0c;安装失败&#xff0c;导致主机与虚拟机之间不能共享文件夹&#xff0c;不能复制粘贴&#xff0c;鼠标也不能直接移动到物理机&#xff0c;需要按快捷键才行。 解决办法…

C语言试题118之求1到20的每个数的阶层之和

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:求 1+2!+3!+…+20!的和 分析:此程序只是把累加变成了累乘。 2 、温馨提示 想获取更多…

吐血整理:C#顺序、选择、循环结构用法与案例,这一篇就够了!

C#语言中用于结构化程序设计的三种基本结构是:顺序结构、选择结构、循环结构。本文详细整理了以上三种结构的用法,案例。 文章目录 4.1 顺序结构4.1.1 赋值语句4.1.2 输入语句4.1.3 输出语句4.1.4 复合语句4.1.5 应用实例4.2 选择结构4.2.1 if条件语句4.2.2 switch结构4.3 循…

java.lang.NoSuchFieldError: EMPTY_ORDERED_ITERATOR起因及解决办法

java.lang.NoSuchFieldError: EMPTY_ORDERED_ITERATOR 最近这个错误遇到了好多次&#xff0c;不过都很轻松的解决了&#xff0c;问题的起因是多了一个collection包&#xff0c;如下图 看到了&#xff0c;只要把其中的一个删除掉&#xff0c;更新启动Tomcat就行了。 本文转自suc…

由ASP.NET Core根据路径下载文件异常引发的探究

前言最近在开发新的项目&#xff0c;使用的是ASP.NET Core6.0版本的框架。由于项目中存在文件下载功能&#xff0c;没有使用类似MinIO或OSS之类的分布式文件系统&#xff0c;而是下载本地文件&#xff0c;也就是根据本地文件路径进行下载。这其中遇到了一个问题&#xff0c;是关…

[转]EL函数、自定义EL函数、自定义标签

EL函数 1、EL函数的作用&#xff1a;操作字符串 2、在JSP页面中要引入EL函数库 <% taglib prefix"fn" uri"http://java.sun.com/jsp/jstl/functions" %> 3、语法 ${ fn:方法名(参数) } 4、实例 <% page language"java" contentTyp…

XidianOJ 1019 自然数的秘密

题目描述 题意&#xff1a; 已知&#xff1a;N&#xff01;N*(N-1)*...*2*1 找到最小自然数 N, 使N!末尾有连续 M个零. 例如, 5! 的结尾包含1个零. 输入 第一行输入一个整数T,表示有T组测试数据。 对于每组测试数据&#xff0c;输入一个整数M&#xff0c;表示包含M个零。&#…

C语言试题119之利用递归方法求 5的阶层

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:利用递归方法求 5的阶层 分析:递归公式:fn=fn_1*4的阶层 2 、温馨提示 想获取更多C…

深入学习http协议(转)

http://www.blogjava.net/zjusuyong/articles/304788.html转载来的&#xff0c;没看到原文地址。http协议学习系列1. 基础概念篇1.1 介绍HTTP是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写。它的发展是万维网协会&#xff08;World Wide Web Co…

【ArcGIS风暴】ArcGIS+CASS点云(.las)数据生成等高线方法案例精解

本文讲解基于点云LAS数据,在ArcGIS+CASS平台上生成等高线的方法。 扩展阅读: 什么是点云?什么是Las数据集?一篇文章告诉你点云数据的奥秘 ArcGIS+CASS点云(.las)数据生成等高线方法案例精解 ArcGIS平台上点云(.las)数据生成等高线方法案例精解 文章目录 一、LAS转多点二、…

CSS浮动属性Float到底什么怎么回事,下面详细解释一下

float 是 css 的定位属性。在传统的印刷布局中&#xff0c;文本可以按照需要围绕图片。一般把这种方式称为“文本环绕”。在网页设计中&#xff0c;应用了CSS的float属性的页面元素就像在印刷布局里面的被文字包围的图片一样。浮动的元素仍然是网页流的一部分。这与使用绝对 定…

MAUI Developer Day in GCR

点击蓝字关注我们编辑&#xff1a;Alan Wang排版&#xff1a;Rani Sun活动介绍作为一个支持在单一代码库中开发能够运行在 Android、iOS、macOS 和 Windows 等多平台的应用程序的跨平台框架&#xff0c;.NET MAUI &#xff08;多平台应用程序用户界面&#xff09;还在预览版时就…