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

K8S Ingress 只是给局域网用可以吗

  •  
  •   leiuu · 2022-01-18 21:48:20 +08:00 · 3860 次点击
    这是一个创建于 1071 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前服务暴露方式主要用的是 NodePort 。

    但担心这种方式重启服务时,有可能被其他服务占用 Port ,需要对其他上游服务屏蔽 Port 变化。

    因此考虑用 Ingress + NGINX Ingress Controller 。

    对上游统一通过 VIP + 80 暴露服务,不同 Service 使用不同 path 区分。

    现在的问题,似乎 Ingress 似乎只支持 Domain 方式...

    请教大佬们,有其他解法嘛...其实我的服务不需要暴露给公网...
    27 条回复    2022-01-20 10:30:38 +08:00
    wellsc
        1
    wellsc  
       2022-01-18 21:50:53 +08:00
    自己搞个内网 dns 就行了
    leiuu
        2
    leiuu  
    OP
       2022-01-18 21:53:22 +08:00
    @wellsc 谢谢大佬 好像可行
    那调用方也得配置一下 使用内网 dns 的吧
    wellsc
        3
    wellsc  
       2022-01-18 22:10:52 +08:00
    @leiuu 那当然,不然连不上
    muchrooms
        4
    muchrooms  
       2022-01-19 02:02:00 +08:00
    ysicing
        5
    ysicing  
       2022-01-19 08:45:18 +08:00
    frankchen
        6
    frankchen  
       2022-01-19 09:19:00 +08:00   ❤️ 1
    土办法,用 nginx 做入口,把 nginx 的节点加入集群;用 nginx 代理 svc
    Judoon
        7
    Judoon  
       2022-01-19 09:24:06 +08:00
    调用方写个 hosts 文件也行
    不写 hosts 文件的话主动在请求的 header 中加上 host 参数也行
    然后,ingress 可以配置默认后端,如果你的服务全部只用 path 区分分发的话,不写 domain ,理论上就可以作为默认的后端
    zliea
        8
    zliea  
       2022-01-19 09:24:56 +08:00   ❤️ 1
    1. NodePort 不是手动指定的么,如果手动指定(每个命名空间分配固定的端口范围),重启不会有冲突。
    2. 我这里使用 K8S 部署的 Nginx 统一控制服务暴露,这个 Nginx 暴露 NodePort (可以一个命名空间一个 Nginx ,分配固定的端口)。
    kennylam777
        9
    kennylam777  
       2022-01-19 09:40:50 +08:00
    Ingress 不是問題, 問題是 Ingress 配合 Public IP 的 LoadBalancer 才有問題

    AWS 的解決方法很簡單, LoadBalancer 加一句 annotation 就可以指定在內網跑, hostname 也會帶 internal-開頭的
    yuzunzhi
        10
    yuzunzhi  
       2022-01-19 10:16:19 +08:00
    首先,NodePort 在 svc 里指定的,重启 deployment 又不会改 svc 。。。怎么可能被占用,第一个担心就是多余的。
    第二,K8S 暴露服务的意思只是暴露服务至集群外,至于集群外是内网还是公网,本来就是自己控制的。
    第三,本身 K8S 内部网络也可以和局域网直接路由打通。
    yuzunzhi
        11
    yuzunzhi  
       2022-01-19 10:20:27 +08:00
    并没有歧视的意思,只是我的建议是,你可以先补一下 K8S 和网络的基础知识。
    monkeyWie
        12
    monkeyWie  
       2022-01-19 10:25:07 +08:00
    第一,ingress 是支持 path 路由的
    第二,ingress service 暴露外网还是内网是可以控制的,如果是用的云厂家的 k8s 可以直接用一个内网 SLB 暴露出去
    arischow
        13
    arischow  
       2022-01-19 10:27:08 +08:00
    ???
    leiuu
        14
    leiuu  
    OP
       2022-01-19 10:46:38 +08:00
    @yuzunzhi
    谢谢 不足挂心 纯技术讨论都 ok
    担心 NodePort 冲突 是猜测有可能多个服务会竞争的问题 假设不能预分配的情况
    考虑有一种场景 :
    例如 A 初次使用 30000 端口运行 之后停了一段时间(种种原因)
    此时恰好 B 服务以未指定端口或者指定端口 30000 的方式创建 那可能会夺走 A 的端口
    A 再启动就会面临 port 变化
    leiuu
        15
    leiuu  
    OP
       2022-01-19 10:51:38 +08:00
    @frankchen @ztechstack 这方法哈哈哈 聪明...
    @Judoon Get ! 我实验下。突然想到,path 变动,例如我新加一个服务,apply yaml, Ingress 如何保证高可用呢...
    MengQuadra
        16
    MengQuadra  
       2022-01-19 10:57:35 +08:00
    以用过的套路云来说,Ingress 可以配合 nginx 注解开白名单给内网
    RRyo
        17
    RRyo  
       2022-01-19 10:57:59 +08:00   ❤️ 1
    traefik 可以 path 规则,但是有个坑,如果 backend 不支持 path 前缀修改,比如某个服务监听:8080/page 提供服务,你用 traefik 把 abc.com/svc/page 转给他,可以配置中间件去掉 svc(这样后面的服务看到的就是 abc.com/page 了),但是这个 api 返回的内容比如 /page/js 下的文件,在页面上会指向 abc.com/page/js ,然后就 404 了(正确应该是 abc.com/svc/page/js ),如果服务可以配置全局路径前置,比如 pathprefix=/svc ,就可以很好的使用,建议还是域名区分,比如 svc1.abc.com svc2.abc.com 分别转给 svc1 和 svc2 ,反正 traefik 支持 acme 的泛域名证书,直接挂上*.abc.com 就行
    zliea
        18
    zliea  
       2022-01-19 10:58:47 +08:00
    主要我这里也必须部署 Nginx ,Nginx 上 lua 来进行认证去状态。
    一直也没研究用 K8S 的解决方案,主要万一哪天不用 K8S ,还得改回来,闹心。
    MengQuadra
        19
    MengQuadra  
       2022-01-19 11:01:59 +08:00
    补充一点, 套路云 Ingress 对应的 SLB 如果没有内网地址可以照着公网 SLB 的监听配置一个。
    这样就能内网访问 Ingress 了_(:з」∠)_
    joesonw
        20
    joesonw  
       2022-01-19 11:51:51 +08:00
    如果没有 lb 组件的网络环境, 可以用 metallb
    ptrees
        21
    ptrees  
       2022-01-19 11:57:00 +08:00
    nodeport 如果全自动分配应该不会有问题,全手动也没问题,一半自动一半手动就会有问题,亲身经历
    leiuu
        22
    leiuu  
    OP
       2022-01-19 12:48:43 +08:00
    @joesonw
    谢谢老哥
    顺了一下官方文档 这个组件不错的 但是如果服务数量多 就得有那么多的 ip pool 去维护
    ip 不够用端口方式区分 那就又和 NodePort 一样了...
    还有个问题是 如何维护内网的 ip pool 是否需要做 vip 之类的
    salmon5
        23
    salmon5  
       2022-01-19 13:35:05 +08:00
    包路服务用负载均衡吧
    joesonw
        24
    joesonw  
       2022-01-19 13:53:43 +08:00
    @leiuu 这个可以给 ingress ip, 服务还是上面各位的方法走 path. 因为上了 ingress, 也得解决 NodePort 访问问题.
    leiuu
        25
    leiuu  
    OP
       2022-01-19 20:50:02 +08:00
    @joesonw metalab 是否可以当做高可用 的 vip 池子用...
    kennylam777
        26
    kennylam777  
       2022-01-20 02:41:15 +08:00
    @leiuu 自己玩 LB 的話不如看看 kube-vip
    leiuu
        27
    leiuu  
    OP
       2022-01-20 10:30:38 +08:00
    @kennylam777
    恰好有用到 kube-vip 现在 master 的入口 ip 就是用的它
    请教 假设要再利用 kube-vip 虚拟几个 vip 用作 lb 会和现有部署的冲突吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5306 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 09:10 · PVG 17:10 · LAX 01:10 · JFK 04:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.