k8s-Ingress:HTTP7層路由機制


介紹

根據對k8s的service的學習我們知道service的表現形式是IP:Port,即工作在TCP/IP層。而對於基於HTTP的服務來說,不同的URL地址經常對應到不同的后端服務或虛擬服務器,這些應用轉發機制僅通過k8s的service是無法實現的。從Kubernetes 1.1版本開始新增Ingress資源對象,用於將不同的URL的訪問請求轉發到后端不同的Service,以實現HTTP層業務路由機制。k8s使用了一個ingress策略的定義 和 一個具體的ingress Controller,兩者結合並實現了一個完整的Ingress負載均衡器

使用ingress進行負載分發時,ingress controller 基於ingress規則將客戶端請求直接轉發到service對應的后端endpoint(pod)上,這樣會跳過kube-proxy的轉發功能,kube-proxy不再起作用。如果ingress controller提供的是對外服務,則實際上實現的是邊緣路由器的功能

為使用ingress,需要創建ingress controller(帶一個默認的backend(后端)服務)和一個策略設置來共同完成,下面舉3個例子說明ingress controller 和ingress策略的配置方法,及客戶端如何訪問ingress提供的服務

創建ingress controller 和默認的backend服務

在定義ingress策略之前,需要先部署ingress controller 以實現為所有后端service都提供一個統一的入口;ingress controller 需要實現基於不同HTTP URL 向后端轉發的負載分發規則,並可以靈活設置7層負載分發策略;如果公有雲公司可以提供該類型的HTTP路由Load Balancer,則也可以設置其為ingress controller

在k8s中ingress controller 將以pod的形式運行,監控Api srver 的/ingress接口后端backend service ,如果service發生變化,則ingress controller應自動更新其轉發規則

舉例

下面舉例使用谷歌的nginx-ingress-controller鏡像創建ingress controller;該ingress controller 以daemonset的形式進行創建,在每個node上都將啟動一個nginx服務
這里為nginx容器設置了hostport,將容器應用監聽的80和443端口號映射到物理機上,使得客戶端可以通過URL地址來訪問ingress controller


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM