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 集群完全健康。

相关推荐
ShirleyWang0128 小时前
让headlamp控制台能访问
linux·服务器·python·k8s·k3s
spider_xcxc11 小时前
K8s 部署学习笔记
docker·容器·kubernetes·云计算·k8s
ShirleyWang01212 小时前
Day02 K3s NGF(Nginx Gateway Fabric)单 Worker 环境网关更新与故障处置 SOP
linux·服务器·python·k8s·k3s
ShirleyWang01213 小时前
DAY01 K3s 私有化部署排障复盘与 SOP
linux·服务器·k8s·k3s·企业部署
XUHUOJUN4 天前
AKS 不是安装在 Windows Server 上,而是运行在 Windows Server 之上的 Azure 平台能力
windows·架构·k8s·azure local·azure stack
Geek-Chow4 天前
Connecting kubectl to a Private EKS Cluster Over an Internal Domain
kubernetes·k8s·aws
spider_xcxc6 天前
Docker Compose 容器通信详解:同一个 Compose 文件才能互通吗?
docker·容器·k8s·容器化·容器网络
欢醉11 天前
k8s调用服务异常cannot allocate memory
kubernetes·k8s
万里侯14 天前
GitOps 漂移检测:集群里改了配置,Git 还以为一切正常
微服务·容器·k8s
spider_xcxc15 天前
云上网络基石(阿里云):深入解读阿里云VPC及其应用生态
网络·阿里云·云计算·k8s·运维开发·虚拟化