Apache APISIX 快速入門

文章目錄

  • apisix 快速入門
    • 什么是apisix
    • 有了 NGINX 和 Kong,為什么還需要 Apache APISIX?
    • 軟件架構
      • 基于 Nginx 開源版本,而 Nginx 并不支持動態配置,為什么 Apache APISIX 聲稱自己可以實現動態配置?
    • 安裝
    • 配置 APISIX
      • 配置路由
      • 配置負載均衡
      • 密鑰驗證
        • Key Authentication 是什么#
      • 限速

apisix 快速入門

什么是apisix

官網:https://apisix.apache.org/zh/
官方文檔:https://apisix.apache.org/zh/docs/apisix/getting-started/README/

Apache APISIX 是 Apache 軟件基金會下的頂級項目,它是一個具有動態、實時、高性能等特點的云原生 API 網關。

你可以使用 APISIX 網關作為所有業務的流量入口,它提供了動態路由、動態上游、動態證書、A/B 測試、灰度發布(金絲雀發布)、藍綠部署、限速、防攻擊、收集指標、監控報警、可觀測、服務治理等功能。

APISIX 和其他的 API 網關有什么不同之處?#
Apache APISIX 在以下方面有所不同:

— 它使用 etcd 來保存和同步配置,而不是使用如 PostgreSQL 或 MySQL 這類的關系數據庫。etcd 中的實時事件通知系統比這些替代方案更容易擴展。這允許 APISIX 實時同步配置,使代碼簡潔,并避免單點故障

  • 完全動態
  • 支持熱加載插件。

有了 NGINX 和 Kong,為什么還需要 Apache APISIX?

原文鏈接:https://xie.infoq.cn/article/04ec5ead0571ca4b4b1806ad0

總結
NGINX:雖然 NGINX 是一個穩定且廣泛使用的解決方案,但其社區活躍度低、動態配置能力不足,且對 gRPC 的支持有限。
Kong:Kong 在云原生架構方面有所優勢,但其控制面并不完全符合云原生標準,且對 PostgreSQL 的依賴限制了其彈性擴展能力。

活躍的開源社區:APISIX 是全球最活躍的開源 API 網關項目之一,擁有超過 200 位貢獻者,社區活躍度高于 NGINX 和 Kong。這種活躍度意味著更快的更新和更豐富的功能擴展。
支持多語言:APISIX 正在逐步支持多種編程語言(如 Java、Golang、Rust 和 NodeJS),使得開發者可以使用自己熟悉的技術棧進行開發。

軟件架構

官方文檔:https://apisix.apache.org/zh/docs/apisix/architecture-design/apisix/
Apache APISIX 是一個動態、實時、高性能的云原生 API 網關。它構建于 NGINX + ngx_lua 的技術基礎之上,充分利用了 LuaJIT 所提供的強大性能。

APISIX 在其核心中,提供了路由匹配、負載均衡、服務發現、API 管理等重要功能,以及配置管理等基礎性模塊。除此之外,APISIX 插件運行時也包含其中,提供原生 Lua 插件的運行框架和多語言插件的運行框架,以及實驗性的 Wasm 插件運行時等。APISIX 多語言插件運行時提供多種開發語言的支持,比如 Golang、Java、Python、JS 等。

APISIX 目前也內置了各類插件,覆蓋了 API 網關的各種領域,如認證鑒權、安全、可觀測性、流量管理、多協議接入等。當前 APISIX 內置的插件使用原生 Lua 實現,關于各個插件的介紹與使用方式,可以查看相關插件文檔。

基于 Nginx 開源版本,而 Nginx 并不支持動態配置,為什么 Apache APISIX 聲稱自己可以實現動態配置?

原文鏈接:https://apisix.apache.org/zh/blog/2021/08/25/why-apache-apisix-chose-nginx-and-lua/
Nginx 的路由需要在配置文件里面進行配置,每次更改路由,都需要 reload 之后才能生效。這是因為 Nginx 的路由分發只支持靜態配置,不能動態增減路由。

為了實現路由動態配置,Apache APISIX 做了兩件事:

  1. 在 Nginx 配置文件里面配置單個 server,這個 server 里面只有一個 location。我們把這個 location 作為主入口,這樣所有的請求都會走到這個地方上來。
  2. 我們用 Lua 完成路由分發的工作。Apache APISIX 的路由分發模塊,支持在運行時增減路由,這樣就能動態配置路由了。

