Kubernetes Ingress:使用 Apache APISIX 进行外部流量路由

什么是 Ingress?

在 Kubernetes 中,随着微服务架构的广泛应用,集群中的服务需要暴露到外部,以便供用户或其他服务访问。如何高效、安全地管理这些流量,成为了一个重要的议题。Ingress 作为 Kubernetes 提供的一种资源,能够为你提供灵活且高效的外部流量路由功能。本文将介绍如何在 Kubernetes 中使用 Apache APISIX 作为 Ingress 控制器,来智能地管理和路由外部流量。

Ingress 是 Kubernetes 中的一种资源,主要用于控制和管理外部 HTTP 和 HTTPS 流量如何进入集群。Ingress 可以基于请求的 域名路径 等规则,将流量路由到集群内部的不同服务。与传统的 NodePortLoadBalancer 服务暴露方式相比,Ingress 更加灵活高效,适合在微服务架构中使用。

Ingress 的基本功能

  1. 外部流量路由:根据域名、路径等规则将流量路由到目标服务。
  2. 负载均衡:Ingress 控制器能够自动为服务提供流量分发,确保流量均匀分配到各个 Pod 上。
  3. SSL/TLS 终止:Ingress 可以配置 SSL/TLS 证书,确保安全的 HTTPS 流量。
  4. 请求重定向与重写:Ingress 允许根据路径规则对请求进行重定向和重写。

Apache APISIX 作为 Ingress 控制器

Apache APISIX 是一个高性能、可扩展的 API 网关。它原生支持 Kubernetes Ingress,可以作为 Kubernetes 集群中的 Ingress 控制器,处理和管理外部流量。APISIX 不仅提供流量路由功能,还集成了负载均衡、流量控制、日志收集等功能,非常适合微服务架构中的流量管理。

为什么选择 APISIX 作为 Ingress 控制器?

  1. 高性能:APISIX 基于 NGINX 和 OpenResty 构建,性能非常高,能够处理大量的并发请求。
  2. 灵活的路由规则:支持路径、域名、请求头、方法等灵活的路由规则。
  3. 丰富的插件生态:APISIX 提供了丰富的插件支持,比如认证、流量控制、API 限速、监控等,可以满足大多数场景的需求。
  4. 动态配置:APISIX 支持动态配置,可以通过 Kubernetes API 和 ConfigMap 轻松调整路由规则和服务配置。

Ingress 的工作原理

Ingress 是通过 Ingress 控制器 实现外部流量路由的。Ingress 控制器监听 Kubernetes 中的 Ingress 资源,并根据配置的路由规则将流量转发到对应的服务。

Apache APISIX 作为 Ingress 控制器,会根据集群中定义的 Ingress 资源和路由规则,将外部流量路由到相应的服务。APISIX 控制器会自动管理负载均衡、请求转发、SSL/TLS 终止等任务。

基本工作流程:

  • 外部请求通过负载均衡器进入集群,发送到 Ingress 控制器(如 Apache APISIX)。
  • Ingress 控制器解析 Ingress 资源中的路由规则,确定将流量转发到哪个 Service
  • 流量被转发到对应的 Service,Service 会根据选择器将流量转发到匹配的 Pod
  • 最终,Pod 处理请求并返回响应。

如何配置 Apache APISIX 作为 Ingress 控制器?

1. 部署 Apache APISIX Ingress 控制器

在 Kubernetes 中使用 Apache APISIX 作为 Ingress 控制器,首先需要部署 APISIX 控制器。以下是部署步骤:

# 添加 APISIX 官方 Helm 仓库
helm repo add apisix https://charts.apisix.apache.org
helm repo update# 安装 APISIX Ingress 控制器
helm install apisix apisix/apisix-ingress-controller \--set apisix.gateway.enabled=true \--set ingressController.installCRDs=true

这个命令将会部署 APISIX 控制器以及相关的 CRDs(自定义资源定义),并为集群中的服务提供路由能力。

2. 创建 Ingress 资源

APISIX 控制器将根据你定义的 Ingress 资源规则将外部流量路由到 Kubernetes 集群中的服务。以下是一个基本的 Ingress 资源示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-ingressannotations:ingress.kubernetes.io/rewrite-target: /apisix.ingress.kubernetes.io/ssl-redirect: "true"
spec:rules:- host: example.comhttp:paths:- path: /frontendpathType: Prefixbackend:service:name: frontend-serviceport:number: 80- path: /backendpathType: Prefixbackend:service:name: backend-serviceport:number: 80

在上面的例子中,外部请求 http://example.com/frontend 会被路由到 frontend-service,而请求 http://example.com/backend 会被路由到 backend-service。APISIX 会根据这些规则管理流量路由,并根据需要执行负载均衡。

3. 配置域名和负载均衡器

