如何在本地虚拟机上部署 kubernetes 服务(类型 LoadBalancer)?

How to deploy kubernertes service (type LoadBalancer) on onprem VMs?

如何在本地虚拟机上部署 kubernertes 服务(类型 LoadBalancer)?当我使用 type=LoadBalcer 时,它显示外部 IP 为 "pending",但如果我部署在 GKS 上,使用相同的 yaml 一切正常。我的问题是:

如果我在 Onprem VM 上使用 type=LoadBalcer,是否需要负载均衡器? 我可以在 yaml 中手动分配 LoadBalncer IP 吗?

您需要设置 metalLB。

MetalLB 连接到您的 Kubernetes 集群,并提供网络负载均衡器实现。简而言之,它允许您在不在云提供商 运行 上的集群中创建 LoadBalancer 类型的 Kubernetes 服务,因此不能简单地连接到付费产品来提供负载均衡器。

安装运行

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/namespace.yaml
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/metallb.yaml

更多详情点击here安装

检查 Banzai Cloud Pipeline Kubernetes Engine (PKE) 即 "a simple, secure and powerful CNCF-certified Kubernetes distribution" 平台可能会有所帮助。它旨在在任何云、VM 或裸机 节点上工作,为私有云提供可扩展且安全的基础。 PKE 具有云感知能力,包括越来越多的云和平台集成。

When I using type=LoadBalcer it's shows external IP as "pending" but everything works fine with the same yaml if I deployed on GKS.

如果您创建一个 LoadBalancer 服务——例如尝试公开您自己的基于 TCP 的服务,或安装一个入口控制器——云提供商集成将负责创建所需的云资源,并写回您所在的端点服务将可用。如果您没有用于此目的的云提供商集成或控制器,您的服务资源将保持在待定状态。

对于 Kubernetes,LoadBalancer 服务是向集群或网格之外的世界公开服务(冗余或非冗余)的最简单和最常见的方式——向其他服务、内部用户或互联网。

作为一个概念,负载平衡可以发生在 OSI 网络模型的不同层次上,主要发生在 L4(传输层,例如 TCP)和 L7(应用层,例如 HTTP)上。在 Kubernetes 中,Services 是 L4 的抽象,而 Ingresses 是 L7 路由的通用解决方案。

You need to setup metalLB.

MetalLB 是 LoadBalancer 云集成最流行的本地替代品之一。整个解决方案在 Kubernetes 集群中运行。

主要组件是集群内的 Kubernetes 控制器,它监视 LB 服务资源,并根据 ConfigMap 中提供的配置,从专用池中为新服务分配和写回 IP 地址。它为每个服务维护一个领导节点,并根据工作模式,通过 BGP 或 ARP 发布它(在发生故障转移时发送未经请求的 ARP 数据包)。

MetalLB 可以通过两种方式运行:要么将所有请求转发到领导节点上的 pods,要么使用 kubeproxy 分发到所有节点。

第 7 层(通常 HTTP/HTTPS)负载均衡器设备,如 F5 BIG-IP,或基于 HAProxy 和 Nginx 的解决方案可以与 适用的入口控制器 集成。如果你有这样的,在大多数情况下你不需要 LoadBalancer 实现。

希望对 "LoadBalancer on bare metal hosts" 问题有所启发。