對於基於HTTP的服務來說,不同的URL地址經常對應到不同的後端服務或者虛擬服務器,這些應用層的轉發機制僅通過Kubernetes的Service機制是無法實現的。從Kubernetes v1.1版本開始新增Ingress資源對象,用於將不同URL訪問請求轉發到後端不同的Service,以實現HTTP層的業務路由機制。Kubernetes使用一個Ingress策略定義和一個具體的Ingress Controller,兩者結合並實現一個完整的Ingress負載均衡器。
使用Ingress進行負載分發時,Ingress Controller通過api-server監聽ingress和service的變化,將基於Ingress策略將客戶端請求直接轉發到Service對應的後端Endpoint上,這樣會跳過kube-proxy的轉發功能。
- 未配置ingress:
集羣外部 --> NodePort --> k8s Service - 配置ingress:
集羣外部 --> Ingress --> k8s Service
Ingress Controller 除了traefik,還有Haproxy、Linkerd、nginx等其他類型。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: dev-bange-module-auth
spec:
rules:
- host: dev-auth.xxx.cn
http:
paths:
- backend:
serviceName: dev-bange-module-auth
servicePort: 8080