你可能會問,在 Lua 里面做路由分發,會比 Nginx 的實現慢嗎?

就像前面提到過的一樣,凡是對性能要求比較高的,我們會把核心代碼用 C 改寫。我們的路由分發模塊就是這么干的。路由分發模塊在匹配路由時,會采用一個前綴樹來匹配。而這個前綴樹是用 C 實現的。感興趣的讀者可以看下代碼:https://github.com/api7/lua-resty-radixtree/ 。

采用 Lua 代碼來做路由還有一個好處:它減低了二次開發的門檻。

如果在路由過程中需要有特殊的邏輯,用戶可以實現成自定義的變量和運算符,比如通過 IP 庫匹配到的地理位置來決定采用哪條路由。用戶只需要寫一些 Lua 代碼,這要比修改 Nginx C module 的難度小多了。

在 Apache APISIX 里面,不僅僅路由是動態的,我們的 TLS 服務端證書和上游節點配置都是動態的,而且無需修改 Nginx —— 上述功能可以跑在官方的 Nginx + Lua 技術棧上。

總結: 動態性好一點,不用重reload nginx。

安裝

如果你在安裝 APISIX 時選擇了 Docker 或 Helm 安裝,那么 etcd 將會自動安裝;如果你選擇其他方法或者需要手動安裝 APISIX,請參考以下步驟安裝 etcd:

這里就是以docker安裝為主。

快速啟動腳本需要以下條件:

已安裝 Docker,用于部署 etcd 和 APISIX。
已安裝 curl,用于驗證 APISIX 是否安裝成功。

APISIX 可以借助 quickstart 腳本快速安裝并啟動:

curl -sL https://run.api7.ai/apisix/quickstart | sh
該命令啟動 apisix-quickstart 和 etcd 兩個容器,APISIX 使用 etcd 保存和同步配置。APISIX 和 etcd 容器使用 Docker 的 host 網絡模式,因此可以從本地直接訪問。

配置 APISIX

請不要手動修改 APISIX 安裝目錄下的 ./conf/nginx.conf 文件。當 APISIX 啟動時,會根據 config.yaml 的配置自動生成新的 nginx.conf 并自動啟動服務。

通過修改本地 ./conf/config.yaml 文件,或者在啟動 APISIX 時使用 -c 或 --config 添加文件路徑參數 apisix start -c ,完成對 APISIX 服務本身的基本配置。默認配置不應修改,可以在 apisix/cli/config.lua 中找到。

比如指定 APISIX 默認監聽端口為 8000,并且設置 etcd 地址為 http://foo:2379,其他配置保持默認。在 ./conf/config.yaml 中只需這樣配置:

apisix:node_listen: 8000 # APISIX listening portdeployment:role: traditionalrole_traditional:config_provider: etcdetcd:host:- "http://foo:2379"

更新 Admin API key

deployment:admin:admin_key-name: "admin"key: newsupersecurekey  # 請修改 key 的值role: admin

建議修改 Admin API 的 key,保護 APISIX 的安全。

更新完成后,你可以使用新的 key 訪問 Admin API:

curl http://127.0.0.1:9180/apisix/admin/routes?api_key=newsupersecurekey -i

配置路由

在 APISIX 中,路由配置通常是動態管理的,而不是靜態寫在 config.yaml 文件中。

APISIX 的路由配置是動態管理的,主要通過 API 或控制面工具(如 APISIX Dashboard)進行配置,并存儲在 Etcd 中。config.yaml 文件主要用于配置 APISIX 的基本運行參數和與外部系統的集成設置。

Route 是什么#
Route(也稱之為路由)是訪問上游目標的路徑,在 Apache APISIX 中,Route 首先通過預定的規則來匹配客戶端請求,然后加載和執行相應的插件,最后將請求轉發至特定的 Upstream。

在 APISIX 中,一個最簡單的 Route 僅由匹配路徑和 Upstream 地址兩個信息組成。

