為了將運行在 Kubernetes 內的服務對外公開,最基本就是透過 ClusterIP 或 Nodeport 的方式,而到了雲端的 AKS 可以使用 LoadBalancer 搭配 Azure Load Balancer 這類的雲端服務,但對於有網址或 URL 規則等第七層的需求時,就會選擇使用 Ingress。
Ingress 最常見的選擇是使用 Nginx,但在雲端的 AKS 就多了 AGIC 的選項,AGIC 是搭配 Azure 的 Azure Application Gateway 運作的,可以直接想像成是 PaaS 版本的 Ingress,本篇將記錄在 AKS 上啟用 AGIC 的過程。
Application Gateway Ingress Control
借用一下官方的 AGIC 架構圖,當我們在 AKS 中啟用 AGIC 後,本質上 AGIC 就是一個在 AKS 內的 Deployment,其 Pod 將監控所有在 AKS 內的 Ingress YAML,並將設定同步到外部的 Application Gateway。
因為監控的 Pod 還是在 AKS 內部,這部分是會佔用到 AKS 效能的,但比起一般自架的 Nginx Ingress,AGIC 負責處理負載均衡的 Application Gateway 還是位於 AKS 外部,這部分就不會佔用到 AKS 本身的資源。
建立 Virtual Network
首先我們先建立一個 10.10.0.0/16 的虛擬網路,並且在其中切出兩個子網段,第一個 10.10.1.0/24 會分配給 AKS 使用。
而第二個子網段給 Application Gateway 使用。
建立 Public IP
接著因為我們會透過 Application Gateway 將 AKS 對外,所以需要一個公用 IP。
建立 Application Gateway
再來就是建立 Application Gateway 了,這邊記得要對應上剛剛建立的子網段與功用 IP。
另外如果沒記錯的話,Application Gateway 使用 Portal UI 創建時會需要設定一堆東西,這些設定在 AGIC 的情境是用不到的,但如果使用 AZ CLI 就可以跳過這些設定。
建立 AKS
最後就是建立 AKS 本體,這邊一樣記得要用剛開始建立的子網段。
AKS 建立時的設定參數非常多,這邊只做讓 AGIC 能正常運行的最少設定,其他還是要視個人需求自己加上。
在 AKS 上啟用 AGIC
AGIC 目前已經作為 addons 被加入 AKS 中,只需要以下指令就能很方便的啟用。
在啟用指令中需要指定一個現有的 Application Gateway,如此就能綁定 AKS 與這個 Application Gateway。
啟用成功後應該可以在 AKS 的 Deployment 中看到一個 ingress-appgw-deployment,這個就是 AGIC 的監控程式。
測試
測試方式很簡單,我們會佈署一個官方提供的 YAML,撰文當下這個測試用的 YAML 如以下:
使用 kubectl apply 指令佈署 YAML 檔。
接著等待 3 分鐘,AGIC 會把 Ingress 的設定同步到 Application Gateway,我們可以在 Portal 中找到「後端集區」來確認規則已經被同步到 Application Gateway。
一樣在 Application Gateway 的 Portal 畫面,找到剛剛設定給 Application Gateway 的 Public IP,以我自己的為例是 52.187.47.216。
在瀏覽器上進到 http://52.187.47.216 就會看到以下畫面,記得不要用 https,因為官方提供的 YAML 只設定了 80 埠。
最後我們可以確認畫面上的 Server IP address 與剛剛在「後端集區」看到的目標 IP 都是 10.10.1.28,測試成功!
總結
以上我們成功在一個現有的 AKS 上啟用 AGIC,並佈署了一個使用 Application Gateway 作為訪問入口的 .NET APP。整體來說設定的難度雖稱不上簡單,但至少流程是順暢的,主要也歸功於 AGIC 已經作為 addons 被加入 AKS 中,真正啟用的設定都是自動完成的。
而比起自架的 Nginx Ingress,AGIC 將負載均衡的工作交由外部的 Application Gateway,減少 AKS 本身的資源佔用外,也因為本身屬於 PaaS 級別的服務,降低了部分的維運工作。以上算是多一種作法提供給讀者 😉
留言
張貼留言