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

请教熟悉 k8s 大佬, 能修改 ingress 的端口么?

  •  1
     
  •   NUT · 2018-11-10 15:59:38 +08:00 · 9119 次点击
    这是一个创建于 2190 天前的主题,其中的信息可能已经有所发展或是发生改变。

    导入外部流量我使用nginx-ingress方式,直接按照 https://github.com/kubernetes/ingress-nginx/ 安装来走的。

    按照其他大佬的博客,在部署 nginx-ingress-controller Deployment 时候使用 hostNetwork: true 方式,这样就把 nginx-ingress-controller 所在 node 的 80 端口直接就暴露出来,作为外部流量导入点。这样 ingress 就把 node 机器的 80 端口占用,因为 80 还有其他服务,整个服务没法全上容器。 所以想改变 ingress 的端口。

    我尝试改变 ** nginx-ingress-controller Deployment** 容器的 ** containerPort** 没有效果。所以想请教大佬,有没有办法?

    我的环境

    • k8s 1.12
    • node 3 个
    • ingress 方案 nginx-ingress
    15 条回复    2018-11-14 10:48:29 +08:00
    artandlol
        1
    artandlol  
       2018-11-10 17:00:00 +08:00 via iPhone   ❤️ 1
    其他服务 80 端口改用 ingress。要改也是改别的服务而不 ingress
    kidlj
        2
    kidlj  
       2018-11-10 17:18:30 +08:00 via iPhone   ❤️ 1
    Nginx-ingress 的 80 和 443 不能改。
    NUT
        3
    NUT  
    OP
       2018-11-10 17:37:14 +08:00
    @artandlol #1
    整个服务没法全部容器化,而且资源有限,如果真改不了,那就只能通过 node selector 来处理 80 端口了。 本来设想 k8s 前面有一个 ng 来做 waf。
    SliceOnion
        4
    SliceOnion  
       2018-11-10 17:51:32 +08:00   ❤️ 1
    可以指定 service 的 type 为 NodePort,通过指定参数 nodePort 为一个其他端口开放每个 Node 上的这个端口,再配置一个负载均衡,加入你要用的三个 node_ip:port 就应该可以了
    NUT
        5
    NUT  
    OP
       2018-11-10 17:56:50 +08:00
    @SliceOnion #4 大佬,我觉得您这个方案有点绕了。
    SliceOnion
        6
    SliceOnion  
       2018-11-10 20:05:05 +08:00
    为什么会觉得绕呢,service 本来就要配置的,负载均衡也是理所应当
    flowfire
        7
    flowfire  
       2018-11-10 20:54:59 +08:00 via iPhone
    点进来之前我还以为是谷歌的那个游戏。。。。
    mengyang624
        8
    mengyang624  
       2018-11-10 21:12:07 +08:00
    看到 7 楼之前我还以为是谷歌的那个游戏。。。。
    hotsymbol
        9
    hotsymbol  
       2018-11-10 22:18:09 +08:00
    点进来之前我还以为是谷歌的那个游戏。。。。
    owenliang
        10
    owenliang  
       2018-11-11 11:04:14 +08:00 via Android   ❤️ 1
    可以弄俩台 k8s 机器打上 label,给 ingress 的 yaml 配上 label selector。
    abmin521
        11
    abmin521  
       2018-11-11 14:03:49 +08:00 via Android
    4 10 楼说的都可以 推荐 10
    NUT
        12
    NUT  
    OP
       2018-11-12 07:49:40 +08:00
    @abmin521 #11 我也是这么想的:-)
    anubu
        13
    anubu  
       2018-11-13 17:44:33 +08:00
    @NUT 没太明白 10 楼的描述,是另找节点部署 controller 来避免 80 端口冲突,最终还是没有改变 controller 默认端口但完成了当前场景需求的意思吗?
    NUT
        14
    NUT  
    OP
       2018-11-13 18:29:36 +08:00
    加入我们有 3 个 node ,其中有 2 个 node 是可以使用 80 端口的 ,这时候我们发布 ingress-nginx Deployment 的时候, 可以添加 node 的 nodeSelector ,这样 deployment 就会被运行在指定的 label 的 node 上。

    下面是命令

    # 添加 node 的 label
    kubectl label nodes <node-name> <label-key>=<label-value>
    # 删除 只需在命令行最后指定 Label 的 key 名并与一个减号相连即可:
    kubectl label nodes <node-name> <label-key>-
    # 如果添加 label
    修改一个 Label 的值,需要加上--overwrite 参数:
    kubectl label nodes <node-name> <label-key>=<label-value> --overwrite
    anubu
        15
    anubu  
       2018-11-14 10:48:29 +08:00
    @NUT 感谢。原来理解的差不多,没有改变 ingress 的默认端口,找到了其他方法使默认端口不会冲突。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   982 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:06 · PVG 06:06 · LAX 14:06 · JFK 17:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.