请问自建 k8s 集群, 自建 loadbalancer 还是直接 nodeport?

2023-12-07 11:38:38 +08:00
 jitongxi

已知自建 loadbalancer 可以用 metallb ,其他的暂时还未知。 直接使用 nodeport 和 loadbalancer 差距大吗?

需要基于生产环境的论断,有没有运维大佬支支招建议建议。

2409 次点击
所在节点    Kubernetes
23 条回复
tudou1514
2023-12-07 11:54:49 +08:00
如果你是运维,nodeport 最后会累死你,nodeport 不推荐生产使用
jitongxi
2023-12-07 12:02:18 +08:00
@tudou1514 老哥细说
guanzhangzhang
2023-12-07 12:53:55 +08:00
@jitongxi nodeport 前后端口不一致,某些应用层面 cmdline 之类的要配置 external-urls ,然后 nodePort 是 nat ,你要封端口,必须 nat 加 mark 很繁琐,还有源 ip 问题
hzfyjgw
2023-12-07 13:02:29 +08:00
metallb 的二层模式 网络 ip 地址会有限制,BGP 模式可以更灵活
julyclyde
2023-12-07 13:09:21 +08:00
想从所有 node 上协商出一个相同的 port 来也不容易吧
端口号一共才六万多

nodeport 这玩意,都不知道为啥要发明出来
HugeNature
2023-12-07 13:17:42 +08:00
关注下帖子
defunct9
2023-12-07 13:34:52 +08:00
上面都说 node 是陀屎,可是,gcp 缺省的就是 nodeport
swulling
2023-12-07 13:37:41 +08:00
看你们有没有网络工程师,如果没有不要选 metalb 。

出了事情你搞不定的。
bearcatpanda
2023-12-07 14:03:19 +08:00
正常都是 ingress 呀.不过可以 loadbalancer+ingress 一起使用. nodeport 在一般排查问题或者验证部署的情况下会用到
julyclyde
2023-12-07 17:58:19 +08:00
@defunct9 “诉诸权威”是不对的
Fooooo0
2023-12-07 18:19:30 +08:00
LVS + nginx ingress nodeport 就可以
guo4224
2023-12-07 20:05:53 +08:00
每个 pod 一个 ip
CheckMySoul
2023-12-07 21:52:07 +08:00
MetalLB 、OpenELB 、PureLB 走起。
jerrycmht
2023-12-08 09:41:22 +08:00
nodeport 和 loadbalancer 我怎么感觉差不多啊,loadbalancer 也会起 nodeport 的端口啊,所以说运维问题的我感觉不太对。
区别在于 loadbalancer 的 vip 可以稳定下来,nodeport 你无法指定集群中的一个节点 ip ,因为这个节点可能会挂,你得再搞个 keepalive 之类的。
当然如果是 BGP 的,那肯定是 loadbalancer 了。
3andwich
2023-12-08 09:44:33 +08:00
如果大多数服务要依赖于自编译的 nginx 的插件获取一些值,nodeport 是不是一个好选择?老哥们有其他好方法说一说
tudou1514
2023-12-08 09:45:07 +08:00
@jitongxi 默认是 30000-32767 ,你会发现有些开发竟然不够用(实际真的遇到过),而且要不你亲自下场维护每个端口的意义,要不就是最后你都不知道这个端口是哪个服务,你身为一个运维,服务器环境的端口不知道是哪个服务,你觉得你会不会背锅?另外集群任意 ip+nodeport 都可以访问服务,如果小集群,无所谓也就那几个 ip ,大集群呢?你们运维或者运维领导超级强势还好说,不然等着天天背锅吧。开发不会吊你的规范,也不会考虑你的工作,你想想总有“大神”想把 pod 当服务器用,他不管是不是前台进程的,就要实现远程开发。所以最好就是日常不要给自己留坑,如果运维领导不强势,那就另说。
shimada666
2023-12-08 09:51:39 +08:00
我直接 Kubesphere 建集群,nodeport 暴露出来一个统一网关端口,外面套个 nginx 全转发到这个端口,内部就是 ingress nginx 的事了
jerrycmht
2023-12-08 09:57:18 +08:00
其实还要看你是什么应用,如果是那种分布式服务上 k8s 的,比如 tidb ,那用 ingress 啥的肯定不合适,流量转发扛不住的。如果是 http 或者小型的应用,那省事儿完全没问题。
当应用规模大了,就可以考虑 MetalLB 、OpenELB 这些,并且最好是 bgp 的,在路由层就做转发了,或者使用类似 terway 的插件,一个 pod 一个 ip 。
jerrycmht
2023-12-08 10:32:54 +08:00
@3andwich 我觉得可以,但是要考虑 nodeport 选什么 ip 的问题,集群中任意 ip 都可以访问,但任意节点都有可能挂掉,所以最好有 vip ,或者干脆上 metallb 之类的,提前分配 vip
RatioPattern
2023-12-08 17:02:24 +08:00
既然你都强调“K8S 集群”了,那是 metallb 直接按 IP 段分配,这样方便管理.
比如 10.0.0.2-10.0.0.254 开发环境
10.0.1.2-10.0.1.254 测试环境
10.0.3.2-10.0.3.254 随用随扔环境
10.0.5.2-10.0.5.254 暴露外网环境

metallb 还可以配合 l2 l3 的交换机、路由用,如果虚拟的路由/交换机不够用你甚至可以直接用 vlan vxlan trunk 带到外面的物理交换机上减负,当然如果集群长期 20 个 pod 以内自己玩这么来有点重.但是如果打算长期用,这么规划好后面就不用怎么操心基本上开好 pod 看看 pod ip 地址就可以了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/998307

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX