apisix云原生网关

定义

企业级网关通过域名、路由将请求分发到对应的应用上,通常承载数千个服务的流量,对稳定性有较高要求。

在这里插入图片描述CNCF全景图

选型

Kubernetes抽象出两个核心概念:Service,为多个Pod提供统一的访问入口;Ingress(之后由Gateway API替代),定义了如何将外部流量路由到集群内部的服务。

Ingress的具体实现需要依靠底层组件读取相关配置,并将其转换为Nginx可执行的配置。此外,云原生网关通常部署在Kubernetes集群内部,必须能够解析内部服务的IP,并能够通过Kubernetes网络转发请求。

由此可以概括出云原生网关应具备的关键能力:
1、能够解析Ingress资源对象,并将其转换为自己的配置;
2、能够获取内部服务IP,实现多样化的负载均衡策略;

在这里插入图片描述
云原生网关分为以下三类:

1、基于nginx,使用openresty作为控制平面;
2、基于envoy,需要学习xDS协议,是云原生生态中积极推动的项目代表着未来的发展方向;
3、自研解决方案,golang编写,由于转发内核都是自研的,稳定性和兼容性一般;

nginx类ingress功能有限,最大的问题是其配置生效不是动态的。架构设计是基于work和master进程,其中master进程负责管理,work进程处理请求。如果需要修改配置,必须重启所有的work进程。

架构

在这里插入图片描述

数据面DP:实际处理流量转发的服务,在这里就是Nginx;

控制面CP:对接ingress规范,将配置的路由转换为数据面可以理解的格式,并下发这些配置,使之生效,包括:上游服务、消费者、插件和证书等;

数据存储:建议为APISIX单独部署一套Etcd;

优点:控制面出现问题,业务流量处理也不会受到影响,只是无法更新新的配置;

安装

apisix官方

apisix部署

在这里插入图片描述

流量转发

一旦流量成功匹配路由规则后,APISIX会将其转发给上游服务。

APISIX能够绕过Service,直接对接Pod,使整个流量转发过程变成APISIX到Pod的直接通信。从Kubernetes的网络模型来看,这就是集群内Pod到Pod之间的通信。

通常,会将网关组件独立部署在几台服务器上,因此网关转发请求到Pod,即服务本身需要跨节点通信。在Kubernetes的网络模型中,这种跨节点通信是由CNI插件来实现的。

模式

hostnetwork

优点:使用简单,并且能够传递真实IP。

将APISIX的network namespace直接附加到k8s node上,这样APISIX就不会使用Pod网络的地址,而是使用node的IP。数据转发时,受到kube-proxy配置的规则约束,经由postrouting链处理,再通过CNI跨节点到达目标服务。

缺点:没有使用网络虚拟化,最大的影响是无法使用滚动发布来更新网关服务。

external load balancer

需要外部硬件负载均衡,使用LoadBalancer类service,流量由外部SLB处理并转发到集群内。转发过程繁琐。

externalIPs

spec:ports:- name: apisix-gatewayprotocol: TCPport: 80targetPort: 80nodePort: 30238- name: tlsprotocol: TCPport: 443targetPort: 443nodePort: 32435selector:app.kubernetes.io/instance: apisixapp.kubernetes.io/name: apisixtype: NodePortexternalIPs:- A.B.x.xsessionAffinity: NoneexternalTrafficPolicy: Local

在这里插入图片描述

1、如果service为ClusterIP类型,则k8s层面的负载均衡有效,流量平均转发到后端Pod;

2、如果需要保留源IP地址,service须为NodePort类型,并将externalTrafficPolicy设置为Local。内核实现把发往external IP的80端口的请求转发给Pod,但会失去SVC服务负载均衡的能力;

3、由于apisix部署时有外置负载均衡提供vip,确保即使在某些节点出现故障时,服务仍然可以保持高可用,所以选择2;

4、此模式下,NodePort类型service不再发挥作用,因此可以在防火墙上只开放80、443,关闭30238、32435;

