适用场景:
- Ubuntu 20.04 / 22.04
- 虚拟机(VMware / Hyper-V / VirtualBox)
- 只有一个网卡(eth0 / ens / enx...)
- 需要在 固定 IP(如 10.10.10.20) 和 DHCP(如 192.168.x.x,手机热点) 之间切换
一、问题背景
在做 Kubernetes 主从验证时,我的环境是:
- 一台 Ubuntu 物理服务器(Master)
- 一台 Windows 上的 Ubuntu 虚拟机(Worker)
- 虚拟机只有一个网卡
正常情况下我给虚拟机配置的是固定 IP:
10.10.10.20/24
但在以下场景中经常会遇到问题:
- 服务器没外网
- 拉不到 K8s / Calico / CoreDNS 镜像
- 临时需要用 手机 USB 热点
结果就是:
插上手机热点后,IP 变成了
192.168.42.x重启后又变回
10.10.10.20Kubernetes 通信直接炸掉 😅
二、核心原理(一定要懂)
1️⃣ 192.168.x.x 是怎么来的?
不是系统乱配的,而是 DHCP
- 手机热点 = DHCP Server
- Ubuntu = DHCP Client
- 一插热点 → 自动分配
192.168.42.x
👉 这是临时 IP
2️⃣ 10.10.10.20 是什么?
这是你通过 netplan 手动配置的静态 IP
yaml
dhcp4: no
addresses:
- 10.10.10.20/24
👉 这是固定 IP
3️⃣ 为什么会"同时存在两个 IP"?
因为你做过其中一件事:
- 开过
dhcp4: true /etc/netplan里有多个.yaml- 没清理旧配置
于是结果变成:
text
eth0:
10.10.10.20 (静态)
192.168.42.89 (DHCP)
⚠️ 对 Kubernetes 来说,这是灾难配置
三、正确的做法(强烈推荐)
原则一句话:
同一时间,只能用一种方式:要么 DHCP,要么静态 IP
四、方案一:切到手机热点(DHCP)
适合:
- 拉镜像
- 临时上网
- 不跑 K8s
1️⃣ 删除所有旧 netplan 配置
bash
sudo rm -f /etc/netplan/*.yaml
2️⃣ 新建 DHCP 配置(只有一个文件)
bash
sudo tee /etc/netplan/01-dhcp.yaml <<EOF
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: true
EOF
⚠️ 如果网卡不是 eth0,用
ip -br a查看实际名称
3️⃣ 修复权限(非常重要)
bash
sudo chmod 600 /etc/netplan/01-dhcp.yaml
4️⃣ 应用配置
bash
sudo netplan apply
5️⃣ 验证
bash
ip a
你应该看到类似:
text
inet 192.168.42.x/24
五、方案二:切回固定 IP(10.10.10.20)
适合:
- Kubernetes 主从通信
- 内网集群
- 稳定运行
1️⃣ 删除 DHCP 配置
bash
sudo rm -f /etc/netplan/01-dhcp.yaml
2️⃣ 写固定 IP 配置
bash
sudo tee /etc/netplan/01-static.yaml <<EOF
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses:
- 10.10.10.20/24
gateway4: 10.10.10.1
nameservers:
addresses:
- 8.8.8.8
- 114.114.114.114
EOF
3️⃣ 修复权限
bash
sudo chmod 600 /etc/netplan/01-static.yaml
4️⃣ 应用配置
bash
sudo netplan apply
5️⃣ 验证
bash
ip a
应只看到:
text
inet 10.10.10.20/24
六、常见坑总结(血泪经验)
❌ 同时存在多个 netplan 文件
bash
ls /etc/netplan
👉 只保留一个
❌ 文件权限不对
text
Permissions too open
解决:
bash
sudo chmod 600 /etc/netplan/*.yaml
❌ 同时开启 DHCP + 静态 IP
👉 表面能用
👉 K8s 一定出问题
七、和 Kubernetes 的关系(重点)
| 场景 | 是否适合 |
|---|---|
| 192.168.x(热点) | ❌ 不适合集群 |
| 10.10.10.x(静态) | ✅ 强烈推荐 |
| IP 变化 | ❌ kubelet 会反复重连 |
| 固定 IP | ✅ Node 稳定 Ready |
八、最终结论
手机热点 IP 是临时的,不会持久
netplan 写死的 IP 才是"开机必定生效的"
只要你:
/etc/netplan里只有一个文件dhcp4: no- 写死
10.10.10.20
那么:
✅ 重启多少次,IP 都不会变