搜索中...
🔍

未找到相关结果

Akemi

kubespray使用业务网卡作为节点IP引出的新节点加入问题

字数统计: 632阅读时长: 3 min
2026/11/13

在默认情况下,kubespray会使用默认路由的网卡作为集群节点的IP。如果没有特别留意的情况下,业务网卡192是默认路由,导致k8s集群搭建后使用业务网卡作为集群节点IP
如果后续需要加入新的worker节点,且节点只有188网段网卡,就需要进行调整
否则kubelet按kubelet.conf连192段的apiserver就会失败(kubelet 校验 apiserver 证书时,按 kubeconfig 里 server 的地址对 SAN)
关于iptables相关知识回顾:https://akemi.zj.cn/2026/02/11/Linux-iptables/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
本机进程访问 192.168.130.30:6443
|
| OUTPUT 链 DNAT
v
目的地址被改成 10.0.0.30:6443
|
| POSTROUTING 链 MASQUERADE
v
源地址被改成出口网卡地址
|
v
请求发往 10.0.0.30:6443

此时主机觉得自己是在往192.168.130.30发数据

iptables目的地址转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash
# 补全 PATH 环境变量,防止 systemd 找不到 iptables 命令
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 定义映射结构:"私网IP:公网IP:端口列表(空格分隔)"
MAPPINGS=(
"192.168.130.30:10.0.0.30:6443"
)

for entry in "${MAPPINGS[@]}"; do
# 解析出私网IP、公网IP、端口列表
SRC_IP=$(echo "$entry" | cut -d':' -f1)
DST_IP=$(echo "$entry" | cut -d':' -f2)
PORTS=$(echo "$entry" | cut -d':' -f3)

# 循环配置该 IP 下指定的各个端口
for PORT in $PORTS; do
# 检查并添加 OUTPUT DNAT 规则
iptables -t nat -C OUTPUT -d "${SRC_IP}/32" -p tcp --dport "$PORT" -j DNAT --to-destination "${DST_IP}:${PORT}" 2>/dev/null \
|| iptables -t nat -A OUTPUT -d "${SRC_IP}/32" -p tcp --dport "$PORT" -j DNAT --to-destination "${DST_IP}:${PORT}"

# 检查并添加 POSTROUTING MASQUERADE 规则
iptables -t nat -C POSTROUTING -d "${DST_IP}/32" -p tcp --dport "$PORT" -j MASQUERADE 2>/dev/null \
|| iptables -t nat -A POSTROUTING -d "${DST_IP}/32" -p tcp --dport "$PORT" -j MASQUERADE
done
done


# 旧式执行方法(临时手段)

# service iptables save
# iptables -t nat -I OUTPUT 1 -d 10.96.0.1/32 -p tcp --dport 443 -j DNAT --to-destination 10.0.0.30:6443
# iptables -t nat -I PREROUTING 1 -d 10.96.0.1/32 -p tcp --dport 443 -j DNAT --to-destination 10.0.0.30:6443

# iptables -t nat -A OUTPUT -p tcp -d 192.168.130.5 --dport 5473 -j DNAT --to-destination 10.0.0.5:5473
# iptables -t nat -A POSTROUTING -d 10.0.0.5 -p tcp --dport 5473 -j MASQUERADE

...
不展开

通过systemd持久化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat /etc/systemd/system/iptables-apiserver.service 
[Unit]
Description=Custom iptables NAT Rules
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/data/yunwei/iptables-apiserver.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable iptables-apiserver --now
CATALOG
  1. 1. iptables目的地址转换
  2. 2. 通过systemd持久化