Ingress意爲進入或進入的行爲;進入的權利;進入的手段或地點;入口。
Ingress支持L7(網絡第七層,HTTP/HTTPS)負載均衡。api
每一個LoadBalancer服務都須要本身的負載均衡器,以及獨有的公有IP地址,而Ingress只須要一個公網IP就能爲許多服務提供訪問,當客戶端向Ingress發送HTTP請求時,Ingress會根據請求的主機名和路徑決定請求轉發到的服務。服務器
只有Ingress控制器在集羣中運行,Ingress資源才能正常工做。網絡
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress_name spec: rules: - host: ingress.example.com http: paths: - path: / backend: serviceName: service_name servicePort: 80
$ kubectl create -f xxx.yaml
負載均衡
$ kubectl get ingresses
其中,ADDRESS爲服務暴露出來的IP地址。操作系統
1)客戶端首先對ingress.example.com執行DNS查找;
2)DNS服務器(或本地操做系統)返回Ingress控制器的IP;
3)客戶端向Ingress控制器發送HTTP請求,並在Host頭中指定ingress.example.com;
4)控制器從該頭部肯定客戶端嘗試訪問哪一個服務,經過與該服務關聯的Endpoint對象查看pod IP;
5)將客戶端的請求轉發給其中一個pod。code
... - host: service_name.example.com http: paths: - path: /service_path1 backend: serviceName: service_name1 servicePort: 80 - path: /service_path2 backend: serviceName: service_name2 servicePort: 80
對service_name.example.com/service_path1的請求轉發到service_name1服務上;service_name.example.com/service_path2的請求轉發到service_name2服務上。
請求將發送到了兩個不一樣的服務上,客戶端能夠經過一個IP地址訪問兩種不一樣的服務。對象
... spec: rules: - host: service_name1.example.com http: paths: - path: / backend: serviceName: service_name1 servicePort: 80 - host: service_name2.example.com http: paths: - path: / backend: serviceName: service_name2 servicePort: 80
對service_name1.example.com的請求轉發至service_name1服務上;對service_name2.example.com的請求轉發至service_name2服務上;
根據請求中的Host頭,控制器收到的請求將被轉發到service_name1或service_name2服務,DNS須要將service_name1.example.com和service_name2.example.com域名指向Ingress控制器和IP地址。blog