5、所有node依然通过iptables设置30238端口相关的规则,实际没用,因为externalTrafficPolicy设置为Local,只处理发给Pod所在node的流量;

6、登录对应node可以访问80、30238及443、32435;

7、为了更好地理解流量的路由路径,查看iptables发现,80端口的规则与ClusterIP对应,externalIPs使用A.B.x.x来匹配;

结论:
externalIPs实际上是NodePort类型service,借此指定端口映射到主机上,同时配合externalTrafficPolicy策略,将流量限制到指定的IP列表中。在三种模式中,使用了externalIPs,因为首先解决了hostnetwork不利于Pod变更的问题,其次利用了k8s原有功能实现,减少了转发路径,同时也保留了源IP。

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

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

相关文章

大厂服务降级规范

优质博文:IT-BLOG-CN 服务降级,是指在系统承受较大负载时,根据业务的紧急性和流量情况,对部分非核心或不紧急的服务采取延迟、简化或暂停处理的策略,从而释放系统资源,确保核心业务的高效稳定运行。 为何…

【火山引擎】调用火山大模型的方法 | SDK安装 | 配置 | 客户端初始化 | 设置

豆包 (Doubao) 是字节跳动研发的大规模预训练语言模型。 目录 1 安装 2 配置访问凭证 3 客户端初始化 4 设置地域和访问域名 5 设置超时/重试次数 1 安装 通过pip安装PYTHON SDK。 pip install volcengine-python-sdk[ark] 2 配置访问凭证 获取 API Key 访问凭证具体步…

docker容器运行一段时间提示Failed to initialize NVML: Unknown Error

情况描述 服务器使用docker启动容器。启动以后一切正常也能跑程序。但是,在运行一段时间(2天左右不等),会发现gpu掉了。输入nvidia-smi提示 Failed to initialize NVML: Unknown Error 主要发生条件是,docker启动的…

Oracle-19g数据库的安装

简介 Oracle是一家全球领先的数据库和云解决方案提供商。他们提供了一套完整的技术和产品,包括数据库管理系统、企业级应用程序、人工智能和机器学习工具等。Oracle的数据库管理系统是业界最受欢迎和广泛使用的数据库之一,它可以管理和存储大量结构化和…

Canmv k230 C++案例1——image classify学习笔记 初版

00 简介 用C编写代码的比mircopython要慢很多,需要编译开发环境,同时使用C更接近底层,效率利用率应该也是更高的,就是需要学习更多的内容,因为从零开始因此比较比较耗时。 注:以下为个人角度的理解&#x…

C#使用HslCommunication程序库快速创建MQTT客户端,实现连接、订阅主题、发送信息

说明: HslCommunication 这个通讯库是非常强大的,其稳定性非常可靠,虽然对于我个人来说在某些功能上配和项目还不算超级完美,但是够用 这个库可以在网上下载。 下面是MQTT客户端的完整的代码 using HslCommunication; using HslCommunicati…

科技云报到:云服务的中场战事,从AI应用开始

科技云报到原创。 从去年的大模型之战,到今年的AI应用之争,云服务正在迈入全新的发展阶段。AI这个杠杆将各家厂商的竞争策略更向前推进了一步。 “云AI”能够孵化出多少可能?在业界眼中,“云AI”则意味着新的悬念:云计…

2.4.ReactOS系统提升IRQL级别KfRaiseIrql 函数

