Golang Go语言中 给家庭 k8s 集群用的 External Load Balancer

发布于 1周前 作者 songsunli 来自 Go语言

Golang Go语言中 给家庭 k8s 集群用的 External Load Balancer

github: https://github.com/joesonw/homemade-external-load-balancer

一个动态 dns 解析 + 更新反向代理(traefik, etc) 配置的 controller.

使用起来就和在云上的 ELB, SLB 之类一样

欢迎 issue 和 PR

大家有什么其他的使用场景也可以提一提. 例如 nginx 之类


更多关于Golang Go语言中 给家庭 k8s 集群用的 External Load Balancer的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

12 回复

我的理解是 HELB 充当一个中间者角色:

1、watch apiserver,实时将集群内部 svc 域名推送到 dnspod(设置 CNAME)
2、接收来自公网的 CNAME 并将其负载到 traefik
3、traefik 通过 hostname 做七层负载并最终分发到 pod 内(此时 traefik 应当是集群 ingress controller)

布吉岛我理解的对不对,但是我感觉还是公司 VPN 更方便一些

更多关于Golang Go语言中 给家庭 k8s 集群用的 External Load Balancer的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html




1. 更新的是二级域名的 NS 解析
2. 解析来自公网 /内网的三级域名的 A 请求 到 traefik (watch apiserver)
3. 更新 traefik 配置 (watch apiserver)

这个是自己玩的时候方便. 现在自己公司里用的是阿里云的 k8s 集群+slb. baremetal 没有这样的待遇.

这个不错,下周末试试,正好家里的 k8s 准备迁移

#3 我去,你们都在家里玩 k8s 么… 我顶多弄几个虚拟机测试

单机也可以啊,方便规模化的时候上云,无缝。

最近有个 k3s,感觉更适合家里玩


#6 哥,你微信多少,我微信被 block 了,我重新加一下==

#6 那个一出来我就看了,ha 方案官方还没出来,而且看了下吧 storage plugin 精简了好多,最近在折腾 diy 键盘还没时间鼓捣这个,等鼓捣完了再鼓捣这个,2333

算是 DDNS+ingress 不能称为 Load Balancer 吧(杠一下

为了取得和在云上 External Load Balancer 一样的功效嘛.

当然 load balance, ssl/tls 这些慢慢加进来, 先放上来是看有没有需要这些功能, 看下大家的需求. 二一个, 如果有跟我一样, 想要云上 ELB 那种效果, MetalLB 又太麻烦的, 可以先用一用.

针对家庭k8s集群使用的External Load Balancer(外部负载均衡器),在Golang Go语言环境中,虽然Go语言本身不直接提供负载均衡器的实现,但你可以通过配置k8s服务(Service)来实现负载均衡功能。

在k8s中,Service是一种为一组功能相同的Pod提供单一不变的接入点的资源。对于External Load Balancer,k8s提供了LoadBalancer类型的Service,它通常用于公有云环境下的服务,并需要外部云环境的支持。然而,在家庭或私有集群环境中,可能无法直接使用这种类型的Service,因为缺乏外部云提供商的支持。

不过,你可以通过其他方式在家庭k8s集群中实现负载均衡,例如:

  1. 使用NodePort类型的Service:将Service暴露在每个节点的指定端口上,然后可以使用一个外部的负载均衡器(如硬件负载均衡器或开源软件如HAProxy、Nginx等)来分发流量到这些端口。
  2. 使用Ingress:Ingress可以提供比Service更灵活的路由和负载均衡功能。通过配置Ingress规则和Ingress Controller,你可以将外部HTTP/HTTPS流量路由到集群内的不同Service上。

在Go语言中,你可以编写程序来与k8s API交互,动态地创建和管理这些Service和Ingress资源,从而实现负载均衡的自动化配置和管理。

回到顶部