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