《企业运维之云上网络原理与实践》——第四章 负载均衡 ALB——负载均衡ALB:课前答疑(上) https://developer.aliyun.com/article/1230525?groupCode=supportservice
2. 场景二:Ingress Controller工作原理
1) Ingress Controller的概念
Ingress是一种K8s资源对象,用于对外暴露服务,该资源对象定义了不同主机名(域名)及URL和对应后端Service(K8s Service)的绑定,根据不同的路径路由http和https流量。
而Ingress Contoller是一个pod服务,封装了一个web前端负载均衡器,同时在其基础上实现了动态感知Ingress,并根据Ingress的定义,动态生成前端web负载均衡器的配置文件,比如Nginx Ingress Controller本质上就是一个Nginx,只不过它能根据Ingress资源的定义动态生成Nginx的配置文件,然后动态Reload。
具体实现反向代理及负载均衡的程序,对Ingress定义的规则进行解析,根据配置的规则来实现请求转发。
为了使得Ingress资源正常工作,集群中必须要有个Ingress Controller来解析Ingress的转发规则。Ingress Controller收到请求,匹配Ingress转发规则转发到后端Service,而Service转发到Pod,最终由Pod处理请求。Kubernetes中Service、Ingress与Ingress Controller有着以下关系:
• Service是后端真实服务的抽象,一个Service可以代表多个相同的后端服务;
• Ingress是反向代理规则,用来规定HTTP/HTTPS请求应该被转发到哪个Service上。例如:根据请求中不同的Host和URL路径,让请求落到不同的Service上。
2) Ingress基本操作
• Name:Ingress的名称,本例为test-ingress;
• Host:指定服务访问域名;
• Path:指定访问的url路径。SLB将流量转发到backend之前,所有的入站请求都要先匹配host和path;
• Backend:由服务名称和服务端口组成;
• 服务名称:Ingress转发的backend服务名称;
• 服务端口:服务暴露的端口。
可以将Ingress配置为服务提供外部可访问的URL、负载均衡流量、终止SSL/TLS,以及提供基于名称的虚拟主机等能力。Ingress控制器通常负责通过负载均衡器来实现Ingress。
3) 最佳实践:部署高可靠Ingress Controller
原则:
• pod多副本,避免单点故障;
• ingress controller部署在单独的节点,避免其他应用抢占资源;
• 根据业务流量水平扩缩容ingress节点或者ingress controller水平伸缩。
以上是SLB结合ACK的场景,SLB结合EDAS的场景也是类似的,因为EDAS本身就是一个分布式服务的框架,可以加ECS节点,也可以加K8s容器集群,然后加入到SLB的后端。