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

K8S 修改节点 IP 有没有比较好的方案

  •  
  •   sniperking1234 · 2022-11-07 16:48:57 +08:00 · 2619 次点击
    这是一个创建于 741 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为有私有化交付 K8S 的需求,但是交付给客户之后,可能会遇到客户服务器 IP 变化的情况,这时候就需要支持 K8S 的节点 IP 变更,但是从网上搜索了一下,关于这个方面好像并没有成熟的解决方案。

    不知道大家有没有遇到过类似场景,又是怎么解决的问题。

    30 条回复    2023-01-08 02:28:24 +08:00
    novolunt
        1
    novolunt  
       2022-11-07 16:54:45 +08:00
    双 ip 方案,k8s 自己一套内网 ip ,不走节点外网 ip 。
    sniperking1234
        2
    sniperking1234  
    OP
       2022-11-07 17:22:30 +08:00
    @novolunt 这个方案怎么搞,有啥技术栈可以参考吗
    sujin190
        3
    sujin190  
       2022-11-07 17:39:02 +08:00
    要不直接套层 vpn 呗,性能也没多大影响,然后客户 ip 随便他们折腾,只需要保证各节点网络能正常访问就行了吧
    sujin190
        4
    sujin190  
       2022-11-07 17:47:49 +08:00
    保证同一局域网的话,直接自己给网卡再添加设置一个不会变的的 ip 来组局域网也可以,或者添加网桥网卡再添加 ip 组单独局域网也行,这样也正常二层网络完全一样的

    不过感觉还是用 vpn 比较好,在不在统一局域网都没问题,改集群 ip 看起来似乎有点麻烦,而且你都交互给客户了,你有方案他们操作的时候估计也很容易出错,还是独立于集群外用 vpn 组一个独立的局域网靠谱,有问题客户只要有点经验的也可以自己搞定
    pepesii
        5
    pepesii  
       2022-11-07 17:49:07 +08:00
    用域名行不
    Blank10030
        6
    Blank10030  
       2022-11-07 17:55:16 +08:00
    意思是 k8s 部署在虚拟机里,然后和客户内网打通?开个虚拟机双网卡当网关就行了。k8s 内部走自己的 ip ,客户访问走建的虚拟机网关。
    optional
        7
    optional  
       2022-11-07 17:57:31 +08:00 via iPhone
    没听懂,交付有状态的集群?也没听都不靠谱啊。
    交付的不应该是一堆 yaml 和数据吗
    swulling
        8
    swulling  
       2022-11-07 18:05:35 +08:00 via iPhone
    这要看你 node 上报的是主机名还是 ip 。如果 get nodes 里看到的是主机名,只是修改 ip 就很简单修改 kubelet 的配置即可。

    如果要修改上报的字段,就比较麻烦了。这里的麻烦主要是证书以及 etcd 里的对应关系。推荐是先下线再加入,当然这会导致 pod 的迁移。

    关于你这个需求,最简单的就是上报字段用自定义的值,比如 node01 这种。修改起来就很简单
    sniperking1234
        9
    sniperking1234  
    OP
       2022-11-07 18:30:49 +08:00
    @optional 是交付的产品,产品部署在 k8s 上,用户不会直接使用 k8s
    sniperking1234
        10
    sniperking1234  
    OP
       2022-11-07 18:31:55 +08:00
    @swulling 你说的步骤应该是修改 slave 节点的步骤,如果修改 master 节点,需要改控制组件的配置,包括 cni 的配置,复杂不少
    sniperking1234
        11
    sniperking1234  
    OP
       2022-11-07 18:32:53 +08:00
    @sujin190 这个有博文或者方案实现可以参考吗
    sniperking1234
        12
    sniperking1234  
    OP
       2022-11-07 18:34:25 +08:00
    @pepesii 访问 apiserver 的地址可以配置成域名,但是 node 地址应该只能是 ip ,我没找到能配置成域名的方式
    optional
        13
    optional  
       2022-11-07 18:34:29 +08:00
    @sniperking1234 保证应用可以在新的集群内重新启动就好了吧,我们自己的项目基本都做到了 80%的 gitops
    Judoon
        14
    Judoon  
       2022-11-07 18:36:48 +08:00
    写个脚本,直接删除并重新加入集群,让客户改完 ip 执行一下,逐个运行
    sniperking1234
        15
    sniperking1234  
    OP
       2022-11-07 18:39:30 +08:00
    @optional 你是指重建一个集群吗,但是我们有持久化的数据存在集群里,换集群还涉及到存储的迁移
    sniperking1234
        16
    sniperking1234  
    OP
       2022-11-07 18:43:46 +08:00
    @Judoon 我们有一些场景只有一个 master 节点,如果把这个 master 删了,应该就加不回去了吧
    optional
        17
    optional  
       2022-11-07 18:47:07 +08:00
    @sniperking1234 实时迁移很麻烦,但是持久化的数据也应该包含备份吧,运维的时候停止访问,备份,重建,还原。
    optional
        18
    optional  
       2022-11-07 18:47:26 +08:00
    没有备份即使能在线迁移,你能保证不出错吗
    sniperking1234
        19
    sniperking1234  
    OP
       2022-11-07 18:51:33 +08:00
    @optional 有备份,但是这个复杂度已经不是自动化或者一个脚本能解决的了,感觉得派专人过去支持,成本太高了
    optional
        20
    optional  
       2022-11-07 18:54:54 +08:00
    @sniperking1234 K8S 的 initialcontainer 与 job 就是干这类事的啊
    sujin190
        21
    sujin190  
       2022-11-07 19:23:05 +08:00   ❤️ 2
    @sniperking1234 #11 就是正常的 vpn 组虚拟局域网吧,这个资料应该很多才是,集群流量不高随便那种 vpn 都可以,流量高的话可以使用 tinc 这种可以 p2p 组虚拟交换机模式的 vpn 就行

    https://www.cnblogs.com/huangweimin/articles/7700892.html openvpn 的

    https://www.moewah.com/archives/2898.html tinc 用 switch 模式组网

    openvpn 组的流量统一由中心节点转发,tinc 的 switch 模式就是各机器相互直达了,然后把 vpn 的 ip 当集群外部 ip 就行,安装 k8s 时候其实就是一个多网卡机器指定外部 ip 的过程,查一下应该很容易找到安装 k8s 怎么指定网卡和外部 ip
    rrfeng
        22
    rrfeng  
       2022-11-07 19:25:07 +08:00
    设计有问题,就不要让别人来填坑
    sniperking1234
        23
    sniperking1234  
    OP
       2022-11-07 19:32:49 +08:00
    @rrfeng 请教下有什么问题
    Judoon
        24
    Judoon  
       2022-11-07 22:56:31 +08:00   ❤️ 1
    @sniperking1234 #16 给你几个方案
    1 、交付前和客户商量好网段,直接使用他们提供的网段初始化集群再交付
    2 、交付时包含交换机,所有的机器放在交换机内使用独立的事先自定义好的子网,客户只需要提供最多两三个 ip 到时候配到交换机上的出入口即可
    3 、直接在所有机器现有的网卡上创建一个桥接口,配置自定义 100.64.x.x (或者 169.254.x.x )的网段(默认你的节点在一个子网内,没有跨网段)。这个应该类似 4 楼的方案




    之前做过单机和集群交付的方案
    - 单机直接桥接一个虚 ip 配置为 100.100.100.100 (方便实施直连又不容易和客户网段冲突
    - 集群用的是上面的方案 2 ,用的下一代防火墙+交换机
    Judoon
        25
    Judoon  
       2022-11-07 23:01:18 +08:00
    虚 ip 还能直接给单机的 master 用来初始化,实际 ip 怎么变都无所谓
    novolunt
        26
    novolunt  
       2022-11-08 11:54:56 +08:00
    sniperking1234
        27
    sniperking1234  
    OP
       2022-11-08 11:57:27 +08:00
    @novolunt 10 段是内部 ip ,20 段是外部 ip ?那用的什么技术方案呢
    novolunt
        28
    novolunt  
       2022-11-08 12:13:28 +08:00
    @sniperking1234 一个网卡可以绑定多个 ip ,都不用建 tunnel 。eth0 给内网 ip eth0:0 给电信外网 ip eth0:1 给铁通外网 ip
    pepesii
        29
    pepesii  
       2022-11-08 15:36:52 +08:00
    @sniperking1234 #12 我感觉是可行的,你可以试试,我搜索了下 https://www.sobyte.net/post/2022-05/change-k8s-node-ip/#summary 最后这个 summary 的办法,当然我没有去测试,如果你测试了,可以反馈下结果哈
    Comolli
        30
    Comolli  
       2023-01-08 02:28:24 +08:00 via iPhone
    ,marrk
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2477 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:50 · PVG 23:50 · LAX 07:50 · JFK 10:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.