Kubernetes CKA課程筆記 35
前篇講到外部Service Type : LoadBalancer
了解到其基本運作後,最終使用後可能會有下圖結果:
上圖可能延伸的問題:
- AWS的LoadBalancer的臭長DNS變成使用者的EndPoint,而不是像http://my-app.com這樣簡單url
- 類似如上就不能做適合的Domain Name
- 如上圖,Service的LoadBalancer變多要開的Node PORT就跟著多,今天30000,31000,...etc越來越多
- AWS上每個LoadBalancer都會花到錢......!(立馬關掉!!課程要用在建就好)
- 理想上應該比較像下圖:
甚至最終需要統一做到HTTPS:
5.總不能每個LoadBalancer都各自做https,太費工
演化後的需求是如下圖:
但是K8s有一個原件 — Ingress還可以將上圖架構簡化為如下:
Ingress:
- K8s的Component之一
- 可以設定Routing以連接不同Service
- 可以方便設置HTTPS
- (該物件設置在Cluster內部,不像LoadBalancer是在外部)
- (Ingress同樣需要暴露Cluster對外PORT,
- 如同NodePort或LoadBalancer,但只需要一個就好!)
Ingress Configuration File Example:
以下比對Ingres yaml與Service yaml對應關係:
其中來解說Ingress Configuration File:
Ingress Configuration File的host:
- 必須是合法的domain位置
- 對應domain name到Node的IP位置該位置即為整個Cluster的EndtryPoint
- 像前篇用EntryPoint指到Cluster外的AWS LoadBalancer
- 透過AWS LoadBalancer轉拋請求到其中一台worker node
- 給Ingress接的概念
如何在Cluster中架構Ingress?
- 需要有一個Ingress的實作層:Ingress Controller
- Ingress Controller裡面的函式會評估所有Ingress元件定義的rule
- 並且Ingress Controller負責管理轉址(redirections)
- Ingress Controller將成為Cluster的EndtryPoint(如上面host提到的)
- 另外Ingress Controller種類很多,有些是第三方的
- K8s官方也有一個叫 : K8s Nginx Ingress Controller(標誌是綠N+,一時找不到...)
- 另外如果上面架構的Cluster建置並運行,若是像我是用AWS的服務供應商
- LoadBalancer就會由AWS來提供
- 並且外部的http請求首先會打在AWS的LoadBalancer
- AWS的LoadBalancer再轉交給Cluster內的Ingress Controller
- 但是可以思考若今天AWS沒有提供LoadBalancer
- 那麼LoadBalance可能就要靠自己實作在Cluster內或外
- 並且LoadBalance也決定了EntryPoint在哪
- 一種常見的就是Cluster外建置Proxy Server,相當於LoadBalancer
- Proxy Server即EntryPoint
- 外界無從發覺背後整個k8s Cluster,也就是背後k8s Cluster很安全!
一些使用場景1:
- 考量到以下Ingress Configuration File範例:
- 如上,如果URL是:http://myapp.com/analytics則請求流程如下
- http://myapp.com/shopping則是導向shopping service →shopping Pod
一些使用場景2:
- 多個sub-domain或多個domain,其rules就會如下Configuration File
- 所以http請求的url就會是像:http://analytics.myapp.com
- 請求轉拋的流程如下:
最後還要提到HTTPS:
- 只要在Ingress內多定義兩項:
- 1.宣告tls
- 2.給定secretName
- 如下圖
- 並且這個Secret的Configuration File有幾項固定: