Go 開(kāi)源說(shuō)第六期:基于Apache APISIX構(gòu)建的Kubernetes Ingress
點(diǎn)擊藍(lán)字
關(guān)注我們
本文由“GO開(kāi)源說(shuō)”第六期 《基于Apache APISIX構(gòu)建的Kubernetes Ingress》直播內(nèi)容修改整理而成,視頻內(nèi)容較長(zhǎng),本文內(nèi)容有所刪減和重構(gòu)。
1.什么是 Kubernetes Ingress
Kubernetes Ingress 是?個(gè)標(biāo)準(zhǔn),Kubernetes 為了能夠讓外部請(qǐng)求訪問(wèn)到 Kubernetes 集群內(nèi)部,并且?便集中管理??流量,因此有了 Ingress 的概念。我們可以把 Ingress 簡(jiǎn)單的理解為Kubernetes 集群的???關(guān),Ingress 可以提供 Load Balancer、SSL termination 等能?。

如圖所示,Ingress 負(fù)責(zé)接收 Kubernetes 集群邊緣??流量。Ingress 的實(shí)現(xiàn)?般包含兩個(gè)部分,?個(gè)是與 Kubernetes 打交道的 Ingress Controller ,屬于控制?( Controller Plane),另?部分是?關(guān),?于反向代理,屬于數(shù)據(jù)?(Data Plane)。APISIX Ingress 就是基于 Apache APISIX (DP),加上 APISIX Ingress Controller (CP),為 Kubernetes 提供了?種全新的 Ingress 選擇。
2.APISIX Ingress Controller
特性Apache APISIX Ingress 監(jiān)聽(tīng) Kubernetes 集群資源的變化,并且將這些資源轉(zhuǎn)換為內(nèi)部結(jié)構(gòu),與歷史資源對(duì)?,并且將增量變化同步到 APISIX ?關(guān)。監(jiān)聽(tīng)的資源包括 Secret、Endpoints、Ingress 等原?資源,同時(shí)也包括 ApisixRoute、ApisixUpstream、ApisixTls 等?定義資源。詳細(xì)結(jié)構(gòu)如下圖。

Apache APISIX 作為云原?、?性能 API ?關(guān),有很多令?興奮的特性,APISIX Ingress Controller 將 APISIX 的特性通過(guò) 聲明式配置 逐步暴露出來(lái),?前?持的主要特性如下:
全動(dòng)態(tài):路由、SSL 證書(shū)、上游、插件…
?持 Custom Resource Defifinitions,更容易理解的聲明式配置
?持 原? ingress 配置 (v1 / v1beta1 )
服務(wù)?動(dòng)注冊(cè),?懼服務(wù)伸縮
得益于 pod IP 的更有靈活的負(fù)載均衡策略
健康檢查開(kāi)箱即?
?持?級(jí)路由匹配規(guī)則
?持流量切分 (業(yè)務(wù)流量管控、灰度升級(jí)必不可少)
?持 Apache APISIX 官?40 多個(gè)插件 & 客戶(hù)?定義插件
APISIX Ingress Controller ?身?可?
全動(dòng)態(tài)配置、更容易理解的聲明式配置、服務(wù)注冊(cè)、負(fù)載均衡、?持流量管理 是 Ingress 的常?特性。
為了?便使? Nginx Ingress 的?戶(hù),也兼容 Kubernetes 原? Ingress Resource 配置。Apache APISIX Ingress 繼承了 APISIX 的擴(kuò)展能?,默認(rèn)?持了 40 多個(gè)官?插件。同時(shí)?持?戶(hù)?定義插件的聲明式配置?式,所要做的僅僅是在 聲明式配置中,按照插件的 schema 定義即可。(會(huì)有使?示例)
與 Kubernetes Nginx Ingress 相?,我們有哪些優(yōu)勢(shì)
全動(dòng)態(tài)配置
Apache APISIX 的動(dòng)態(tài)配置特性,避免了因?yàn)?span style="text-align: justify;font-size: 14px;font-family: "Helvetica Neue";color: rgb(0, 0, 0);"> nginx reload 對(duì)系統(tǒng)造成的影響
更易?的聲明式配置
避免在復(fù)雜場(chǎng)景下使? annotation 定義代碼?段,出現(xiàn)難以維護(hù)的情況
??易?的擴(kuò)展能?
得益于 APISIX ?便的 插件 擴(kuò)展能?,APISIX Ingress 可以抽象出適合??業(yè)務(wù)場(chǎng)景的邏輯,定義出可以復(fù)?的插件
活躍的社區(qū)是?起的基礎(chǔ)

使?示例
ApisixRoute 資源定義示例

主體路由分為兩個(gè)部分,?個(gè)是 spec.http.match,另?個(gè)是 backends。
spec.http.match:
定義路由規(guī)則,可以指定 host / URI / method 等基礎(chǔ)規(guī)則,
同時(shí)還?持?定義表達(dá)式 exprs,你可以指定 headers / querystring / cookies 等作為匹配規(guī)則。示例中的 expr 就是?個(gè) 匹配 chrome 請(qǐng)求的規(guī)則。
spec.http.backends:
滿?匹配條件 match 的流量,將指派給指定的后端服務(wù)集合
?持權(quán)重配置
關(guān)于插件擴(kuò)展配置,采? spec.http.plugins:
定義插件集合
通過(guò) enable 快速啟? 或者 棄?
通過(guò) confifig 配置插件,confifig 的配置依據(jù)是 Apache APISIX 插件的 schema 定義。以示例中的 proxy-rewrite 插件為例,配置?檔參考:https://github.com/apache/apisix/blob/master/docs/en/latest/plugins/proxy-rewrite.md#attributes。
安裝部署
使? helm 安裝
$ helm repo add apisix https://charts.apiseven.com
$ helm search repo apisix
$ helm repo update
$ helm install my-ingress apisix/apisix-ingress-controller
如果對(duì) helm chart 的配置感興趣,這是 helm chart 的倉(cāng)庫(kù)地址:https://github.com/apache/apisix-helm-chart
?持各?平臺(tái)安裝

案例介紹
思必馳是?家語(yǔ)? AI 公司,專(zhuān)注智能硬件的語(yǔ)?交互,打造實(shí)?、有趣的?機(jī)交互體驗(yàn),涉及 “智能?載”,“智能家居”,“智能機(jī)器?” 等多個(gè)領(lǐng)域。案例中展示了?個(gè)使? APISIX Ingress 跨集群的部署?式。

繼續(xù)發(fā)?的?向
Apache apisix-ingress-controller 將繼續(xù)在易?性上做持續(xù)探索,并且逐步暴露更多的 APISIX 特性給?家使?。另外,Apache apisix-ingress-controller ?前屬于 Apache 孵化項(xiàng)?,期待今年能夠畢業(yè),歡迎?家參與。
— 往期回顧 —
Go 開(kāi)源說(shuō)第七期:Harbor助你玩轉(zhuǎn)云原生

Go 開(kāi)源說(shuō)第五期:MOSN Go語(yǔ)言網(wǎng)絡(luò)代理軟件

Go 開(kāi)源說(shuō)第四期(下):go-zero緩存管理最佳實(shí)踐

