`
m635674608
  • 浏览: 5027424 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Kubernetes中的服务发现与负载均衡

 
阅读更多

Kubernetes中的服务发现与负载均衡

Kubernetes在设计之初就充分考虑了针对容器的服务发现与负载均衡机制,提供了Service资源,并通过kube-proxy配合cloud provider来适应不同的应用场景。随着kubernetes用户的激增,用户场景的不断丰富,又产生了一些新的负载均衡机制。目前,kubernetes中的负载均衡大致可以分为以下几种机制,每种机制都有其特定的应用场景:

  • Service:直接用Service提供cluster内部的负载均衡,并借助cloud provider提供的LB提供外部访问
  • Ingress Controller:还是用Service提供cluster内部的负载均衡,但是通过自定义LB提供外部访问
  • Service Load Balancer:把load balancer直接跑在容器中,实现Bare Metal的Service Load Balancer
  • Custom Load Balancer:自定义负载均衡,并替代kube-proxy,一般在物理部署Kubernetes时使用,方便接入公司已有的外部服务

Service


Service是对一组提供相同功能的Pods的抽象,并为它们提供一个统一的入口。借助Service,应用可以方便的实现服务发现与负载均衡,并实现应用的零宕机升级。Service通过标签来选取服务后端,一般配合Replication Controller或者Deployment来保证后端容器的正常运行。

Service有三种类型:

  • ClusterIP:默认类型,自动分配一个仅cluster内部可以访问的虚拟IP
  • NodePort:在ClusterIP基础上为Service在每台机器上绑定一个端口,这样就可以通过<NodeIP>:NodePort来访问改服务
  • LoadBalancer:在NodePort的基础上,借助cloud provider创建一个外部的负载均衡器,并将请求转发到<NodeIP>:NodePort

另外,也可以讲已有的服务以Service的形式加入到Kubernetes集群中来,只需要在创建Service的时候不指定Label selector,而是在Service创建好后手动为其添加endpoint。

Ingress Controller

Service虽然解决了服务发现和负载均衡的问题,但它在使用上还是有一些限制,比如

- 只支持4层负载均衡,没有7层功能
- 对外访问的时候,NodePort类型需要在外部搭建额外的负载均衡,而LoadBalancer要求kubernetes必须跑在支持的cloud provider上面

Ingress就是为了解决这些限制而引入的新资源,主要用来将服务暴露到cluster外面,并且可以自定义服务的访问策略。比如想要通过负载均衡器实现不同子域名到不同服务的访问:

foo.bar.com --|                 |-> foo.bar.com s1:80
              | 178.91.123.132  |
bar.foo.com --|                 |-> bar.foo.com s2:80

可以这样来定义Ingress:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test
spec:
  rules:
  - host: foo.bar.com
    http:
      paths:
      - backend:
          serviceName: s1
          servicePort: 80
  - host: bar.foo.com
    http:
      paths:
      - backend:
          serviceName: s2
          servicePort: 80

注意Ingress本身并不会自动创建负载均衡器,cluster中需要运行一个ingress controller来根据Ingress的定义来管理负载均衡器。目前社区提供了nginx和gce的参考实现。

Service Load Balancer

在Ingress出现以前,Service Load Balancer是推荐的解决Service局限性的方式。Service Load Balancer将haproxy跑在容器中,并监控service和endpoint的变化,通过容器IP对外提供4层和7层负载均衡服务。

社区提供的Service Load Balancer支持四种负载均衡协议:TCP、HTTP、HTTPS和SSL TERMINATION,并支持ACL访问控制。

Custom Load Balancer

虽然Kubernetes提供了丰富的负载均衡机制,但在实际使用的时候,还是会碰到一些复杂的场景是它不能支持的,比如

  • 接入已有的负载均衡设备
  • 多租户网络情况下,容器网络和主机网络是隔离的,这样kube-proxy就不能正常工作

这个时候就可以自定义组件,并代替kube-proxy来做负载均衡。基本的思路是监控kubernetes中service和endpoints的变化,并根据这些变化来配置负载均衡器。比如weave flux、nginx plus、kube2haproxy等

参考资料

  • http://kubernetes.io/docs/user-guide/services/
  • http://kubernetes.io/docs/user-guide/ingress/
  • https://github.com/kubernetes/contrib/tree/master/service-loadbalancer
  • https://www.nginx.com/blog/load-balancing-kubernetes-services-nginx-plus/
  • https://github.com/weaveworks/flux
  • https://github.com/AdoHe/kube2haproxy

https://sanwen8.cn/p/3a6ywXV.html

分享到:
评论

相关推荐

    Python-HeptioGimbal是Kubernetes和OpenStack流量负载均衡平台Gimbal

    然而,随着多集群部署的日益普及,如何有效地在这些不同环境中实现流量路由和负载均衡变得至关重要。这就是Heptio Gimbal的用武之地。Heptio Gimbal,这个由Heptio(已被VMware收购)和Actapio共同打造的项目,是一...

    Kubernetes Service负载均衡性能优化.pdf

    Kubernetes Service负载均衡性能优化.pdf

    架构专场(2):孟凡杰-基于kubernetes的服务发现与服务治理.zip

    在本讲座中,孟凡杰深入探讨了如何在Kubernetes(K8s)环境中实现服务发现和服务治理。Kubernetes作为当今最流行的容器编排系统,为微服务架构提供了强大的支持,而服务发现和服务治理是微服务架构中的核心组成部分...

    Kubernetes集群中多节点合作博弈负载均衡策略.docx

    在Kubernetes集群中,负载均衡策略对于优化资源分配和提高整体效率至关重要。传统的负载均衡算法,如Kubernetes的默认算法 BalancedResourceAllocation,虽然旨在确保各节点间的资源利用率均衡,但存在一个明显的...

    负载均衡技术的发展.

    随着云计算和容器化技术的普及,软件定义的负载均衡(如Kubernetes的Service)成为了新的趋势,它允许在虚拟化环境中动态调整资源分配,实现自动扩展和收缩,极大地提高了系统的弹性和可管理性。此外,基于AI和机器...

    Tomcat服务器集群和负载均衡

    负载均衡是集群的核心功能之一,它能将来自用户的网络请求分配到集群中的多个服务器上,避免单个服务器过载,同时也能提高服务的可用性和响应速度。常见的负载均衡策略有轮询、最少连接数、IP哈希等。 配置Tomcat...

    Python-minuteman一个分布式负载均衡器

    minuteman是一个用Python编写的开源项目,旨在解决分布式系统中的服务发现和负载均衡问题。它支持多种数据存储后端,如Etcd、Consul或Zookeeper,这些存储系统能够提供可靠的服务注册和发现功能。通过minuteman,...

    Go-Porter是一款适用于物理机部署Kubernetes的负载均衡器

    Porter 是一款适用于物理机部署 Kubernetes 的负载均衡器,该负载均衡器使用物理交换机实现,利用 BGP 和 ECMP 从而达到性能最优和高可用性。我们知道在云上部署的 Kubernetes 环境下,通常云服务厂商会提供 cloud ...

    Kubernetes与服务网格方案.pdf

    2. **服务发现与负载均衡**:Kubernetes 提供内置的服务发现机制,通过DNS或环境变量使服务之间能够相互找到。同时,它还能够自动实现负载均衡,确保请求均匀分布到各个服务实例。 3. **集群调度**:Kubernetes 可以...

    Kubernetes私有集群负载均衡器终极解决方案MetalLB.docx

    Kubernetes私有集群负载均衡器终极解决方案MetalLB.docx

    kubernetes-zh中文指南.pdf

    4. **服务治理**:探讨Kubernetes的服务发现和负载均衡机制,讲解如何通过Service进行微服务间的通信,以及如何利用Ingress实现外部访问。此外,还会介绍Kubernetes的健康检查机制,以及如何实现故障转移和自我修复...

    双机热备,负载均衡

    - 容器化与容器编排(Docker + Kubernetes):通过容器化技术实现服务的快速部署和弹性扩展,Kubernetes提供了内置的负载均衡功能。 6. 实施步骤: - 确定业务需求:考虑系统稳定性和性能要求。 - 选择合适的...

    Kubernetes与服务网格介绍.pptx

    服务网格是一个专门用于服务到服务通信的基础设施层,负责处理服务间的通信,包括负载均衡、服务发现、故障恢复、监控、安全性和其他跨服务的通信特性。服务网格通常由数据平面和控制平面组成,数据平面代理服务间的...

    kubernetes中文文档

    - **服务与负载均衡**: 介绍如何定义和使用服务,以及如何将流量导向这些服务。 - **存储和持久卷**: 如何配置持久卷和持久卷声明,以实现数据的持久化。 #### 1.3 Kubernetes 201 更深入地探讨 Kubernetes 的高级...

    openelb:Kubernetes 在裸机、边缘和虚拟化中的负载均衡器实现

    OpenELB 允许用户在裸机、egde 和虚拟化环境中创建LoadBalancer 服务以供外部访问,并提供与基于云的负载均衡器相同的用户体验。核心功能BGP模式和二层模式下的负载分担ECMP 路由和负载平衡IP地址池管理使用 CRD 的...

    TenxCloud时速云方案.pdf

    * 服务发现及负载均衡:Kubernetes 提供了服务发现和负载均衡机制,可以自动分配流量到多个容器实例。 3. 时速云 CaaS 平台架构及技术运用 时速云 CaaS 平台架构基于 Kubernetes,提供了一个自动化的容器部署、...

    kuberesolver:带有Kubernetes解析器的Grpc负载均衡器

    它带有一个约250个LOC kubernetes小型客户端,可以找到服务端点。 因此,它不会膨胀您的二进制文件。用法// Import the moduleimport "github....

    kube-vip:Kubernetes 控制平面虚拟 IP 和负载均衡器

    kube-vip 高可用性和负载平衡概述用于控制平面和 Kubernetes 服务的 Kubernetes 虚拟 IP 和负载均衡器kube-vip背后的想法是一个适用于所有环境的小型独立的高可用性选项,尤其是: 裸机边缘(手臂/树莓派) 虚拟化...

    Spring Cloud Kubernetes文档.pdf

    Ribbon是Spring Cloud中用于客户端负载均衡的库,Spring Cloud Kubernetes提供了与Kubernetes集成的Ribbon实现,使服务间通信能够利用Kubernetes的负载均衡策略。 **7. Kubernetes生态意识** Spring Cloud ...

Global site tag (gtag.js) - Google Analytics