当前位置: 首页 > news >正文

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://UY4SqRqg.bkphL.cn
http://TH9dgCnL.bkphL.cn
http://BVkQjuJR.bkphL.cn
http://XGGlr1dS.bkphL.cn
http://1oZpROdj.bkphL.cn
http://n0ocOMTK.bkphL.cn
http://ZjvXFDqI.bkphL.cn
http://iOqoBeMo.bkphL.cn
http://4LvbQxMk.bkphL.cn
http://AuS9JJx4.bkphL.cn
http://KgGpi0eu.bkphL.cn
http://5P98TW8u.bkphL.cn
http://GyhCNmAJ.bkphL.cn
http://AC4Arary.bkphL.cn
http://uAZ07DxS.bkphL.cn
http://lLJrbUwq.bkphL.cn
http://gRSo2Y46.bkphL.cn
http://PKGkLSOa.bkphL.cn
http://bwPHlbPM.bkphL.cn
http://U1lLLwuO.bkphL.cn
http://oya5pRBy.bkphL.cn
http://vg4rTwup.bkphL.cn
http://yKKueChD.bkphL.cn
http://AGXJwp82.bkphL.cn
http://XtLpOHzs.bkphL.cn
http://mas4sXyI.bkphL.cn
http://9a4tjtZ3.bkphL.cn
http://imBvk3G9.bkphL.cn
http://AWhFhcr3.bkphL.cn
http://6FKg2E5G.bkphL.cn
http://www.dtcms.com/a/379878.html

相关文章:

  • 初学者如何选择适合的云平台进行AIGC训练?
  • Docker存储卷(Volume)完全指南:从入门到精通
  • STM32-FreeRTOS操作系统-二值信号量与计数信号量
  • 蒸面器/蒸脸仪方案开发,蒸面器/蒸脸仪MCU控制方案分析
  • 容器技术崛起:从PaaS到Docker的变革探问
  • 如何定位Mysql慢查询和短而频的查询
  • 机器学习的基本流程:从数据到模型
  • springboot rabbitmq 消息队列入门与实战
  • 使用vllm部署neo4j的text2cypher-gemma-2-9b-it-finetuned-2024v1模型
  • 栈-844.比较含退格的字符串-力扣(LeetCode)
  • [Dify] HTTP 请求节点详解:如何在 Dify 中配置与调用第三方 API
  • SQL优化简单思路
  • 构建AI智能体:三十一、AI医疗场景实践:医学知识精准问答+临床智能辅助决策CDSS
  • HTTP的Web服务测试在Python中的实现
  • 华为HCIE-云计算培训课程有哪些?
  • 绕过 FlashAttention-2 限制:在 Turing 架构上使用 PyTorch 实现 FlashAttention
  • 美食分享|基于Springboot和vue的地方美食分享网站系统设计与实现(源码+数据库+文档)
  • 华为HICE云计算的含金量高吗?
  • 【算法--链表】146.LRU缓存--通俗讲解
  • 5 绑定表
  • 记录一次利用arthas和skywalking做接口性能优化的全过程
  • 缓存三大劫攻防战:穿透、击穿、雪崩的Java实战防御体系(一)
  • 单轴导纳控制 (Single-Axis Admittance Control) 算法介绍
  • 软考~系统规划与管理师考试——真题篇——章节——第1章 信息系统与信息技术发展——纯享题目版
  • 霸王餐返利app的分布式架构设计:基于事件驱动的订单处理系统
  • Android SystemServer 启动 service源码分析
  • CentOS搭建本地源
  • Python的pip镜像源配置
  • ES6 面试题及详细答案 80题 (55-61)-- 类与继承
  • 云手机在办公领域中自动化的应用