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-gateway
      protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30238
    - name: tls
      protocol: TCP
      port: 443
      targetPort: 443
      nodePort: 32435
  selector:
    app.kubernetes.io/instance: apisix
    app.kubernetes.io/name: apisix
  type: NodePort
  externalIPs:
    - A.B.x.x
  sessionAffinity: None
  externalTrafficPolicy: 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.mfbz.cn/a/888900.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汽车车轮平衡块行业前景:预计2030年全球市场规模将达到10亿美元

汽车车轮平衡块,也称为轮胎平衡块,是一种安装在车轮上的配重部件。它的主要作用是帮助车轮在高速旋转状态下保持动平衡。当车轮高速旋转时,由于车轮的动态不平衡状态,会导致车辆在行驶中出现车轮抖动和方向盘震动的现象。汽车车轮…

VSOMEIP代码阅读整理(1) - 网卡状态监听

一. 概述 在routing进程所使用的配置文件中,存在如下配置项目:{"unicast" : "192.168.56.101",..."service-discovery" :{"enable" : "true","multicast" : "224.244.224.245",…

【数据结构】栈和队列 + 经典算法题

目录 前言 一、栈 二、栈的实现 三、栈的循环遍历演示 四、栈的算法题 // 一、队列 二、队列的实现 三、使用演示 四、队列的算法题 总结 前言 本文完整实现了栈和队列的数据结构,以及栈和队列的一些经典算法题,让我们更加清楚了解这两种数据…

昇思MindSpore进阶教程--数据处理性能优化(中)

大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧 shuffle性能优化 shuffle操作主要是对有…

PCB缺陷检测数据集 xml 可转yolo格式 ,共10688张图片

PCB缺陷检测数据集(yolov5,v7,v8) 数据集总共有两个文件夹,一个是pcb整体标注,一个是pcb部分截图。 整体标注有6个分类,开路,短路等都已经标注,标注格式为xml,每个文件夹下有100多张…

vue3 环境配置vue-i8n国际化

一.依赖和插件的安装 主要是vue-i18n和 vscode的自动化插件i18n Ally https://vue-i18n.intlify.dev/ npm install vue-i18n10 pnpm add vue-i18n10 yarn add vue-i18n10 vscode在应用商城中搜索i18n Ally:如图 二.实操 安装完以后在对应项目中的跟package.jso…

探索Python的工业通信之光:pymodbus的奇妙之旅

文章目录 探索Python的工业通信之光:pymodbus的奇妙之旅背景:为何选择pymodbus?pymodbus是什么?如何安装pymodbus?5个简单的库函数使用方法3个场景使用示例常见bug及解决方案总结 探索Python的工业通信之光&#xff1a…

排序|插入排序|希尔排序|直接选择排序|堆排序的实现即特性(C)

插入排序 基本思想 直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 单趟 当插入第 i ( i ≤ 1…

共享单车轨迹数据分析:以厦门市共享单车数据为例(十)

副标题:共享单车与地铁站出入口分布情况探究——以厦门市为例 假期结束了,我们满血复活,继续更新! 本篇文章我们讨论共享单车与地铁出入口的关系,在上一篇文章中,我们讨论了综合得分指数最高的地铁站——…

Windows系统安装Docker

文章参考:Windows 安装docker(详细图解)-CSDN博客 安装包下载: 安装wsl的官方文档:安装 WSL | Microsoft Learn 查看windows相关配置 打开 (CTRLALTDELETE) 任务管理器 -> 选择性能 -> CPU ->虚拟化&#…

【重学 MySQL】四十七、表的操作技巧——修改、重命名、删除与清空

【重学 MySQL】四十七、表的操作技巧——修改、重命名、删除与清空 修改表添加字段语法示例注意事项 删除字段语法示例 修改字段使用 MODIFY COLUMN语法示例 使用 CHANGE COLUMN语法示例 重命名表语法示例 删除表语法示例 清空表使用 TRUNCATE TABLE使用 DELETE FROM对比 TRUNC…

处理Java内存溢出问题(java.lang.OutOfMemoryError):增加JVM堆内存与调优

处理Java内存溢出问题(java.lang.OutOfMemoryError):增加JVM堆内存与调优 在进行压力测试时,遇到java.lang.OutOfMemoryError: Java heap space错误或者nginx报错no live upstreams while connecting to upstream通常意味着应用的…

Unity MVC框架演示 1-1 理论分析

本文仅作学习笔记分享与交流,不做任何商业用途,该课程资源来源于唐老狮 1.一般的图解MVC 什么是MVC我就不说了,老生常谈,网上有大量的介绍,想看看这三层都起到什么职责?那就直接上图吧 2.我举一个栗子 我有…

OpenSource - License 开源项目 TrueLicense

文章目录 官网集成Demo 官网 https://truelicense.namespace.global/ https://github.com/christian-schlichtherle/truelicense 集成Demo https://github.com/christian-schlichtherle/truelicense-maven-archetype https://github.com/zifangsky/LicenseDemo https://git…

机器学习——多模态学习

多模态学习:机器学习领域的新视野 引言 多模态学习(Multimodal Learning)是机器学习中的一个前沿领域,它涉及处理和整合来自多个数据模式(如图像、文本、音频等)的信息。随着深度学习的蓬勃发展&#xff0…

2020年华为杯数学建模竞赛D题论文和代码

无人机集群协同对抗 摘 要: 本文针对非线性约束条件下红蓝双方无人机集群协同对抗的最优规划问题,结合贪婪队形、非线性规划、内点法、蒙特卡洛方法和全联立正交配置有限元法,构建了无人机集群协同对抗推演模型。 针对问题一&#…

【刷题7】寻找数组的中心下标、和为k的子数组、和可被k整除的子数组

目录 一、寻找数组的中心下标二、和为k的子数组三、和可被k整除的子数组 一、寻找数组的中心下标 题目: 思路:前缀和思想 预处理一个前缀和数组和一个后缀和数组,当前指向的元素的值不包括在数组的元素和中;前缀和数组的公式…

网络受限情况下安装openpyxl模块提示缺少Jdcal,et_xmlfile

1.工作需要处理关于Excel文件内容的东西 2.用公司提供的openpyxl模块总是提示缺少jdcal文件,因为网络管控,又没办法直接使用命令下载,所以网上找了资源,下载好后上传到个人资源里了 资源路径 openpyxl jdcal et_xmlfile 以上模块来源于:Py…

数据湖数据仓库数据集市数据清理以及DataOps

一提到大数据我们就知道是海量数据,但是我们并不了解需要从哪些维度去考虑这些数据的存储。比如 数据湖、数据仓库、数据集市,以及数据自动化应用DataOps有哪些实现方式和实际应用,这篇文章将浅显的做一次介绍。 数据湖 数据湖是一种以自然…

已解决:org.springframework.web.HttpMediaTypeNotAcceptableException

文章目录 写在前面问题描述报错原因分析: 解决思路解决办法1. 确保客户端请求的 Accept 头正确2. 修改 Controller 方法的 produces 参数3. 配置合适的消息转换器4. 检查 Spring 配置中的媒体类型5. 其他解决方案 总结 写在前面 在开发过程中,Spring 框…