Kubernetes提供了三种公开服务的方式:
1) L4 LoadBalancer:仅适用于 GCE 和 AWS 等云提供商
2) 通过 NodePort 公开服务:NodePort指令在每个工作节点上分配一个端口,将流量代理到相应的 Pod。
3) L7 Ingress:Ingress是一个专用的负载均衡器(例如 nginx、HAProxy、traefik、vulcand),它将传入的 HTTP/HTTPS 流量重定向到相应的端点
Kubernetes 不为裸机集群提供网络负载均衡器(LoadBalancer 类型的服务)的实现。
如果您没有在受支持的 IaaS 平台(GCP、AWS、Azure...)上运行 Kubernetes 集群,则无论创建时间如何,LoadBalancers 都将保持“待处理”状态。
原因是外部世界和Kubernetes之间缺乏IP路由的支持;没有默认实现转移 Ingress 使用的 dns 区域来将通信分配到集群内部。
即使在联合集群模式下,也有外部项目可以提供裸机,作为独立或混合解决方案的一部分。
这取决于您拥有的项目的规模和成熟度,因此应该从选择合适的负载均衡器或VIP提供商开始:
https://github.com/google/metallb
https://docs.traefik.io/
https://github.com/kubernetes/contrib/tree/master/keepalived-vip
http://vulcand.github.io/
并已弃用:
http://www.linuxvirtualserver.org/software/ipvs.html
请注意,在联邦集群(多个裸机 Kubernetes 集群)中,需要将每台物理机的 IP 地址导出到中央 API 提供程序,并且可能不在我提供给您的链接中。