Upstream 是什么#
Upstream(也稱之為上游)是一組具備相同功能的節點集合,它是對虛擬主機的抽象。Upstream 可以通過預先配置的規則對多個服務節點進行負載均衡。

創建路由#
你可以創建一個路由,將客戶端的請求轉發至 httpbin.org(這個網站能測試 HTTP 請求和響應的各種信息)。

通過下面的命令,你將創建一個路由,把請求http://127.0.0.1:9080/ip 轉發至 httpbin.org/ip:

curl -i "http://127.0.0.1:9180/apisix/admin/routes" -X PUT -d '
{"id": "getting-started-ip","uri": "/ip","upstream": {"type": "roundrobin","nodes": {"httpbin.org:80": 1}}
}'

如果配置成功,將會返回 HTTP/1.1 201 Created。

驗證#

curl "http://127.0.0.1:9080/ip"

你將會得到類似下面的返回:

{"origin": "183.94.122.205"
}

配置負載均衡

創建一個具有兩個上游服務的路由,訪問 /headers 將被轉發到 httpbin.org 和 mock.api7.ai 這兩個上游服務,并且會返回請求頭。

創建一個具有兩個上游服務的路由,訪問 /headers 將被轉發到 httpbin.org 和 mock.api7.ai 這兩個上游服務,并且會返回請求頭。

curl -i "http://127.0.0.1:9180/apisix/admin/routes" -X PUT -d '
{"id": "getting-started-headers","uri": "/headers","upstream" : {"type": "roundrobin","nodes": {"httpbin.org:443": 1,"mock.api7.ai:443": 1},"pass_host": "node","scheme": "https"}
}'

如果路由創建成功,你將會收到返回 HTTP/1.1 201 Created。

info
將 pass_host 字段設置為 node,將傳遞請求頭給上游。
將 scheme 字段設置為 https,向上游發送請求時將啟用 TLS。

密鑰驗證

APISIX 擁有靈活的插件擴展系統,目前有很多可用于用戶身份驗證和授權的插件。例如:

  • Key Authentication
  • Basic Authentication
  • JSON Web Token (JWT) Authentication
  • Keycloak
  • Casdoor
  • Wolf RBAC
  • OpenID Connect
  • Central Authentication Service (CAS)
  • HMAC
  • Casbin
  • LDAP
  • Open Policy Agent (OPA)
  • Forward Authentication
  • Multiple Authentications

本教程中,你將創建一個帶有 Key Authentication 插件的 消費者,并學習如何啟用和停用身份驗證插件。

Consumer 是什么#
Consumer(也稱之為消費者)是指使用 API 的應用或開發人員。

在 APISIX 中,消費者需要一個全局唯一的 名稱,并從上面的列表中選擇一個身份驗證 插件。

Key Authentication 是什么#

**Key Authentication(也稱之為密鑰驗證)**是一個相對比較簡單但是應用廣泛的身份驗證方法,它的設計思路如下:

管理員為路由添加一個身份驗證密鑰(API 密鑰)。
API 消費者在發送請求時,在查詢字符串或者請求頭中添加密鑰。

創建消費者#
創建一個名為 tom 的消費者,并啟用 key-auth 插件,密鑰設置為 secret-key。所有攜帶密鑰 secret-key 的請求都會被識別為消費者 tom

caution
生產環境請使用復雜的密鑰。

curl -i "http://127.0.0.1:9180/apisix/admin/consumers" -X PUT -d '
{"username": "tom","plugins": {"key-auth": {"key": "secret-key"}}
}'

如果消費者創建成功,你將得到返回 HTTP/1.1 201 Created。

啟用 Authentication#
在教程配置路由中,我們已經創建了路由 getting-started-ip,我們通過 PATCH 方法為該路由增加 key-auth 插件:

curl -i "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{"plugins": {"key-auth": {}}
}'

如果增加插件成功,你將得到返回 HTTP/1.1 201 Created。

禁用 Authentication#
將參數設置 _meta.disable 為 true,即可禁用密鑰驗證插件。

curl "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{"plugins": {"key-auth": {"_meta": {"disable": true}}}
}'

限速

APISIX 是一個統一的控制中心,它管理 API 和微服務的進出流量。除了客戶端發來的合理的請求,還可能存在網絡爬蟲產生的不必要的流量,此外,網絡攻擊(比如 DDos)也可能產生非法請求。

