已知自建 loadbalancer 可以用 metallb ,其他的暂时还未知。 直接使用 nodeport 和 loadbalancer 差距大吗?
需要基于生产环境的论断,有没有运维大佬支支招建议建议。
![]() | 1 tudou1514 2023-12-07 11:54:49 +08:00 如果你是运维,nodeport 最后会累死你,nodeport 不推荐生产使用 |
![]() | 3 guanzhangzhang 2023-12-07 12:53:55 +08:00 @jitongxi nodeport 前后端口不一致,某些应用层面 cmdline 之类的要配置 external-urls ,然后 nodePort 是 nat ,你要封端口,必须 nat 加 mark 很繁琐,还有源 ip 问题 |
![]() | 4 hzfyjgw 2023-12-07 13:02:29 +08:00 metallb 的二层模式 网络 ip 地址会有限制,BGP 模式可以更灵活 |
5 julyclyde 2023-12-07 13:09:21 +08:00 想从所有 node 上协商出一个相同的 port 来也不容易吧 端口号一共才六万多 nodeport 这玩意,都不知道为啥要发明出来 |
![]() | 6 HugeNature 2023-12-07 13:17:42 +08:00 关注下帖子 |
![]() | 7 defunct9 2023-12-07 13:34:52 +08:00 上面都说 node 是陀屎,可是,gcp 缺省的就是 nodeport |
![]() | 8 swulling 2023-12-07 13:37:41 +08:00 via iPhone 看你们有没有网络工程师,如果没有不要选 metalb 。 出了事情你搞不定的。 |
9 bearcatpanda 2023-12-07 14:03:19 +08:00 正常都是 ingress 呀.不过可以 loadbalancer+ingress 一起使用. nodeport 在一般排查问题或者验证部署的情况下会用到 |
11 Fooooo0 2023-12-07 18:19:30 +08:00 LVS + nginx ingress nodeport 就可以 |
12 guo4224 2023-12-07 20:05:53 +08:00 via iPhone 每个 pod 一个 ip |
13 CheckMySoul 2023-12-07 21:52:07 +08:00 MetalLB 、OpenELB 、PureLB 走起。 |
14 jerrycmht 2023-12-08 09:41:22 +08:00 nodeport 和 loadbalancer 我怎么感觉差不多啊,loadbalancer 也会起 nodeport 的端口啊,所以说运维问题的我感觉不太对。 区别在于 loadbalancer 的 vip 可以稳定下来,nodeport 你无法指定集群中的一个节点 ip ,因为这个节点可能会挂,你得再搞个 keepalive 之类的。 当然如果是 BGP 的,那肯定是 loadbalancer 了。 |
15 3andwich 2023-12-08 09:44:33 +08:00 如果大多数服务要依赖于自编译的 nginx 的插件获取一些值,nodeport 是不是一个好选择?老哥们有其他好方法说一说 |
![]() | 16 tudou1514 2023-12-08 09:45:07 +08:00 @jitongxi 默认是 30000-32767 ,你会发现有些开发竟然不够用(实际真的遇到过),而且要不你亲自下场维护每个端口的意义,要不就是最后你都不知道这个端口是哪个服务,你身为一个运维,服务器环境的端口不知道是哪个服务,你觉得你会不会背锅?另外集群任意 ip+nodeport 都可以访问服务,如果小集群,无所谓也就那几个 ip ,大集群呢?你们运维或者运维领导超级强势还好说,不然等着天天背锅吧。开发不会吊你的规范,也不会考虑你的工作,你想想总有“大神”想把 pod 当服务器用,他不管是不是前台进程的,就要实现远程开发。所以最好就是日常不要给自己留坑,如果运维领导不强势,那就另说。 |
![]() | 17 shimada666 2023-12-08 09:51:39 +08:00 我直接 Kubesphere 建集群,nodeport 暴露出来一个统一网关端口,外面套个 nginx 全转发到这个端口,内部就是 ingress nginx 的事了 |
18 jerrycmht 2023-12-08 09:57:18 +08:00 其实还要看你是什么应用,如果是那种分布式服务上 k8s 的,比如 tidb ,那用 ingress 啥的肯定不合适,流量转发扛不住的。如果是 http 或者小型的应用,那省事儿完全没问题。 当应用规模大了,就可以考虑 MetalLB 、OpenELB 这些,并且最好是 bgp 的,在路由层就做转发了,或者使用类似 terway 的插件,一个 pod 一个 ip 。 |
19 jerrycmht 2023-12-08 10:32:54 +08:00 @3andwich 我觉得可以,但是要考虑 nodeport 选什么 ip 的问题,集群中任意 ip 都可以访问,但任意节点都有可能挂掉,所以最好有 vip ,或者干脆上 metallb 之类的,提前分配 vip |
![]() | 20 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 地址就可以了 |
![]() | 21 RatioPattern 2023-12-08 17:03:50 +08:00 一开始 all in one 一台宿主机的话可以用 openwrt 虚拟机这种来做交换机/路由用,配置网络出入策略的话直接根据网段来方便很多 |
![]() | 22 RatioPattern 2023-12-08 17:06:03 +08:00 还有个别 pod 需要翻墙的话直接在这个段网关上配置,会方便很多 |