官方:https://kubernetes.io/docs/concepts/services-networking/ingress/
目錄
- Ingress 介紹
- 環境、軟件准備
- 部署 Default Backend
- 部署 Ingress Controller
- 部署 Ingress
- Name based virtual hosting
- Simple fanout
1、Ingress 介紹
我們知道,到目前為止 Kubernetes 暴露服務的有三種方式,分別為 LoadBlancer Service、NodePort Service、Ingress。官網對 Ingress 的定義為管理對外服務到集群內服務之間規則的集合,通俗點講就是它定義規則來允許進入集群的請求被轉發到集群中對應服務上,從來實現服務暴漏。 Ingress 能把集群內 Service 配置成外網能夠訪問的 URL,流量負載均衡,終止SSL,提供基於域名訪問的虛擬主機等等。
之前dashboard\prometheus等暴露服務均是采用NodePort方式。
LoadBlancer Service
LoadBlancer Service 是 Kubernetes 結合雲平台的組件,如國外 GCE、AWS、國內阿里雲等等,使用它向使用的底層雲平台申請創建負載均衡器來實現,有局限性,對於使用雲平台的集群比較方便。
NodePort Service
NodePort Service 是通過在節點上暴漏端口,然后通過將端口映射到具體某個服務上來實現服務暴漏,比較直觀方便,但是對於集群來說,隨着 Service 的不斷增加,需要的端口越來越多,很容易出現端口沖突,而且不容易管理。當然對於小規模的集群服務,還是比較不錯的。
Ingress
Ingress 使用開源的反向代理負載均衡器來實現對外暴漏服務,比如 Nginx、Apache、Haproxy等。Nginx Ingress 一般有三個組件組成:
- Nginx 反向代理負載均衡器
-
Ingress Controller
Ingress Controller 可以理解為控制器,它通過不斷的跟 Kubernetes API 交互,實時獲取后端 Service、Pod 等的變化,比如新增、刪除等,然后結合 Ingress 定義的規則生成配置,然后動態更新上邊的 Nginx 負載均衡器,並刷新使配置生效,來達到服務自動發現的作用。
-
Ingress
Ingress 則是定義規則,通過它定義某個域名的請求過來之后轉發到集群中指定的 Service。它可以通過 Yaml 文件定義,可以給一個或多個 Service 定義一個或多個 Ingress 規則。
以上三者有機的協調配合起來,就可以完成 Kubernetes 集群服務的暴漏。