1. 程式人生 > 其它 >k8s之Service詳解-Ingress介紹

k8s之Service詳解-Ingress介紹

Ingress介紹

在前面的學習中已經知道,Service對叢集之外暴露服務的主要方式有兩種:NodePort和LoadBalancer,但是這兩種方式,都有一定的缺點:

  • NodePort方式的缺點是會佔用很多叢集機器的埠,那麼當叢集服務變多的時候,這個缺點就愈發明顯
  • LB方式的缺點是每個service需要一個LB,浪費、麻煩,並且需要k8s之外裝置的支援

基於這種現狀,k8s提供了Ingress資源物件,Ingress只需要一個NodePort或者一個LB就可以滿足暴露多個Service的需求。工作機制大致如下表所示:

實際上,Ingress相當於一個7層的負載均衡器,是k8s對反向代理的一個抽象,它的工作原理類似於Nginx,可以理解成在Ingress裡建立諸多對映規則,Ingress Controller通過監聽這些配置規則並轉化成Nginx的配置,然後對外部提供服務

。在這裡有兩個核心概念:

  • ingress:k8s中的一個物件,作用是定義請求如何轉發到service的規則
  • ingress controller:具體實現反向代理及負載均衡的程式,對ingress定義的規則進行解析,根據配置的規則來實現請求轉發,實現方式有很多,比如nginx,contour,haproxy等等。

Ingress(以nginx為例)的工作原理如下:

  1. 使用者編寫ingress規則,說明哪個域名對應k8s叢集中的哪個service
  2. ingress控制器動態感知ingress服務規則的變化,然後生成一段對應的nginx配置
  3. ingress控制器會將生成的nginx配置寫入到一個執行著的nginx服務中,並動態更新
  4. 到此為止,其實真正在工作的就是一個nginx了,內部配置了使用者定義的請求轉發規則