使用Master公网IP初始化跨网段Kubernetes集群的方案咨询
跨公网/内网混合节点Kubernetes集群搭建方案
混合网络场景下(同内网Worker+跨公网其他网段Worker)用Master公网IP搭集群,核心要解决三个问题:API Server多地址访问的证书合法性、内外网节点访问API Server的路由拆分、CNI跨网段隧道的路由适配,不需要复杂的专线配置,按以下步骤操作即可:
一、Master节点初始化配置
不要零散拼kubeadm init参数,用配置文件部署避免参数冲突:
- 生成默认初始化配置模板
kubeadm config print init-defaults > kubeadm-init.yaml
- 修改模板中以下配置项:
localAPIEndpoint.advertiseAddress:填写Master节点的内网IP(例如192.168.1.10),端口保持默认6443,不要直接填公网IP,否则所有内网流量会绕公网导致延迟、卡死apiServer.certSANs:列表中同时添加Master的内网IP、公网IP,确保API Server证书对所有访问地址合法,不会报证书不信任错误controlPlaneEndpoint:填写Master公网IP:6443,所有节点不管内外网,统一用这个地址执行join操作networking.podSubnet:规划独立的Pod网段,必须和所有节点的物理网段、VPN网段完全不重叠,例如节点内网用192.168.0.0/16、跨网节点用172.16.0.0/16,就把Pod网段设为10.233.0.0/16(Calico默认)或10.244.0.0/16(Flannel默认);serviceSubnet同理设为10.96.0.0/12,避开所有物理网段
- 配置Master节点安全组,仅放通需要的入方向端口:6443(API Server)、对应CNI的跨节点通信端口(Calico放179、4789,Flannel放8472),公网端口仅对需要接入的Worker节点IP开放,不要全网暴露
- 执行初始化
kubeadm init --config kubeadm-init.yaml
初始化完成后按提示拷贝kubeconfig文件到~/.kube/config即可。
二、节点接入配置
针对不同网络位置的Worker节点做对应路由配置,解决预检超时问题:
- 和Master同内网的Worker节点:不需要额外配置,直接执行生成的kubeadm join命令即可,流量全程走内网,无公网绕转,不会出现kubectl卡死问题
- 跨公网的其他网段Worker节点:先在节点的
/etc/hosts文件中添加一条静态映射:
<Master公网IP> <Master内网IP>
该配置的作用是让kubeadm预检阶段请求Master内网IP时,实际路由到Master公网入口,不会修改集群内部的内网通信规则,配置完成后再执行和内网节点完全相同的kubeadm join命令即可,不会再出现拉取kubeadm-config超时的错误。
三、CNI网络适配(解决节点NotReady、CNI初始化失败问题)
CNI不要用默认的自动网卡检测、自动路由配置,手动指定规则避免路由冲突:
- 用Calico的场景:修改Calico DaemonSet的环境变量
- 把
CALICO_IPV4POOL_CIDR设为初始化时指定的Pod网段 - 把
IP_AUTODETECTION_METHOD设为interface=<网卡名>,明确指定每个节点的物理出口网卡:内网节点填内网网卡名,公网节点填能访问公网的网卡名,避免CNI选错网卡导致流量不通 - 打开
CALICO_CROSS_SUBNET=true,同子网节点走二层直连转发,跨公网节点走VXLAN隧道封装,不要开启跨公网BGP路由宣告,避免路由泄露
- 把
- 用Flannel的场景:修改
kube-flannel-cfgConfigMap- 在
net-conf.json中添加"DirectRouting": true,同内网节点直接走主机路由转发 - 给每个跨公网节点添加Annotation:
flannel.alpha.coreos.com/public-ip-overwrite=<节点公网IP>,Flannel会自动在跨公网节点之间建立VXLAN隧道
前置检查:所有节点提前执行以下命令开启内核转发,否则CNI会启动失败:
- 在
sysctl -w net.bridge.bridge-nf-call-iptables=1 sysctl -w net.ipv4.ip_forward=1
如果之前部署VPN出现路由冲突,直接把Pod网段、Service网段加到VPN的路由排除列表,让VPN只处理节点物理IP之间的流量,不要转发容器网段流量即可解决冲突,不需要卸载VPN。
四、验证标准
所有节点接入后执行kubectl get nodes,状态均为Ready即为部署成功:
- 同内网节点之间的Pod流量走内网二层转发,无额外封装开销
- 跨公网节点之间、跨公网节点和内网节点之间的Pod流量走VXLAN隧道封装,正常通信
- 内网节点访问API Server走内网,公网节点访问API Server走公网,无卡死、超时问题
内容的提问来源于stack exchange,提问作者dev.whoan
相关产品推荐
相关产品推荐

