iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0
DevOps

前端工程師學習 DevOps 之路系列 第 11

Day11-Kubernetes 那些事 - Ingress 篇(三)

前言

昨天的文章提到 Ingress 其實也可以用來做負載平衡,只是要利用其他種方式來實現,所以接下來這篇文章就來好好的講一下 Ingress Controller 是如何做到負載平衡。

Ingress Controller

首先要來介紹的是 Ingress Controller ,看名字應該就知道是負責控制 Ingress 的物件,由於我們可能會因為不同的專案性質建立出不同的 Ingress ,這時候就必須要有一個管理眾多 Ingress 的物件,就像管理眾多 Node 的 Master 一樣。

除了管理 Ingress 之外其實 Controller 最重要的功能就是負載平衡了,這邊附上官方文件上的一段文字:

In order for the Ingress resource to work, the cluster must have an ingress controller running.

所以讀者如果要使用 Ingress 的話還是建立一下 Controller 吧XD

最後加了 Ingress Controller 後整體架構就會像這樣:

Ingress Controller 形式

接下來講講 Ingress Controller 是利用哪兩個形式來實現負載平衡,一個是 GCE 另一個是 nginx 。

  • GCE

    利用 GCP 上的 Load Balancer 來實現負載平衡,但我們只是在本機上練習而已,所以就不用 GCE 了,不然還要多收費XD

  • nginx

    利用 nginx 進行負載平衡,其實 nginx 本身就是一個反向代理伺服器,所以本身就可以用來做負載平衡了,為了不讓文章篇幅過長,這裡筆者就不細談 nginx 了。

Ingress Controller 建立

官網很好心一開始就有把需要先建立起來的物件寫成一份 yaml 檔,讀者可以直接複製底下的指令安裝即可,但筆者還是建議把管網寫好的檔案複製一份到專案內,這樣後續如果要重建也比較快。

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.28.0/deploy/static/mandatory.yaml

可以看到建立了非常多的東西,有些讀者可能目前還不清楚是在做什麼的,像是 configmapnamespacedeployment 等等,這些筆者後續的文章都會提到,讀者可以先藉由官網創的名字來了解這幾個物件是可能是用來做什麼事情。

Ingress Controller 細談

上面建立的過程中應該可以發現 Ingress Controller 其實是一個大雜燴,利用了非常多的內容來實踐,其實 Ingress Controller 是有產生一個 Pod 來處理負載平衡的工作,這邊可以下 kubectl get pods -n ingress-nginx 來查看。

接下來可以利用 exec 這個參數進入 Pod 裡面查看內容,這邊可以下 kubectl exec -ti -n ingress-nginx PodName -- /bin/sh

可以發現熟悉的 nginx.conf 在這個資料夾裡面,所以可以猜測其實真正在做負載平衡的還是 nginx。

接下來可以下 cat nginx.conf 來查看內容,裡面會發現這段設定

可以發現在上一篇文章設定好的 Ingress 內容全部轉成 nginx 設定了,路徑變成 location 網域變成 server_name 而 Service 內容也全部被包在 location 區塊內,所以我們可以推斷當今天有一個 Request 進來,一開始會透過 nginx 進行轉發,而轉發條件就是根據 nginx.conf 的內容,至於詳細的 nginx.conf 的內容會在之後的文章介紹給大家。

Ingress Controller Annotation

還記得筆者在 Label 文章中提到,其實 Annotation 並不是完全沒用處,在 Ingress Controller 裡 Annotation 可是非常重要的設定,由於這個 nginx.conf 是官方自己創的,為了讓整體變得更彈性,因此我們可以在 Ingress 裡面加上 Annotation ,裡面撰寫 nginx 的相關設定,這樣 Controller 就會把這些設定套用進 nginx.conf 內,而官網也把 Annotation 內的寫法講得很清楚,有興趣的讀者可以參考這個網頁

Demo

最後再來簡單的 Demo 一下,其實 Controller 就只是個管理眾多 Ingress 的集大成而已,真正做事情還是要依靠 Ingress 去做 Service 的串接,所以跟之前一樣只要輸入 Ingress 設定好的網域就可以看到結果了。

小結

今天介紹了 Ingress Controller ,終於把整個 Ingress 講完了,各位讀者如果要建立 Ingress 也別忘了把 Controller 順便建立起來,這樣才能夠讓整個網站後續運作得更順利喔!但相信讀者還是會想要自己手動設定 nginx.conf 這個檔案,這些設定的內容都會在之後的文章一一介紹給大家,可以敬請期待。

接下來的文章會再重新以 Pod 為基礎擴充一些內容進去,如果對於文章有任何問題都歡迎留言給我,那我們就下篇文章見~


上一篇
Day10-Kubernetes 那些事 - Ingress 篇(二)
下一篇
Day12-Kubernetes 那些事 - Replication Controller
系列文
前端工程師學習 DevOps 之路30

尚未有邦友留言

立即登入留言