Kubernetes没有为裸机群集提供网络负载平衡器(类型为LoadBalancer的服务)的实现。Kubernetes提供的Network LB的实现都是粘合代码,可以调用各种IaaS平台(GCP,AWS,Azure ......)。如果您未在受支持的IaaS平台(GCP,AWS,Azure ...)上运行,则LoadBalancers将在创建时无限期地保持“挂起”状态。
裸机群集运营商留下了两个较小的工具来将用户流量带入其集群,“NodePort”和“externalIPs”服务。这两种选择都对生产使用具有重大缺点(例如:把service当作负载均衡器使用,当某个POD故障,service的endpoints中不会自动删除该pod的ip地址。不像AWS的elb可以监控节点是否存活),这使得裸露的金属集群成为Kubernetes生态系统中的二等公民。
下面有两种方式,在自建机房的kubernetes集群中部署负载均衡器:
1. MetaLB
MetalLB旨在通过提供与标准网络设备集成的网络LB实现来纠正这种不平衡,以便裸机集群上的外部服务也“尽可能”地工作。
参考:
官网:https://metallb.universe.tf/
github:https://github.com/danderson/metallb
该项目的成熟度:https://metallb.universe.tf/concepts/maturity/
2. Porter
Porter 是一款适用于物理机部署 Kubernetes 的负载均衡器,该负载均衡器使用物理交换机实现,利用 BGP 和 ECMP 从而达到性能最优和高可用性。我们知道在云上部署的 Kubernetes 环境下,通常云服务厂商会提供 cloud LB 插件暴露 Kubernetes 服务到外网,但在物理机部署环境下由于没有云环境,服务暴露给外网非常不方便,Porter 是一个提供用户在物理环境暴露服务和在云上暴露服务一致性体验的插件。该插件提供两大功能模块:
LB controller 和 agent: controller 负责同步 BGP 路由到物理交换机;agent 以 DaemonSet 方式部署到节点上负责维护引流规则;
EIP service,包括 EIP pool 管理和 EIP controller,controller 会负责更新服务的 EIP 信息。
参考:
官网:https://kubesphere.io/zh-CN/projects/
github:https://github.com/kubesphere/porter
3.用 kubeadm 部署 aws 中国区环境下的 kubernetes
参考:https://aisensiy.github.io/2018/04/24/kubeadm-aws-provider/
4. 这里有一个在阿里云自行使用二进制文件搭建的kubernetes集群,并手工配置接入阿里云的负载均衡器的例子:
https://blog.csdn.net/cleverfoxloving/article/details/79186574
Cloud Provider: https://kubernetes.feisky.xyz/cha-jian-kuo-zhan/cloud-provider