kubernetes中负载均衡机制Ingress的示例分析
这篇文章将为大家详细讲解有关kubernetes中负载均衡机制Ingress的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
一:前言
Kubernetes在设计之初就充分考虑了针对容器的服务发现与负载均衡机制,提供了Service资源,并通过kube-proxy配合cloud provider来适应不同的应用场景。随着kubernetes用户户的激增,用户场景的不断丰富,又产生了一些新的负载均衡机制。目前,kubernetes中的负载均衡?致可以分为以下几种机制:
1.Service(NodePort): 直接用Service提供cluster内部的负载均衡,通过在集群的每个node上暴露一个端口,然后将这个端口映射到某个具体的service来实现的,虽然每个node的端口有很多(默认的取值范围是 30000-32767),但是由于安全性和易用性(服务多了就乱了,还有端口冲突问题)实际使用可能并不多。
2.Ingress Controller: 还是用Service提供cluster内部的负载均衡,但是通过自定义LB提供外部访问。
3.Service Load Balancer:通过向底层云平台申请创建一个负载均衡器来向外暴露服务;目前LoadBlancer Service支持的云平台已经相对完善,比如国外的GCE、DigitalOcean,国内的 阿里云,私有云 OpenStack 等等,由于LoadBlancer Service深度结合了云平台,所以只能在一些云平台上来使用。
4.Custom Load Balancer:自定义负载均衡,并替代kube-proxy,一般在物理部署Kubernetes时使用,方便接入公司已有的外部服务。
二:Service
Service是对一组提供相同功能的Pods的抽象,并为它们提供一个统一的入口。借助Service,应用可以方便的实现服务发现与负载均衡,并实现应用的零宕机升级。Service通过标签来选取服务后端,一般配合Replication Controller或者Deployment 来保证后端容器的正常运行。
Service有三种类型:
1.Cluster Ip: 默认类型,自动分配一个仅cluster内部可以访问的虚拟IP
2.NodePort : 在ClusterIp基础上为Service在每台机器上绑定一个端口,这样可以通过<NodeIP>:NodePort来访问该服务。
3.LoadBalancer:在NodePort的基础上,借助cloud provider创建一个外部的负载均衡器,并将请求转发到<NodeIP>:NodePort
三:Ingress Controller
Service 虽然解决了服务发现和负载均衡的问题,但对外访问的时候,NodePort类型需要在外部搭建额外的负载均衡,而LoadBalancer需要Kubernetes必须跑在支持的cloud provider上面。 Ingress就是为了解决这些限制的。
Ingress 是一个规则的集合,它允许集群外的流量通过一定的规则到达集群内的 Service 。 request--->ingress--->service.
Ingress由三个组件组成:
1.反向代理负载均衡器:即常见的负载均衡软件,如 nginx、Haproxy 等
2.Ingress Controller: kubernetes API 进行交互,实时的感知后端 service、pod 等变化, Ingress Controller 再结合下文的 Ingress 生成配置,然后更新反向代理负载均衡器,并刷新其配置,实现动态服务发现与更新
3.Ingress:规则集合;定义了域名与Kubernetes的service的对应关系;这个规则将与 Ingress Controller 结合, Ingress Controller 将其动态写入到负载均衡器配置中,从而实现整体的服务发现和负载均衡。
四:Service Load Balancer
在Ingress出现以前,Service Load Balancer谁推荐的解决Service局限性的方式。Service Load Balancer将haproxy跑在容器中,并监控service和endpoint的变化,通过容器IP对外提供4层和7层负载均衡服务。
五:Custom Load Balancer
自定义组件,代替kube-proxy来做负载均衡。如nginx plus, kube2haproxy等。
六:Endpoints
有几种情况需要用到没有selector的service
1.使用kubernetes集群外部的数据库时。
2.service中用到了其它namespace或kubernetes集群中的service
3.在kubernetes的工作负载与集群外的后端之间互相迁移。
七: Traefik
Traefik是?款开源的反向代理与负载均衡?具。它最?的优点是能够与常?的微服务系统直接整合,可以实现?动化动态配置。?前?持Docker,Swarm, Mesos/Marathon, Mesos, Kubernetes, Consul, Etcd, Zookeeper,BoltDB, Rest API等等后端模型。
关于“kubernetes中负载均衡机制Ingress的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。