2.4.ReactOS系统提升IRQL级别KfRaiseIrql 函数 2.4.ReactOS系统提升IRQL级别KfRaiseIrql 函数 文章目录 2.4.ReactOS系统提升IRQL级别KfRaiseIrql 函数KfRaiseIrql 函数 KfRaiseIrql 函数 /*********************************************************************** NAME …

Python网络爬虫

随着互联网的迅猛发展,数据成为了新的“石油”。人们对于信息的需求日益增涨,尤其是在市场分析、学术研究和数据挖掘等领域。网络爬虫作为一种自动提取网络数据的技术,因其强大的能力而备受关注。而Python,凭借其简洁的语法和丰富…

探索极简计算的新边界:从Uxn虚拟机看未来编程生态

越来越多的开发者追求复杂度和功能性的极致,然而,有一个小众的编程社区选择了截然不同的道路——极简主义。Uxn虚拟机便是这一思潮的代表之一。它通过简洁的指令集和有限的硬件资源模拟,试图打造一种可以在多种设备上运行的便携性编程环境。 与主流的重型操作系统和复杂…

【优选算法】(第四十二篇)

目录 最⼩基因变化(medium) 题目解析 讲解算法原理 编写代码 单词接⻰(hard) 题目解析 讲解算法原理 编写代码 最⼩基因变化(medium) 题目解析 1.题目链接:. - 力扣(LeetCo…

【代码随想录Day43】动态规划Part11

1143.最长公共子序列 题目链接/文章讲解:代码随想录 视频讲解:动态规划子序列问题经典题目 | LeetCode:1143.最长公共子序列_哔哩哔哩_bilibili class Solution {public int longestCommonSubsequence(String text1, String text2) {// 将输…

wireshark抓包

网络抓包工具Wireshark下载安装&使用详细教程-CSDN博客 下载地址:Wireshark Downloadhttps://www.wireshark.org/download.html modbus tcp 关于wireshark无法分析出modbusTCP报文的事情_wireshark 协议一列怎么没有modbus tcp-CSDN博客 使用Wireshark过滤…

4、Spring Boot 3.x集成MQTT(EMQX)主题动态订阅

一、前言 本篇主要是围绕着MQTT这个点,在生产环境中可能存储某些主题随时订阅和取消的逻辑,因为自己本身项目的需要所以顺便把这部分补充一下二、调整MQTT配置 1、调整 MqttConfig.java 在 MqttConfig.java 中新增两个方法/*** 添加订阅主题的方法** …

【动手学深度学习】6.2 图像卷积(个人向笔记)

1. 互相关运算 严格来说,卷积层是一个错误的叫法,因为它本质上是互相关运算而不是卷积运算。我们暂时忽略通道看看二维图像数据和隐藏表示。那么输出大小可以表示为 我们自己实现一个二维互相关运算 2. 卷积层 卷积层中有两个参数:卷积核权…

鸿蒙OS投票机制

(基于openharmony5.0) 投票机制 param get | grep ohos.boot.time 图 投票机制参数图 只有当所有的投票完成,开机动画才会退出,整理需要投票的系统应用(三方应用不参与投票)如下图所示: 以进程foundation为例&…

PRT一键转STL/OBJ,在线预览更直观

随着3D打印技术的普及和设计软件的多样化,不同3D模型格式之间的转换需求也日益增长。PRT作为一种常见的三维设计文件格式,在工程设计领域应用广泛。然而,PRT格式并不被所有3D软件和3D打印机所支持。 为什么选择我们的PRT转换器? …

快速理解http的get和post

在网络通信中,HTTP 协议扮演着非常重要的角色,而不同的 HTTP 方法决定了客户端与服务器之间的交互方式。 这里讲一下最常用的两种方法——GET 和 POST。 一、GET 方法 GET 方法用于从服务器获取资源。 这就像去图书馆借书——你向图书馆请求一本特定的…

光路科技TSN交换机和电力专用交换机即将亮相第31届中国国际电力设备及技术展览会

在全球能源领域正经历深刻转型之际,可再生能源技术的飞跃进步正为电力行业的未来开辟新径。太阳能、风能等绿色能源,凭借其无可比拟的优势,正稳步取代化石燃料,成为电力行业的主流趋势。多国政府积极响应,出台多项政策…

Vue3获取ref元素的几种方式

静态绑定 获取单个 dom 元素 v-for 中使用 需要注意的是,访问的时候,要确保 ref 引用值已经成功绑定上元素,我们可以使用以下几种方式确保获取