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
英文地址,請注明出處:http://en.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.查看運行時創建但是沒有釋放的資源…