V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ns2250225
V2EX  ›  程序员

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

  •  
  •   ns2250225 ·
    ns2250225 · 2019-02-18 16:32:29 +08:00 · 6884 次点击
    这是一个创建于 2084 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言  ·  2019-02-18 23:22:27 +08:00
    我刚刚使用 [metalLB] ,完成了预期的需求啦😀,可是 [metalLB] 的 IP 地址池,好像只能用集群 Node 节点所在的 IP 段,而且好像只能配置一段,想问下有没有好的提供 IP 池的方案呀,感谢🙏
    31 条回复    2019-02-19 10:35:14 +08:00
    ZombieMisaka
        1
    ZombieMisaka  
       2019-02-18 16:36:03 +08:00   ❤️ 1
    ingress-nginx 做负载均衡
    ns2250225
        2
    ns2250225  
    OP
       2019-02-18 16:37:29 +08:00
    @ZombieMisaka 这个好像也是要配置 configMap 的端口呀
    ZombieMisaka
        3
    ZombieMisaka  
       2019-02-18 16:52:28 +08:00
    @ns2250225 #2 ingress 不会把对应 service 的端口直接暴露出去啊,只对外暴露 nginx 的端口就好了,nginx 根据域名转发请求到各个 service 中去,不太清楚你想要什么效果,每个 service 当然要对内网开放端口,不然没法正常通信,我也是新手来着,不保证说的都对
    rayingecho
        4
    rayingecho  
       2019-02-18 16:57:24 +08:00
    keepalived
    MetalLB
    alexsunxl
        5
    alexsunxl  
       2019-02-18 16:59:28 +08:00   ❤️ 1
    ingress 顶一个。 之前在迅雷搞 k8s 那一套的时候也是用这个,感觉资料还算多
    ns2250225
        6
    ns2250225  
    OP
       2019-02-18 17:02:51 +08:00
    @alexsunxl 感谢回复,请问当时你们用 ingress 是怎样管理那些 configMap 的呀,可以自动生成 configMap 吗,比如创建一个 redis 服务,ingress 自动配好 configMap,外部就能之间连接了,求指导🎈
    rayingecho
        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 代理的问题上
    jerry
        8
    jerry  
       2019-02-18 17:15:58 +08:00 via iPhone
    tcp 的话貌似只有 NodePort 或 LB 了,ingress 是 7 层的
    ns2250225
        9
    ns2250225  
    OP
       2019-02-18 17:16:39 +08:00
    @rayingecho 感谢回复,其实我现在我只是想简单地对外提供 redis 服务,可是除了用 nodeport 测试成功(老大说不能用 nodeport ),其它都连接不上 redis server,香菇= =,请问有什么好的实践吗
    jerry
        10
    jerry  
       2019-02-18 17:17:35 +08:00 via iPhone
    @jerry 或者 hostPort
    binux
        11
    binux  
       2019-02-18 17:17:58 +08:00 via Android
    -直接用 service provider 的 load balancer-
    rayingecho
        12
    rayingecho  
       2019-02-18 17:20:00 +08:00
    @ns2250225
    跟 #11 说的一样, 最佳办法就是用 external load balancer, 私有云上我只知道 MetalLB 这个方案
    服务数量不多的话用 keepalived 也可以
    defunct9
        13
    defunct9  
       2019-02-18 17:23:32 +08:00
    前面放两个 harproxy,然后 nodeport 暴露出来,这么搞
    zhoulouzi
        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,期待吧
    rayingecho
        15
    rayingecho  
       2019-02-18 17:35:40 +08:00
    @zhoulouzi
    长连接问题学习了, 不过 nginx 用 HostNetwork 端口冲突的隐患很大啊
    zhoulouzi
        16
    zhoulouzi  
       2019-02-18 17:52:03 +08:00
    @rayingecho 可以提前规划范围? 我也想不到好办法
    maxmin
        17
    maxmin  
       2019-02-18 19:35:42 +08:00
    #1 #3 说的在理吧, 用 service 了。
    kaneg
        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。
    ifaii
        19
    ifaii  
       2019-02-18 21:19:52 +08:00 via iPhone   ❤️ 1
    nodeport or externalip 任选,不要 hostnetwork
    wkzq
        20
    wkzq  
       2019-02-18 21:57:25 +08:00 via iPhone
    管理 kube 资源可以试试 helm
    bigcat0
        21
    bigcat0  
       2019-02-18 22:13:09 +08:00 via Android   ❤️ 1
    Nodeport 加 LB
    ns2250225
        22
    ns2250225  
    OP
       2019-02-18 23:21:22 +08:00
    @rayingecho 感谢您的推荐呀,我刚刚使用 [metalLB] ,完成了预期的需求啦😀,可是 [metalLB] 的 IP 地址池,好像只能用集群 Node 节点所在的 IP 段,而且好像只能配置一段,想问下有没有好的提供 IP 池的方案呀,感谢🙏
    JasonYo
        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 维护配置文件很麻烦?
    HuHui
        24
    HuHui  
       2019-02-18 23:50:12 +08:00 via Android
    @ns2250225 是因为 redis 消费端取 redis 的节点这个过程中拿到的是 redis 所在 node 节点的 ip 导,而这个 ip 是 k8s 内部 ip,所以不能访问,可以从这个问题着手。
    rayingecho
        25
    rayingecho  
       2019-02-19 00:37:39 +08:00 via iPad
    @ns2250225 L2 模式的话任意挑一个内网的 ip 段就可以
    ns2250225
        26
    ns2250225  
    OP
       2019-02-19 07:54:09 +08:00 via Android
    @rayingecho 可以配置多个内网 IP 的吗
    0312birdzhang
        27
    0312birdzhang  
       2019-02-19 08:19:22 +08:00
    楼上说用 nginx-ingress 的有用过长链接吗?
    udumbara
        28
    udumbara  
       2019-02-19 09:10:49 +08:00 via Android
    没人提 ambassador ?
    Tinet
        30
    Tinet  
       2019-02-19 10:25:08 +08:00
    @0312birdzhang nginx-ingress 的 tcp stream 也可以加上 keepalived 吧
    0312birdzhang
        31
    0312birdzhang  
       2019-02-19 10:35:14 +08:00
    @Tinet #30 并没有什么卵用,而且 nginx-ingress-controller 在监听的任何一个 pod 有更新时会 reload 一下,长链接全部断开,很酸爽
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2690 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:22 · PVG 20:22 · LAX 05:22 · JFK 08:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.