Apache APISIX Ingress Controller 正式加入 ASF

雲原生時代,Ingress作爲Kubernetes集羣中服務的入口,已經被大家所接受。除了Kubernetes默認的NGINX Ingress Controller(基於原生 NGINX)之外, 業界也有不少其他第三方的 Ingress Controller 的實現。Apache APISIX作爲國內最快畢業的 Apache 頂級項目,實現了Apache APISIX Ingress Controller,爲Kubernetes用戶提供了功能更爲便捷的 Ingress 實現。

Apache APISIX Ingress Controller 現在作爲 Apache APISIX 子項目正式捐獻到Apache Software Foundation(以下簡稱 ASF),與社區共同成長。

Apache APISIX Ingress Controller 是什麼

什麼是 Ingress

Ingress 是訪問Kubernetes集羣的入口,流量按 Ingress 資源指定的規則分發到集羣內部的上游服務。

下面是一個示意圖,客戶端通過 Ingress 對外暴露的服務地址進行訪問,流量在 Ingress 內部經過規則匹配,最後分發到對應的 service 上。

可以發現,Ingress 充當了 Kubernetes 集羣入口網關的角色。

圖片

爲什麼實現 Apache APISIX Ingress Controller

Kubernetes 默認的 Ingress 是基於 NGINX 實現的。NGINX Ingress Controller 幫助維護了 Kubernetes 集羣與 NGINX 的狀態同步,並且提供了基本的反向代理能力。

Apache APISIX Ingress Controller 基於 Apache APISIX, 集成Kubernetes的集羣管理能力,支持使用 YAML 申明的方式動態配置入口流量的分發規則,綁定插件,並且支持服務發現、配置校驗等能力。Apache APISIX Ingress Controller 將配置寫入 Apache APISIX,由 Apache APISIX 承載業務流量。

Apache APISIX Ingress Controller 除了覆蓋 NGINX Ingress Controller 已有的能力外,還解決了一些 Nginx Ingress Controller 的痛點。

1、動態加載配置,不再需要 reload

Ingress Controller 承載着服務的入口流量,在生產環境,對可靠性有更高的要求。

NGINX Ingress Controller 將 YAML 配置文件轉換爲 nginx.conf,再觸發 reload 使配置生效。生產環境中這是不能接受的,尤其在邊緣流量採用⻓連接時,更容易導致事故。

Apache APISIX Ingress Controller 支持動態配置,即時生效。降低生產事故的風險,提高了運維可操作性。

2、強大的擴展能力

基於 Apache APISIX 強大的插件能力,Apache APISIX Ingress Controller 通過動態綁定插件來增強功能。

而 NGINX Ingress Controller 通過在 annotation 中增加大量的腳本片段來擴展 NGINX 的能力。這樣的做法非常不易管理,生產環境中大量的腳本給運維人員帶來極大困擾,極少的校驗手段,也讓每次改動都非常容易出錯。

Apache APISIX 通過插件封裝邏輯,易於管理;完善的文檔,易於使用和理解。Apache APISIX Ingress Controller 通過配置即可綁定和解綁插件,無需操作腳本。

3、方便易用的灰度能力

業務服務常常需要調整權重,按比例控制流量。

Apache APISIX Ingress Controller 可以支持 service和 pod 級別的權重調整,配置清晰而且可讀性更強。

在 NGINX Ingress Controller 中通過 annotation 的方式提供 canary 灰度方案,但有三個問題比較突出:

  • annotation 必須在 yaml 文件級別定義,這意味着每次需要調整權重就必須創建一個 yaml 配置文件。
  • canary annotations 之間存在優先級,只能按照既定優先級配置,限制了靈活性。
  • 如果後端服務數量大於兩個,再想通過權重分配流量將變得十分困難。

Apache APISIX Ingress Controller 典型應用場景

Apache APISIX Ingress Controller 可以替換 NGINX Ingress Controller,使用更爲便捷的配置方式,動態的調整網關配置。無需 reload nginx,配置實時生效。

典型應用場景如下圖所示。

圖片

Apache APISIX Ingress 對外提供訪問Kubernetes集羣的入口,用戶通過外部負載均衡器訪問到 Apache APISIX Ingress。流量經過 Apache APISIX 路由規則,分發到目標上游服務。

內部支持通過Kubernetesservice 或者Kubernetespod IP + Port 的方式訪問上游服務,Apache APISIX Ingress Controller 集成Kubernetes,實現服務自動註冊和發現,實時同步Kubernetes狀態變更。

得益於 Apache APISIX 豐富的插件支持,可以通過綁定插件,輕鬆擴展 Ingress 的能力。比如,限流、熔斷、灰度發佈、跨域、用量管控、健康檢查等。

甚至可以自定義插件,滿足特殊業務場景。比如,配合 Apache APISIX Ingress Controller 的服務發現機制,實現自定義的負載均衡能力。

示例

一個簡單的示例,通過 ApisixRoute 定義一個路由,指向端口是 8080 的上游服務。

apiVersion: apisix.apache.org/v1
kind: ApisixRoute
metadata:
  name: foo-route
spec:
  rules:
  - host: foo.apisix.apache.org
    http:
      paths:
      - backend:
          serviceName: foo
          servicePort: 8080
        path: /hello*

當訪問 foo.apisix.apache.org/hello 時,Apache APISIX Ingress 將會把請求轉發到上游 foo 服務。

再來加個 proxy-rewrite 插件,實現轉發給上游服務的同時修改 host 和 uri。

piVersion: apisix.apache.org/v1
kind: ApisixRoute
metadata:
  name: foo-route
spec:
  rules:
  - host: foo.apisix.apache.org
    http:
      paths:
      - backend:
          serviceName: foo
          servicePort: 8080
        path: /hello*
  plugins:
  - enable: true
    name: proxy-rewrite
    config:
      regex_uri:
      - '^/(.*)'
      - '/extend/$1'
      scheme: http
      host: foo-beta.apisix.apache.org

更多使用方法請關注https://github.com/apache/apisix-ingress-controller。

未來規劃

接下來,Apache APISIX Ingress Controller 將翻開新的篇章,在保證現有功能的穩定迭代的同時,後續也將支持 VM cluster 的部署方式,主要規劃如下:

  • Support ApisixSSL CRD and the logic.#52
  • Support retry when synchronization.#59
  • Add a complete demo.#9
  • Use terratest for testing with Kubernetes.#51
  • 作爲 VM Ingress,豐富服務註冊/發現場景,比如,支持 Consul 等註冊中心;
  • 支持 VM cluster 與Kubernetescluster 統一配置;

更多細節請關注項目issue。

關於 Apache APISIX 社區

Apache APISIX Ingress Controller 正式加入 ASF ,作爲 Apache APISIX 子項目,與社區共同維護和成長。

郵件列表 - 發送任意內容到 [email protected] 後,根據回覆以訂閱郵件列表。

QQ 羣 -578997126(②羣)

嗶哩嗶哩https://space.bilibili.com/551921247

歡迎大家參與討論和貢獻。

END -

「技術分享」某種程度上,是讓作者和讀者,不那麼孤獨的東西。歡迎關注我的微信公衆號:Kirito的技術分享」


本文分享自微信公衆號 - Kirito的技術分享(cnkirito)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章