CentOS7 + VMware 搭建 K3s 集群遇到的网络问题全记录与解决方案

一、实验环境

  • 虚拟化平台:VMware Workstation
  • 系统版本:CentOS 7 (Core)
  • 网络模式:VMware NAT
  • 集群组成:
    • hadoop100:Master 节点
    • hadoop101:Worker 节点
    • hadoop102:Worker 节点(问题节点)

三台虚拟机均使用静态 IP:

复制代码
192.168.10.100   master
192.168.10.101   worker1
192.168.10.102   worker2
网关:192.168.10.2

二、问题现象

  1. 在搭建 K3s 时,hadoop102 节点无法解析域名:

    复制代码
    ping rancher-mirror.cn
    ping: rancher-mirror.cn: Name or service not known

    但可以 ping 外网 IP:

    复制代码
    ping 8.8.8.8 正常
  2. 查看 NetworkManager:

    复制代码
    systemctl status NetworkManager
    Active: inactive (dead)

    → 使用的是传统 network 服务。

  3. DNS 配置:

    ini 复制代码
    /etc/sysconfig/network-scripts/ifcfg-ens33
    BOOTPROTO=static
    IPADDR=192.168.10.102
    GATEWAY=192.168.10.2
    DNS1=223.5.5.5
    DNS2=114.114.114.114

    即便修改 /etc/resolv.conf,依旧无法解析域名。

  4. dig 命令测试:

    复制代码
    dig rancher-mirror.cn @223.5.5.5
    ;; status: NXDOMAIN

    → 域名确实不存在,但后来对任何域名都超时,说明 DNS 链路异常。


三、排查思路

1️⃣ 确认域名状态

rancher-mirror.cn 已经下线(返回 NXDOMAIN)。

安装脚本应改为:

bash 复制代码
curl -sfL https://get.k3s.io | INSTALL_K3S_MIRROR=cn sh -

或使用阿里云镜像:

bash 复制代码
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | sh -

2️⃣ 确认网络正常

ping 8.8.8.8 正常 → 网络没问题。

3️⃣ 确认 DNS 配置生效

cat /etc/resolv.conf 能看到正确的 nameserver;

dig aliyun.com @223.5.5.5 超时,说明 DNS 请求根本发不出去。

4️⃣ VMware NAT 网络排查

VMware NAT 模式下,所有虚拟机的 DNS 请求都通过宿主机的
"VMware NAT Service" 转发。

如果该服务异常,虚拟机就能上网但无法解析域名。

验证:

bash 复制代码
dig aliyun.com @192.168.10.2
;; connection timed out

→ 说明 NAT DNS 转发彻底失效。


四、最终发现问题根因

VMware NAT Service 与 DHCP Service 异常,导致虚拟机无法通过宿主机 NAT

转发 DNS 请求(UDP 53/TCP 53 均超时)。


五、解决步骤

✅ 1. 重启 VMware NAT 与 DHCP 服务

在宿主机上执行(Windows):

bash 复制代码
net stop "VMware NAT Service"
net start "VMware NAT Service"
net stop "VMware DHCP Service"
net start "VMware DHCP Service"

或在"服务 (services.msc)"中手动重启这两个服务。

重启后立刻测试:

bash 复制代码
dig aliyun.com @223.5.5.5

输出正常(返回 IP),说明 DNS 功能恢复。


✅ 2. 重启 k3s-agent

在 hadoop102 上:

bash 复制代码
sudo systemctl restart k3s-agent

✅ 3. 删除卡住的 Pod,让它重新创建

在主节点 hadoop100 上:

bash 复制代码
sudo k3s kubectl -n kube-system delete pod svclb-traefik-de235f4a-z9hqt

✅ 4. 验证恢复结果

bash 复制代码
sudo k3s kubectl -n kube-system get pods -o wide | egrep 'flannel|traefik|svclb'

输出:

复制代码
svclb-traefik-de235f4a-4lfbh  2/2 Running  0  15s  10.42.2.209  hadoop102

→ 表示 DNS、镜像拉取、flannel 网络全部恢复正常。


六、问题扩展与原因分析

