ALB 支持在一個集群內創建多個隔離的網關實例供不同租戶使用,支持 Ingress、Gateway API、四層服務暴露和自定義流量規則 DSL,能夠輕松應對各種復雜場景的流量調度需求。
ALB 是靈雀云在用戶側多年實踐和經驗積累的結晶。作為一家始終致力于云原生技術研究和應用的領先企業,靈雀云在網關領域積累了豐富的實踐經驗。ALB 的開源,不僅是對靈雀云多年研發成果的分享,更是對云原生社區的一份獻禮。
目前,ALB項目代碼已經在Github上開源,項目地址為:https://github.com/alauda/alb。歡迎更多的技術開發者和愛好者前去試用。
為什么又做一個網關?
面對社區中眾多優秀的云原生開源網關項目,靈雀云為何決定再開發一個網關呢?這源于靈雀云對用戶需求深入的理解和技術前瞻性的洞察。早在 2015 年,當 Kubernetes 社區主要對外暴露方式還是 NodePort,Ingress API 尚未成熟之際,靈雀云便基于 OpenResty 開始了自研網關的探索之路。歷經多年的迭代和發展,ALB 已在數百個用戶的生產環境中成功落地,并承載了大規模的業務流量。
為了滿足更多社區用戶對云原生網關的需求,并汲取社區用戶的反饋與協助,靈雀云決定將 ALB 開源。我們堅信,開源的力量能夠推動 ALB 不斷進化,為云原生領域帶來更多可能性。
ALB 有哪些獨特的能力?
ALB 相比其他開源網關項目提供了以下獨特的能力:
隔離和多租戶
通過使用 ALB Operator,用戶可以在一個集群內創建和管理多個 ALB 網關實例,每個租戶和應用都可以使用一組獨占的 ALB 網關實例,避免了流量的沖突和資源爭搶。

Ingress 和 GatewayAPI 協議支持
ALB 同時支持了主流的 Ingress 標準,以及日趨流行的 Gateway API 標準,用戶可以根據自己的需求進行選擇,無需擔心標準變化帶來的影響。
強大的自定義規則
對于標準 Ingress 和 Gateway 不支持的復雜流量調度規則,ALB 提供了一組自定義的流量匹配 DSL,用戶可以根據自己的需求來定義復雜的流量規則。
在灰度發布和 A/B test 的場景,我們需要將符合特征的流量導入到一個特定的服務實例。例如我們希望將 HTTP 流量路徑前綴為/app-a 或者 /app-b 且 HTTP 方法為 POST ,且URL 參數包含group=vip ,且域名為*.app.com ,且 Header 中 location 為 east-1或east-2 ,且 Cookie 中包含 uid ,且源 IP 在 1.1.1.1-1.1.1.100 范圍內的流量中 50% 比例采樣發送給 hello-world,那么我們可以定義下面一個流量規則:
"
apiVersion: crd.alauda.io/v1
kind: Rule
metadata:
labels:
alb2.cpaas.io/frontend: alb-demo-00080 # required, indicate the Frontend to which this rule belongs
alb2.cpaas.io/name: alb-demo # required, indicate the ALB to which this rule belongs
name: alb-demo-00080-topu
namespace: kube-system
spec:
backendProtocol: "" # as same as Frontend
certificate_name: "" # as same as Frontend
dslx: # this rule matches url starts with /app-a or /app-b and method is post,and url param's group is vip, and host is *.app.com, and header's location is east-1 or east-2 and has a cookie name is uid, and source IPs come from 1.1.1.1-1.1.1.100
- type: METHOD
values:
- - EQ
- POST
- type: URL
values:
- - STARTS_WITH
- /app-a
- - STARTS_WITH
- /app-b
- type: PARAM
key: group
values:
- - EQ
- vip
- type: HOST
values:
- - ENDS_WITH
- .app.com
- type: HEADER
key: LOCATION
values:
- - IN
- east-1
- east-2
- type: COOKIE
key: uid
values:
- - EXIST
- type: SRC_IP
values:
- - RANGE
- "1.1.1.1"
- "1.1.1.100"
enableCORS: false
priority: 5 # the lower the number, the higher the priority
serviceGroup:
services:
- name: hello-world
namespace: default
port: 80
weight: 50
"
ALB 經過數年的實踐與迭代,已在眾多用戶的生產環境中得到廣泛應用。隨著云原生技術的迅猛發展,ALB 的應用前景必定更加廣闊。
未來,我們將持續優化 ALB 的性能和穩定性,以滿足更高的業務需求。同時進一步豐富其功能特性,以適應業務的多樣性。我們計劃在未來的版本中增加更多的流量調度策略,滿足更復雜的業務場景。
此外,我們將積極參與到社區,借助社區的力量推動 ALB 的發展,并誠邀更多的用戶和開發者加入我們的行列,共同推進云原生技術的發展與創新。