暂时用过的方案有 ( 1 ) NodePort:需要管理外部的端口,服务一多,配置管理麻烦
1
ZombieMisaka 2019-02-18 16:36:03 +08:00 1
ingress-nginx 做负载均衡
|
2
ns2250225 OP @ZombieMisaka 这个好像也是要配置 configMap 的端口呀
|
3
ZombieMisaka 2019-02-18 16:52:28 +08:00
@ns2250225 #2 ingress 不会把对应 service 的端口直接暴露出去啊,只对外暴露 nginx 的端口就好了,nginx 根据域名转发请求到各个 service 中去,不太清楚你想要什么效果,每个 service 当然要对内网开放端口,不然没法正常通信,我也是新手来着,不保证说的都对
|
4
rayingecho 2019-02-18 16:57:24 +08:00
keepalived
MetalLB |
5
alexsunxl 2019-02-18 16:59:28 +08:00 1
ingress 顶一个。 之前在迅雷搞 k8s 那一套的时候也是用这个,感觉资料还算多
|
6
ns2250225 OP @alexsunxl 感谢回复,请问当时你们用 ingress 是怎样管理那些 configMap 的呀,可以自动生成 configMap 吗,比如创建一个 redis 服务,ingress 自动配好 configMap,外部就能之间连接了,求指导🎈
|
7
rayingecho 2019-02-18 17:11:11 +08:00 1
@alexsunxl
@ZombieMisaka 按我理解 ingress 是工作在七层的, nginx 代理 L4 服务并不属于 ingress 的功能, 而是 nginx-ingress 提供的一个独立特性. 用同一组 nginx 的 DaemonSet 的话会碰到端口冲突问题, 动态部署 nginx 的话 nginx pod 之间本身也需要一个 L4 的 LB 来做代理, 会绕回到 L4 代理的问题上 |
8
jerry 2019-02-18 17:15:58 +08:00 via iPhone
tcp 的话貌似只有 NodePort 或 LB 了,ingress 是 7 层的
|
9
ns2250225 OP @rayingecho 感谢回复,其实我现在我只是想简单地对外提供 redis 服务,可是除了用 nodeport 测试成功(老大说不能用 nodeport ),其它都连接不上 redis server,香菇= =,请问有什么好的实践吗
|
11
binux 2019-02-18 17:17:58 +08:00 via Android
-直接用 service provider 的 load balancer-
|
12
rayingecho 2019-02-18 17:20:00 +08:00
@ns2250225
跟 #11 说的一样, 最佳办法就是用 external load balancer, 私有云上我只知道 MetalLB 这个方案 服务数量不多的话用 keepalived 也可以 |
13
defunct9 2019-02-18 17:23:32 +08:00
前面放两个 harproxy,然后 nodeport 暴露出来,这么搞
|
14
zhoulouzi 2019-02-18 17:31:11 +08:00 1
@ZombieMisaka 我没看错的话楼主是 TCP,域名转发什么鬼,ingress-nginx 暴露 TCP/UDP 端口还是需要 nodeport 把端口暴露出去.
楼主可以尝试用 hostnetwork 部署 ingress-nginx,然后写个服务管理这个 confimap 但是这个 ingress-nginx 代理长链接(比如 websocket)会出现问题,nginx 频繁被 reload 会导致链接断开.如果你们应用重连做的好可以考虑 metalLB 针对非云环境实现的负载均衡有很多前提要求,而且目前是 beta,期待吧 |
15
rayingecho 2019-02-18 17:35:40 +08:00
@zhoulouzi
长连接问题学习了, 不过 nginx 用 HostNetwork 端口冲突的隐患很大啊 |
16
zhoulouzi 2019-02-18 17:52:03 +08:00
@rayingecho 可以提前规划范围? 我也想不到好办法
|
17
maxmin 2019-02-18 19:35:42 +08:00
#1 #3 说的在理吧, 用 service 了。
|
18
kaneg 2019-02-18 19:44:48 +08:00 via iPhone 1
如果只是 http 协议的话,ingress 是不二选择。
如果是一般的 TCP 的话,只能用 service。 而对 service,如果 kubernetes 提供商是 cloud 的话,type 可以用 load balance,而如果是自己安装的,就只能用 nodeport 了。 用 nideport 的时候只要暴露任意一个 worker 的 IP 即可,如果 worker 不固定,就直接暴露 master 的 IP。 |
19
ifaii 2019-02-18 21:19:52 +08:00 via iPhone 1
nodeport or externalip 任选,不要 hostnetwork
|
20
wkzq 2019-02-18 21:57:25 +08:00 via iPhone
管理 kube 资源可以试试 helm
|
21
bigcat0 2019-02-18 22:13:09 +08:00 via Android 1
Nodeport 加 LB
|
22
ns2250225 OP @rayingecho 感谢您的推荐呀,我刚刚使用 [metalLB] ,完成了预期的需求啦😀,可是 [metalLB] 的 IP 地址池,好像只能用集群 Node 节点所在的 IP 段,而且好像只能配置一段,想问下有没有好的提供 IP 池的方案呀,感谢🙏
|
23
JasonYo 2019-02-18 23:34:53 +08:00
最近也在考虑
https://github.com/nginxinc/kubernetes-ingress/blob/master/examples/tcp-udp/README.md https://github.com/kubernetes/ingress-nginx 想用 ingress 实现 L4&L7 的功能.... 好像用 configmap 维护配置文件很麻烦? |
24
HuHui 2019-02-18 23:50:12 +08:00 via Android
@ns2250225 是因为 redis 消费端取 redis 的节点这个过程中拿到的是 redis 所在 node 节点的 ip 导,而这个 ip 是 k8s 内部 ip,所以不能访问,可以从这个问题着手。
|
25
rayingecho 2019-02-19 00:37:39 +08:00 via iPad
@ns2250225 L2 模式的话任意挑一个内网的 ip 段就可以
|
26
ns2250225 OP @rayingecho 可以配置多个内网 IP 的吗
|
27
0312birdzhang 2019-02-19 08:19:22 +08:00
楼上说用 nginx-ingress 的有用过长链接吗?
|
28
udumbara 2019-02-19 09:10:49 +08:00 via Android
没人提 ambassador ?
|
29
udumbara 2019-02-19 09:36:29 +08:00
|
30
Tinet 2019-02-19 10:25:08 +08:00
@0312birdzhang nginx-ingress 的 tcp stream 也可以加上 keepalived 吧
|
31
0312birdzhang 2019-02-19 10:35:14 +08:00
@Tinet #30 并没有什么卵用,而且 nginx-ingress-controller 在监听的任何一个 pod 有更新时会 reload 一下,长链接全部断开,很酸爽
|