APISIX 提供限速功能,通過限制在規定時間內發送到上游服務的請求數量來保護 APIs 和微服務。請求的計數在內存中完成,具有低延遲和高性能的特點。

在教程配置路由中,我們已經創建了路由 getting-started-ip,我們通過 PATCH 方法為該路由增加 limit-count 插件:

curl -i "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{"plugins": {"limit-count": {"count": 2,"time_window": 10,"rejected_code": 503}}
}'

上述配置將傳入流量的速率限制為每 10 秒最多 2 個請求。

禁用 Rate Limiting#
將參數設置 _meta.disable 為 true,即可禁用限速插件。

curl -i "http://127.0.0.1:9180/apisix/admin/routes/getting-started-ip" -X PATCH -d '
{"plugins": {"limit-count": {"_meta": {"disable": true}}}
}'

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895089.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895089.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895089.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025嵌入式高頻面試題解析

一、概述 到了年初,是求職者最活躍的時間。本文梳理了嵌入式高頻面試題,幫助求職者更好地準備面試,同時也為技術愛好者提供深入學習嵌入式知識的參考。 二、C 語言基礎 2.1 指針與數組 問題 1:指針和數組的區別是什么&#xf…

1.攻防世界 baby_web

題目描述這里有提示,初始頁面 進入題目頁面如下 很簡潔的頁面只有一行HELLO WORLD ctrlu查看了源碼也沒有信息 用burp suite抓包,并發送到重放器 根據提示(初始頁面)修改訪問index.php文件 index.php index.php 是一種常見的…

什么是三層交換技術?與二層有什么區別?

什么是三層交換技術?讓你的網絡飛起來! 一. 什么是三層交換技術?二. 工作原理三. 優點四. 應用場景五. 總結 前言 點個免費的贊和關注,有錯誤的地方請指出,看個人主頁有驚喜。 作者:神的孩子都在歌唱 大家好…

【機器學習】數據預處理之數據歸一化

數據預處理之數據歸一化 一、摘要二、數據歸一化概念三、數據歸一化實現方法3.1 最值歸一化方法3.2 均值方差歸一化方法 一、摘要 本文主要講述了數據歸一化(Feature Scaling)的重要性及其方法。首先通過腫瘤大小和發現時間的例子,說明了不同…

【AIGC】語言模型的發展歷程:從統計方法到大規模預訓練模型的演化

博客主頁: [小????????] 本文專欄: AIGC | ChatGPT 文章目錄 💯前言💯語言模型的發展歷程:從統計方法到大規模預訓練模型的演化1 統計語言模型(Statistical Language Model, SLM):統…

高效知識管理與分類優化指南:從目錄設計到實踐應用

摘要 本文旨在幫助讀者在信息爆炸時代構建高效的知識管理體系,提供了知識收藏目錄、瀏覽器書簽和電腦文件夾的優化分類方案。知識收藏目錄方案包括工作與項目、記錄與日常、知識管理等八大類,具有邊界清晰、擴展靈活、貼合實際場景等優勢。瀏覽器書簽分類…

OpenAI 實戰進階教程 - 第十二節 : 多模態任務開發(文本、圖像、音頻)

適用讀者與目標 適用讀者:已經熟悉基礎的 OpenAI API 調用方式,對文本生成或數據處理有一定經驗的計算機從業人員。目標:在本節中,你將學會如何使用 OpenAI 提供的多模態接口(圖像生成、語音轉錄等)開發更…

Java面試題2025-JVM

JVM 1.為什么需要JVM,不要JVM可以嗎? 1.JVM可以幫助我們屏蔽底層的操作系統 一次編譯,到處運行 2.JVM可以運行Class文件 2.JDK,JRE以及JVM的關系 3.我們的編譯器到底干了什么事? 僅僅是將我們的 .java 文件轉換成了…

Deepseek的MLA技術原理介紹

DeepSeek的MLA(Multi-head Latent Attention)技術是一種創新的注意力機制,旨在優化Transformer模型的計算效率和內存使用,同時保持模型性能。以下是MLA技術的詳細原理和特點: 1. 核心思想 MLA技術通過低秩聯合壓縮技術,將多個注意力頭的鍵(Key)和值(Value)映射到一…