为了通过域名 example.com 访问服务,你需要将该域名指向 APISIX 控制器 的外部负载均衡器的 IP 地址。如果你使用云平台(如 AWS、GCP),负载均衡器会提供一个外部 IP 地址。

将 DNS 配置指向这个 IP 地址:

  • example.com → APISIX 控制器的外部 IP 地址

这样,当用户访问 http://example.com 时,流量会通过 APISIX 控制器路由到相应的服务。

4. 配置 SSL/TLS

如果你希望通过 HTTPS 提供安全的访问,可以为 APISIX 配置 SSL/TLS 证书。首先,你需要将证书存储为 Kubernetes Secret,然后在 Ingress 资源中引用它:

  1. 创建 TLS 证书 Secret:
kubectl create secret tls apisix-tls --cert=cert.crt --key=cert.key
  1. 更新 Ingress 资源,启用 SSL/TLS:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: secure-ingress
spec:tls:- hosts:- example.comsecretName: apisix-tlsrules:- host: example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: my-serviceport:number: 443

这将确保所有通过 https://example.com 访问的流量都通过 TLS 加密,提供安全的通信。

5. 使用 APISIX 插件增强功能

APISIX 提供了多种插件,允许你增强流量控制的能力。例如,你可以启用流量限速、身份验证、日志记录等功能。通过配置 Ingress 注解,你可以轻松启用这些插件。

例如,启用流量限速插件:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-ingressannotations:apisix.ingress.kubernetes.io/plugins: rate-limiting
spec:rules:- host: example.comhttp:paths:- path: /pathType: Prefixbackend:service:name: my-serviceport:number: 80

这样,APISIX 会为 example.com 配置流量限速插件,限制每秒钟的请求数。


总结

Apache APISIX 作为一个高性能的 API 网关和 Ingress 控制器,能够为 Kubernetes 提供灵活、强大的外部流量路由和管理能力。通过配置 APISIX Ingress 控制器,你可以轻松地将外部 HTTP/HTTPS 流量路由到集群中的不同服务,并且还能够集成负载均衡、SSL/TLS 终止、流量控制等功能。

与传统的 NodePortLoadBalancer 服务暴露方式相比,APISIX 提供了更高的灵活性、可扩展性和可管理性,特别适合用于微服务架构中多服务的流量路由。通过 APISIX,你可以更好地控制外部流量的访问方式,提高集群的性能、安全性和可靠性。

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

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

相关文章

Elasticsearch的理解与使用

在大数据与云计算时代,“高效检索” 与 “实时分析” 成为业务突破的关键能力。Elasticsearch(简称 ES)作为一款开源分布式搜索与分析引擎,凭借其低延迟、高可扩、强灵活的特性,已成为日志分析、全文检索、业务监控等场…

利用FFmpeg自动批量处理m4s文件

缓存了一些视频m4s文件,只能用指定的软件打开,网上查了一下,需要去掉m4s文件开头的9个0,还要用FFmpeg将两个文件合并成一个文件。 经仔细研究缓存目录和其中文件,发现以下特点:“缓存目录”中有很多“数字文…

MLLM学习~M3-Agent Prompt学习

