因为有私有化交付 K8S 的需求,但是交付给客户之后,可能会遇到客户服务器 IP 变化的情况,这时候就需要支持 K8S 的节点 IP 变更,但是从网上搜索了一下,关于这个方面好像并没有成熟的解决方案。
不知道大家有没有遇到过类似场景,又是怎么解决的问题。
1
novolunt 2022-11-07 16:54:45 +08:00
双 ip 方案,k8s 自己一套内网 ip ,不走节点外网 ip 。
|
2
sniperking1234 OP @novolunt 这个方案怎么搞,有啥技术栈可以参考吗
|
3
sujin190 2022-11-07 17:39:02 +08:00
要不直接套层 vpn 呗,性能也没多大影响,然后客户 ip 随便他们折腾,只需要保证各节点网络能正常访问就行了吧
|
4
sujin190 2022-11-07 17:47:49 +08:00
保证同一局域网的话,直接自己给网卡再添加设置一个不会变的的 ip 来组局域网也可以,或者添加网桥网卡再添加 ip 组单独局域网也行,这样也正常二层网络完全一样的
不过感觉还是用 vpn 比较好,在不在统一局域网都没问题,改集群 ip 看起来似乎有点麻烦,而且你都交互给客户了,你有方案他们操作的时候估计也很容易出错,还是独立于集群外用 vpn 组一个独立的局域网靠谱,有问题客户只要有点经验的也可以自己搞定 |
5
pepesii 2022-11-07 17:49:07 +08:00
用域名行不
|
6
Blank10030 2022-11-07 17:55:16 +08:00
意思是 k8s 部署在虚拟机里,然后和客户内网打通?开个虚拟机双网卡当网关就行了。k8s 内部走自己的 ip ,客户访问走建的虚拟机网关。
|
7
optional 2022-11-07 17:57:31 +08:00 via iPhone
没听懂,交付有状态的集群?也没听都不靠谱啊。
交付的不应该是一堆 yaml 和数据吗 |
8
swulling 2022-11-07 18:05:35 +08:00 via iPhone
这要看你 node 上报的是主机名还是 ip 。如果 get nodes 里看到的是主机名,只是修改 ip 就很简单修改 kubelet 的配置即可。
如果要修改上报的字段,就比较麻烦了。这里的麻烦主要是证书以及 etcd 里的对应关系。推荐是先下线再加入,当然这会导致 pod 的迁移。 关于你这个需求,最简单的就是上报字段用自定义的值,比如 node01 这种。修改起来就很简单 |
9
sniperking1234 OP @optional 是交付的产品,产品部署在 k8s 上,用户不会直接使用 k8s
|
10
sniperking1234 OP @swulling 你说的步骤应该是修改 slave 节点的步骤,如果修改 master 节点,需要改控制组件的配置,包括 cni 的配置,复杂不少
|
11
sniperking1234 OP @sujin190 这个有博文或者方案实现可以参考吗
|
12
sniperking1234 OP @pepesii 访问 apiserver 的地址可以配置成域名,但是 node 地址应该只能是 ip ,我没找到能配置成域名的方式
|
13
optional 2022-11-07 18:34:29 +08:00
@sniperking1234 保证应用可以在新的集群内重新启动就好了吧,我们自己的项目基本都做到了 80%的 gitops
|
14
Judoon 2022-11-07 18:36:48 +08:00
写个脚本,直接删除并重新加入集群,让客户改完 ip 执行一下,逐个运行
|
15
sniperking1234 OP @optional 你是指重建一个集群吗,但是我们有持久化的数据存在集群里,换集群还涉及到存储的迁移
|
16
sniperking1234 OP @Judoon 我们有一些场景只有一个 master 节点,如果把这个 master 删了,应该就加不回去了吧
|
17
optional 2022-11-07 18:47:07 +08:00
@sniperking1234 实时迁移很麻烦,但是持久化的数据也应该包含备份吧,运维的时候停止访问,备份,重建,还原。
|
18
optional 2022-11-07 18:47:26 +08:00
没有备份即使能在线迁移,你能保证不出错吗
|
19
sniperking1234 OP @optional 有备份,但是这个复杂度已经不是自动化或者一个脚本能解决的了,感觉得派专人过去支持,成本太高了
|
20
optional 2022-11-07 18:54:54 +08:00
@sniperking1234 K8S 的 initialcontainer 与 job 就是干这类事的啊
|
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 |
22
rrfeng 2022-11-07 19:25:07 +08:00
设计有问题,就不要让别人来填坑
|
23
sniperking1234 OP @rrfeng 请教下有什么问题
|
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 ,用的下一代防火墙+交换机 |
25
Judoon 2022-11-07 23:01:18 +08:00
虚 ip 还能直接给单机的 master 用来初始化,实际 ip 怎么变都无所谓
|
26
novolunt 2022-11-08 11:54:56 +08:00
|
27
sniperking1234 OP @novolunt 10 段是内部 ip ,20 段是外部 ip ?那用的什么技术方案呢
|
28
novolunt 2022-11-08 12:13:28 +08:00
@sniperking1234 一个网卡可以绑定多个 ip ,都不用建 tunnel 。eth0 给内网 ip eth0:0 给电信外网 ip eth0:1 给铁通外网 ip
|
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 的办法,当然我没有去测试,如果你测试了,可以反馈下结果哈
|
30
Comolli 2023-01-08 02:28:24 +08:00 via iPhone
,marrk
|