原因 解释
NAT 服务异常 负责转发虚拟机 DNS、HTTP、HTTPS 流量;失效后 UDP 53 不通
仅 102 出问题 VMware NAT 为每个 VM 维护独立 NAT 表,有可能某台 VM 缓存异常
静态 IP 配置 没走 DHCP,未自动获取 NAT 提供的 DNS 地址
表面能上网但解析失败 因为 NAT 只转发部分端口(80/443),53 被阻断

七、替代方案:桥接模式(推荐长期使用)

如果不想依赖 VMware NAT,可以直接把虚拟机改成 桥接 (Bridged) 模式:

节点 IP 网关 DNS


hadoop100 192.168.1.100 192.168.1.1 192.168.1.1

hadoop101 192.168.1.101 192.168.1.1 192.168.1.1

hadoop102 192.168.1.102 192.168.1.1 192.168.1.1

这样虚拟机使用真实局域网 DNS,不再受 VMware NAT 影响。


八、验证结果

最终集群状态:

bash 复制代码
sudo k3s kubectl get nodes -o wide

输出:

复制代码
NAME         STATUS   ROLES                  AGE   VERSION           INTERNAL-IP
hadoop100    Ready    control-plane,master   4d    v1.33.5+k3s1      192.168.10.100
hadoop101    Ready    <none>                 3d    v1.33.5+k3s1      192.168.10.101
hadoop102    Ready    <none>                 1d    v1.33.5+k3s1      192.168.10.102

九、总结经验

问题 原因 解决方案
ping 域名失败但 ping IP 正常 DNS 无法解析 检查 resolv.conf / NAT 服务
rancher-mirror.cn NXDOMAIN 官方域名已失效 改用 https://get.k3s.io
svclb-traefik 卡在 ContainerCreating flannel 未启动 / 镜像拉取失败 修复 DNS 或配置国内镜像
dig 超时 VMware NAT 转发挂 重启 VMware NAT & DHCP 服务
节点无法解析但其他正常 (错误码 102) 单节点 NAT 状态损坏 重启 NAT 服务或改桥接模式

🔧 十、最佳实践建议

  1. 开启 VMware NAT/DHCP 自动启动

    bash 复制代码
    sc config "VMware NAT Service" start= auto
    sc config "VMware DHCP Service" start= auto
  2. 保留国内镜像源/etc/rancher/k3s/registries.yaml 配置:

    yaml 复制代码
    mirrors:
      "docker.io":
        endpoint:
          - "https://docker.m.daocloud.io"
          - "https://dockerpull.com"
          - "https://registry-1.docker.io"
  3. 时间同步

    bash 复制代码
    sudo yum -y install ntpdate
    sudo ntpdate ntp.aliyun.com
  4. 查看系统日志

    bash 复制代码
    sudo journalctl -u k3s-agent -n 100

✅ 十一、最终结论

问题根因: VMware NAT DNS 转发异常,导致静态 IP

虚拟机无法解析外网域名。
核心解决方案: 重启 VMware NAT/DHCP 服务 或 改用桥接模式。
最终结果: 所有节点恢复正常,K3s 集群完全健康。

相关推荐
nvd112 天前
GKE 部署 - 从`kubectl` 到 Helm Chart 的演进
k8s
虚伪的空想家3 天前
记录次etcd故障,fatal error: bus error
服务器·数据库·k8s·etcd
岚天start5 天前
KubeSphere在线安装单节点K8S集群
docker·容器·kubernetes·k8s·kubesphere·kubekey
小坏讲微服务7 天前
五分钟使用 Docker-compose搭建 Redis 8.0 中间件
运维·redis·docker·中间件·容器·kubernetes·k8s
退役小学生呀11 天前
二十二、DevOps:基于Tekton的云原生平台落地(三)
linux·云原生·容器·kubernetes·k8s·devops·tekton
cc202292811 天前
ingress概念和实际运用
容器·kubernetes·k8s
The god of big data11 天前
Metrics Server 完整配置安装手册
云原生·云计算·k8s
虚伪的空想家13 天前
实战:Flannel为网络CNI底座的K8S接入Cilium CNI
网络·容器·kubernetes·k8s·flannel·cni·cilium