K8S部署之VMWare网络拓扑踩坑
背景
知乎上最近发现一篇好文 图解K8S(01):基于Ubuntu 20.04部署1.23版K8S集群,想着之前 K8S 部署一直不成功,那么就照着这篇文章中说的试一试。结果在实验时遇到了 VMWare 虚拟网卡和虚拟网络的坑,经过仔细研究和查找资料终于大致得到解决,所以就通过这篇文章记录一下,给自己也是给后来人提个醒。
VMWare 虚拟网络
VMWare 安装完成之后会安装两个虚拟网卡,分别是 vmnet1 和 vmnet8,前者用于 Host-Only 网络模式,后者用于 NAT 网络模式。本文主要关注 vmnet8 的配置。
打开 VMware,通过“编辑”菜单下的“虚拟网络编辑器”打开“虚拟网络编辑器”对话框。可以看到 VMnet8 用于 NAT 模式,同时可以设置该网卡的NAT选项和DHCP选项。
根据文章的描述,将VMnet8的子网IP修改为 172.20.20.0
,子网掩码为 255.255.255.0
。单击“NAT设置”,将网关IP改为172.20.20.1
。单击“DHCP设置”,将IP地址池范围改为 172.20.20.2
到 172.20.20.254
。保存设置并安装 Ubuntu Server 20.04。
安装 Ubuntu Server 20.04 时遇到的网络问题
安装Ubuntu Server 20.04 的时候发现,无论设置为DHCP还是设置静态IP,均无法连接到软件库镜像。一开始以为是DNS问题,将DNS设置为公网DNS 223.5.5.5
,无效。后来发现无法Ping通网关 172.20.20.1
。通过网络搜索无果,反复确认 /etc/netplan/00-installer-config.yaml
文件的配置没有错误。由于无法连接外网,因此无法在服务器上安装任何软件。
紧接着发现原来安装的Windows虚拟机也出现了无法上网的现象,说明和Ubuntu系统无关,是虚拟网络的问题。
解决方法和解释
经过搜索以后,终于发现问题原因了:在宿主机的网络适配器选项里,找到VMware Virtual Ethernet Adapter for VMnet8,检查IPv4设置,发现它的IP地址为172.20.20.1
,刚好和VMWare设置的网关一致。本来一直以为是宿主机本身通过VMnet8网卡充当网关的角色,但其实不是这样,宿主机的VMnet8网卡只是用于和虚拟机通信,而它们需要通过另一个网关地址来交换数据。因此,如果将网关地址设置为和宿主机VMnet8一样,那么相当于把网络中的一台主机当成了网关,自然无法访问外网。
解决方法也很简单,把VMWare中VMnet8的网关地址改为 172.20.20.2
,DHCP地址池也做相应调整即可。重启虚拟机后发现网络连接问题解决。
总结
VMware的VMnet8虚拟网卡本身起到了网关的作用,而并非原来理解的宿主机作为网关。因此,如果把网关地址填成了宿主机的地址,就会出现找不到网关的错误,也会使得虚拟机无法访问外网。