iT邦幫忙

2025 iThome 鐵人賽

DAY 21
0
Cloud Native

與雲原生精靈共舞:APISIX使用者的兩年旅程系列 第 21

Ch15 - APISIX 部署解密:全面解析「傳統」、「解耦」、「無中心獨立」部署策略

  • 分享至 

  • xImage
  •  

傳統模式與 etcd:APISIX 的經典架構

傳統模式 with Dashboard

從「Quick Start」到目前為止,並沒有區分「資料平面(Data Plane)」和「控制平面(Control Plane)」。所建立的APISIX服務節點:都同時提供處理請求路由的能力外,也接受Admin API更新設定。這種運作模式下稱作「傳統模式(Traditional)」。至版本3.13為止,APISIX有三種運作模式和一個實驗性模式。

模式 角色 配置中心 設定來源 管理方式 適用情境
1 傳統模式 (Traditional) 資料平面 + 控制平面 etcd Admin API Admin API 處理使用者請求與管理配置都在同一實例上。
2 解耦模式 (Decoupled) 資料平面 / 控制平面 etcd Admin API Admin API 將資料處理與配置管理分開,適合大型部署或高可用性需求。
3 獨立模式:檔案驅動 (File-driven) 資料平面 本地 YAML / JSON 檔案 本地檔案更新 不需要 etcd,配置從本地檔案加載並熱更新,適合 Kubernetes 或 CI/CD 自動化部署。
4 獨立模式:API 驅動 (API-driven) 傳統 記憶體 Standalone Admin API 實驗性功能,配置完全透過 API 進行,即時更新並儲存在記憶體中,不依賴任何檔案或外部配置中心。

(以上表格由AI協助整理)

傳統模式下,apisix_config/config.yaml實際包含這樣的預設設定:

deployment:                    # Deployment configurations
  role: traditional            # Set deployment mode: traditional, control_plane, or data_plane.
  role_traditional:
    config_provider: etcd      # Set the configuration center.

其中deployment.role申明了使用traditional(傳統)作爲部署運作方式,並且deployment.role_traditional.config_provider指定了etcd作爲設定提供者。實際上ETCD是一個分散式鍵值對資料庫,並且如果將其視作傳統資料庫,整個架構就像是傳統軟體架構:AP+Database。

類似無狀態但依賴資料庫的應用服務,如果直接變更資料庫內容,下次處理請求的結果也會有所不同。實際上Dashboard Web UI就是直接變更ETCD群集儲存的內容,間接反應回服務節點。且不同的是,APISIX並非完全無狀態應用服務,他會保留一份副本在記憶體,並訂閱ETCD群集好取得變更。

解構模式:「資料平面」與「控制平面」的拆分

解構模式

APISIX部署方式也可以將「資料平面」和「控制平面」拆分開來,這個模式下ETCD仍是兩個平面溝通的橋樑。「資料平面」專注在處理請求,並且可以依需求使用量做節點縮放;這種模式下,「控制平面」並不需要隨者資料平面共同縮放,可控的數量也讓Admin API的存取控制可以更容易管理。同樣地,Dashboard服務本身雖然不提供Admin API,但依然可以做到更新設定的效果。


解構模式with Dashboard

「資料平面」設定

不同於傳統模式,deployment.role申明了節點作為data_plane(資料平面)提供服務。所以在apisix.enable_admin的設定也會失效(預設為true)。

deployment:
    role: data_plane
    role_data_plane:
       config_provider: etcd
#END

「控制平面」設定

相同的,也可以將節點調整成control_plane(控制平面)提供服務。相對來說該節點不提供處理請求。

deployment:
    role: control_plane
    role_control_plane:
        config_provider: etcd
#END

想想看: 設定提供者是同一組ETCD群集情況下,能不能有些節點是「資料平面」,有些是「控制平面」,還有一些是兩者兼具的「傳統」節點?

獨立模式:檔案配置部署

獨立模式

ETCD的部署,對於不熟悉的人會是個麻煩。APISIX也可以讀取YAML或JSON檔案設定的方式部署。預設情況每秒會檢查一次檔案的變更,在一些可邏輯共用檔案的環境,如Kubernetes,同樣可以做到變更一次檔案,應用到所有節點的效果。這種部署方式,也很像是調整Nginx的設定,但我認為APISIX的設定使用YAML或JSON,因此更簡單容易上手。

deployment:
  role: data_plane
  role_data_plane:
    config_provider: yaml # or json

(實驗性質)如獨立模式不需要ETCD,但支援類Admin API

獨立模式 with RAM

這個模式下,會需要使用另一組管理API,並且設定會直接儲存在記憶體,這意味著斷電遺失資料的風險存在。並且可能無法一次對所有資料平面的服務節點一起進行設定更新的調整。

要使用該實驗性質模式,deployment.role同樣設定為traditional。不同的是資料提供者改成yaml。但注意,該模式可能會忽略apisix.yaml檔案,提供一個空檔案即可。如果要更新設定,需要透過/apisix/admin/configs進行「完整」更新。

deployment:
  role: traditional
  role_traditional:
    config_provider: yaml

上一篇
Ch14 - 告別「時好時壞」的 LDAP 驗證:用 APISIX 打造高可用 AD 代理服務
下一篇
幕間3 - 工程師的告白:換掉 Nginx,其實是為了實現一個「小小的私心」
系列文
與雲原生精靈共舞:APISIX使用者的兩年旅程22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言