QML初識

目錄 一、關于QML 二、布局定位和錨點 1.布局定位 2.錨點詳解 三、數據綁定 1.基本概念 2.綁定方法 3.數據模型綁定 四、附加屬性及信號 1.附加屬性 2.信號 一、關于QML QML是Qt框架中的一種聲明式編程語言,用于描述用戶界面的外觀和行為;Qu…

java項目之美妝產品進銷存管理系統的設計與開發源碼(ssm+mysql)

項目簡介 美妝產品進銷存管理系統的設計與開發實現了以下功能: 美妝產品進銷存管理系統的設計與開發的主要使用者分為管理員登錄后修改個人的密碼。產品分類管理中,對公司內的所有產品分類進行錄入,也可以對產品分類進行修改和刪除。產品管…

Python(pymysql包)操作MySQL【增刪改查】

下載pymysql: pip install pymysql 在MySQL中創建數據庫:unicom create database unicom DEFAULT CHARSET utf8 COLLATE utf8_general_ci;use unicom; 在unicom中創建數據表:admin create table admin(id int not null primary key auto_i…

日志2025.2.9

日志2025.2.9 1.增加了敵人揮砍類型 2.增加了敵人的死亡狀態 在敵人身上添加Ragdoll,死后激活布偶模式 public class EnemyRagdoll : MonoBehaviour { private Rigidbody[] rigidbodies; private Collider[] colliders; private void Awake() { rigidbodi…

HTTP無狀態的概念以及對后端服務的設計會產生的影響

HTTP無狀態(Statelessness) 是指每個HTTP請求都是獨立的,服務器不會記住或依賴于前一個請求的任何信息。每次請求的處理都與其他請求沒有直接關系。也就是說,服務器在處理請求時,不會存儲關于客戶端狀態的信息。 一、HTTP無狀態的具體含義 ①每個請求獨立:每個請求包含了…

操作系統—進程與線程

補充知識 PSW程序狀態字寄存器PC程序計數器:存放下一條指令的地址IR指令寄存器:存放當前正在執行的指令通用寄存器:存放其他一些必要信息 進程 進程:進程是進程實體的運行過程,是系統進行資源分配和調度的一個獨立單位…

python:面向對象案例烤雞翅

自助烤雞翅的需求: 1.烤雞翅的時間和對應的狀態: 0-4min :生的 4-7min:半生不熟 7-12min:熟了 12min以上:烤糊了 2.添加調料: 客戶根據自己的需求添加 定義烤雞翅的類、屬性和方法,顯示對象的信息 …

【基于SprintBoot+Mybatis+Mysql】電腦商城項目之上傳頭像和新增收貨地址

🧸安清h:個人主頁 🎥個人專欄:【Spring篇】【計算機網絡】【Mybatis篇】 🚦作者簡介:一個有趣愛睡覺的intp,期待和更多人分享自己所學知識的真誠大學生。 目錄 🚀1.上傳頭像 -持久…

Windows下ollama詳細安裝指南

文章目錄 1、Windows下ollama詳細安裝指南1.1、ollama介紹1.2、系統要求1.3、下載安裝程序1.4、安裝步驟1.5、驗證安裝1.6、環境變量配置1.7、模型選擇與安裝【deepseek 示例】1.7.1、拉取并運行模型1.7.2、進階使用技巧 1、Windows下ollama詳細安裝指南 1.1、ollama介紹 olla…

10vue3實戰-----實現登錄的基本功能

10vue3實戰-----實現登錄的基本功能 1.基本頁面的搭建2.賬號登錄的驗證規則配置3.點擊登錄按鈕4.表單的校驗5.賬號的登錄邏輯和登錄狀態保存6.定義IAccount對象類型 1.基本頁面的搭建 大概需要搭建成這樣子的頁面: 具體的搭建界面就不多講。各個項目都有自己的登錄界面&#…

RestTemplate Https 證書訪問錯誤

錯誤信息 resttemplate I/O error on GET request for “https://21.24.6.6:9443/authn-api/v5/oauth/token”: java.security.cert.CertificateException: No subject alternative names present; nested exception is javax.net.ssl.SSLHandshakeException: java.security.c…