Kubernetes CKA課程筆記 35

Ingress使用概論

ZONGRU Li
Oct 27, 2021

前篇講到外部Service Type : LoadBalancer

了解到其基本運作後,最終使用後可能會有下圖結果:

上圖可能延伸的問題:

  1. AWS的LoadBalancer臭長DNS變成使用者的EndPoint,而不是像http://my-app.com這樣簡單url
  2. 類似如上就不能做適合的Domain Name
  3. 如上圖,ServiceLoadBalancer變多要開的Node PORT就跟著多,今天30000,31000,...etc越來越多
  4. AWS上每個LoadBalancer都會花到錢......!(立馬關掉!!課程要用在建就好)
  • 理想上應該比較像下圖:

甚至最終需要統一做到HTTPS:

全部Cluster的Service有統一的https保護

5.總不能每個LoadBalancer都各自做https,太費工

演化後的需求是如下圖:

但是K8s有一個原件 — Ingress還可以將上圖架構簡化為如下:

Ingress:

  • K8sComponent之一
  • 可以設定Routing以連接不同Service
  • 可以方便設置HTTPS
  • (該物件設置在Cluster內部,不像LoadBalancer是在外部)
  • (Ingress同樣需要暴露Cluster對外PORT,
  • 如同NodePortLoadBalancer,但只需要一個就好!)

Ingress Configuration File Example:

以下比對Ingres yamlService yaml對應關係:

Service僅是內部Service(ClusterIP type)

其中來解說Ingress Configuration File:

Ingress Configuration File的host:

  • 必須是合法的domain位置
  • 對應domain nameNodeIP位置該位置即為整個ClusterEndtryPoint
  • 像前篇用EntryPoint指到Cluster外AWS LoadBalancer
  • 透過AWS LoadBalancer轉拋請求到其中一台worker node
  • Ingress接的概念

如何在Cluster中架構Ingress?

  • 需要有一個Ingress的實作層:Ingress Controller
  • Ingress Controller裡面的函式會評估所有Ingress元件定義的rule
  • 並且Ingress Controller負責管理轉址(redirections)
  • Ingress Controller將成為ClusterEndtryPoint(如上面host提到的)
  • 另外Ingress Controller種類很多,有些是第三方的
  • K8s官方也有一個叫 : K8s Nginx Ingress Controller(標誌是綠N+,一時找不到...)
Ingress Controller Pod不等於Ingress哦!
  • 另外如果上面架構的Cluster建置並運行,若是像我是用AWS的服務供應商
  • LoadBalancer就會由AWS來提供
  • 並且外部的http請求首先會打在AWSLoadBalancer
  • 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則請求流程如下

一些使用場景2:

  • 多個sub-domain或多個domain,其rules就會如下Configuration File
  • 所以http請求的url就會是像:http://analytics.myapp.com
  • 請求轉拋的流程如下:

最後還要提到HTTPS:

  • 只要在Ingress內多定義兩項:
  • 1.宣告tls
  • 2.給定secretName
  • 如下圖
  • 並且這個Secret的Configuration File有幾項固定:

參考課程(reference)

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet