k8s 暴露 TCP 服务有哪些好的实践啊,求指导🙏

2019-02-18 16:32:29 +08:00
 ns2250225

暂时用过的方案有 ( 1 ) NodePort:需要管理外部的端口,服务一多,配置管理麻烦

6699 次点击
所在节点    程序员
31 条回复
ZombieMisaka
2019-02-18 16:36:03 +08:00
ingress-nginx 做负载均衡
ns2250225
2019-02-18 16:37:29 +08:00
@ZombieMisaka 这个好像也是要配置 configMap 的端口呀
ZombieMisaka
2019-02-18 16:52:28 +08:00
@ns2250225 #2 ingress 不会把对应 service 的端口直接暴露出去啊,只对外暴露 nginx 的端口就好了,nginx 根据域名转发请求到各个 service 中去,不太清楚你想要什么效果,每个 service 当然要对内网开放端口,不然没法正常通信,我也是新手来着,不保证说的都对
rayingecho
2019-02-18 16:57:24 +08:00
keepalived
MetalLB
alexsunxl
2019-02-18 16:59:28 +08:00
ingress 顶一个。 之前在迅雷搞 k8s 那一套的时候也是用这个,感觉资料还算多
ns2250225
2019-02-18 17:02:51 +08:00
@alexsunxl 感谢回复,请问当时你们用 ingress 是怎样管理那些 configMap 的呀,可以自动生成 configMap 吗,比如创建一个 redis 服务,ingress 自动配好 configMap,外部就能之间连接了,求指导🎈
rayingecho
2019-02-18 17:11:11 +08:00
@alexsunxl
@ZombieMisaka
按我理解 ingress 是工作在七层的, nginx 代理 L4 服务并不属于 ingress 的功能, 而是 nginx-ingress 提供的一个独立特性. 用同一组 nginx 的 DaemonSet 的话会碰到端口冲突问题, 动态部署 nginx 的话 nginx pod 之间本身也需要一个 L4 的 LB 来做代理, 会绕回到 L4 代理的问题上
jerry
2019-02-18 17:15:58 +08:00
tcp 的话貌似只有 NodePort 或 LB 了,ingress 是 7 层的
ns2250225
2019-02-18 17:16:39 +08:00
@rayingecho 感谢回复,其实我现在我只是想简单地对外提供 redis 服务,可是除了用 nodeport 测试成功(老大说不能用 nodeport ),其它都连接不上 redis server,香菇= =,请问有什么好的实践吗
jerry
2019-02-18 17:17:35 +08:00
@jerry 或者 hostPort
binux
2019-02-18 17:17:58 +08:00
-直接用 service provider 的 load balancer-
rayingecho
2019-02-18 17:20:00 +08:00
@ns2250225
跟 #11 说的一样, 最佳办法就是用 external load balancer, 私有云上我只知道 MetalLB 这个方案
服务数量不多的话用 keepalived 也可以
defunct9
2019-02-18 17:23:32 +08:00
前面放两个 harproxy,然后 nodeport 暴露出来,这么搞
zhoulouzi
2019-02-18 17:31:11 +08:00
@ZombieMisaka 我没看错的话楼主是 TCP,域名转发什么鬼,ingress-nginx 暴露 TCP/UDP 端口还是需要 nodeport 把端口暴露出去.
楼主可以尝试用 hostnetwork 部署 ingress-nginx,然后写个服务管理这个 confimap
但是这个 ingress-nginx 代理长链接(比如 websocket)会出现问题,nginx 频繁被 reload 会导致链接断开.如果你们应用重连做的好可以考虑
metalLB 针对非云环境实现的负载均衡有很多前提要求,而且目前是 beta,期待吧
rayingecho
2019-02-18 17:35:40 +08:00
@zhoulouzi
长连接问题学习了, 不过 nginx 用 HostNetwork 端口冲突的隐患很大啊
zhoulouzi
2019-02-18 17:52:03 +08:00
@rayingecho 可以提前规划范围? 我也想不到好办法
maxmin
2019-02-18 19:35:42 +08:00
#1 #3 说的在理吧, 用 service 了。
kaneg
2019-02-18 19:44:48 +08:00
如果只是 http 协议的话,ingress 是不二选择。
如果是一般的 TCP 的话,只能用 service。
而对 service,如果 kubernetes 提供商是 cloud 的话,type 可以用 load balance,而如果是自己安装的,就只能用 nodeport 了。
用 nideport 的时候只要暴露任意一个 worker 的 IP 即可,如果 worker 不固定,就直接暴露 master 的 IP。
ifaii
2019-02-18 21:19:52 +08:00
nodeport or externalip 任选,不要 hostnetwork
wkzq
2019-02-18 21:57:25 +08:00
管理 kube 资源可以试试 helm

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

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

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

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

© 2021 V2EX