Prompt “输入→处理→输出→评估” 全流程 Prompt 并非孤立存在,形成了完整的视频理解链路: 视频原始数据(语音 / 图像)→ 模块 1(提取语音 绑定人物 ID)→ 模块 2(生成情景记忆描述&#xff…

Ubuntu 20.04安装显卡驱动、CUDA、Miniconda和Pytorch(2025.06最新)-Ubuntu从零搭建深度学习环境

文章目录一、安装显卡驱动1.1 查看显卡型号1.2 根据显卡型号选择驱动1.3 获取下载链接1.4 查看下载的显卡驱动安装文件1.5 更新软件列表和安装必要软件、依赖1.6 卸载原有驱动1.7 禁用默认驱动1.8 安装lightdm显示管理器1.9 停止显示服务器1.10 在文本界面中,禁用X-…

PyCharm 连接 AutoDL 远程服务器

实验室的电脑性能不行了,所以想着租一台服务器,然后还想使用PyCharm在本地编程,因此就查找相关资料,这里记录一下配置过程,方便以后查阅。 PyCharm 连接 AutoDL 远程服务器PyCharm 连接服务器上传数据集到服务器运行代…

Spark广播变量HttpBroadcast和TorrentBroadcast对比

HttpBroadcast会在driver端的BlockManager里面存储广播变量对象,并且将该广播变量序列化写入文件中去。所有获取广播数据请求都在driver端,所以存在单点故障和网络IO性能问题。 TorrentBroadcast会在driver端的BlockManager里面存储广播变量对象&#xf…

新手向:C语言、Java、Python 的选择与未来指南

语言即工具,选对方向比埋头苦学更重要你好,编程世界的新朋友!当你第一次踏入代码的宇宙,面对形形色色的编程语言,是否感到眼花缭乱?今天我们就来聊聊最主流的三种编程语言——C语言、Java 和 Python——它们…

收集飞花令碎片——C语言关键字typedef

在C语言的指针章节中,我们讲到函数指针模块 在函数指针中,有一个重要的关键字:typedef typedef关键字作用基本语法重难点:对数组指针与函数指针的重命名数组指针重命名一维数组指针重命名遍历二维数组函数指针重命名作用 typedef是…

基于Spring Boot的家政服务管理系统+论文示例参考

1.项目介绍 系统角色:管理员、家政服务、服务人员功能模块:用户管理、服务人员、服务类型、家政服务、服务预约、接单信息、服务记录、评价信息、反馈投诉等技术选型:SpringBoot,Vue等测试环境:idea2024,jd…

AI助力HTML5基础快速入门:从零开始理解网页结构

前言 作为一名前端开发初学者,理解HTML的基本结构是你踏入Web开发世界的第一步。HTML(超文本标记语言)是构建网页的基础,就像盖房子需要先搭建好框架一样,学习HTML就是学习如何构建网页的基本骨架。今天,我…

实现调用libchdb.a静态连接库中的未公开导出函数

前文写了调用libchdb.so动态连接库中的未公开导出函数的方法,不久前chdb发布了3.6版,其中提供了静态链接库。 尝试编译一个不依赖庞大动态连接库libchdb.so的程序,获得了成功,以下是操作步骤。 1.下载chdb静态连接库 wget https:…

HTTPS 端口号详解 443 端口作用、iOS 抓包方法、常见 HTTPS 抓包工具与网络调试实践

在现代互联网中,几乎所有移动应用和网站都使用 HTTPS 协议 来保障数据安全。而 HTTPS 的默认端口就是 443。相比 HTTP 的 80 端口,443 不仅增加了 SSL/TLS 加密,还涉及到证书验证和加密握手,这使得开发者在进行 HTTPS 抓包 时面临…

【Python系列PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘pyqt5’问题

【Python系列PyCharm控制台pip install报错】如何解决pip安装报错ModuleNotFoundError: No module named ‘pyqt5’问题 摘要 在日常Python开发中,使用PyCharm控制台执行pip install时经常会遇到ModuleNotFoundError: No module named pyqt5等类似报错。这类报错不仅…

“可信资产IPO +数链金融RWA” 链改2.0六方共识(深圳)

“可信资产IPO 数链金融RWA”链改2.0六方共识【2025年8月30日 深圳】全球数链金融的建设者、创新者与决策者:我们——来自“生态、项目、资金、合规、技术、行业”六方领域的实践者,在链改1.0的基础上于深圳达成链改2.0时代核心共识:以“可信…

华为云 GaussDB:金融级高可用数据库,为核心业务保驾护航

一、文档概述在数字化浪潮席卷全球的当下,数据已成为企业发展的核心战略资产,而数据库作为数据存储、管理与交互的核心载体,其稳定性、可靠性与安全性直接决定了企业业务的连续性与竞争力。尤其在对数据准确性、业务连续性要求近乎苛刻的金融…

Docker快速入门手册

文章目录一、安装验证是否安装成功二、Docker命令镜像容器数据卷管理网络模式三、Dockerfile推送至镜像仓库阿里云ECI弹性容器部署阿里云Serverless应用引擎SAE部署阿里云FC函数部署容器四、Docker Compose::: tip 简介Docker是一种开源的应用容器引擎,让开发者能够…

Golang并发编程及其高级特性

并发编程模型 线程模型:Go的GoroutineGoroutine(M:N 模型) package mainimport ("fmt""runtime""sync""time" )func main() {// 查看当前机器的逻辑CPU核心数,决定Go运行时使用多少OS线程…

弧形导轨如何提升新能源汽车的能效和续航里程?

弧形导轨在新能源汽车中的应用主要集中在电池生产线和自动化装配线等领域,通过提高生产效率和精度,间接提升新能源汽车的能效和续航里程。高精度装配:在新能源汽车的电池生产线中,弧形导轨用于高精度的自动化装配设备,…

考研择校考虑因素和备考流程

考研择校一、选择专业二、选择学校三、考研计划安排一、选择专业 1、了解自己的未来工作规划(这里肯定没有啥规划); 2、连接考研的相关几个专业哪个好就业(公务员和找工作); 3、知乎、小红书、deepseek都可…

1.13 Memory Profiler Package - Unity Objects(unity对象页签)

1.Unity Objects(Unity对象页签)简介 2.界面功能参数1.Unity Objects(Unity对象页签)简介 Unity Objects用于快速定位unity对象内存占用的类型和具体实例a.查找内存占用最大的资源, 判断这些资源是否可以压缩或延迟加载b.查找重复加载的资源c.查看运行时创建但是没有释放的资源…