背景

k8s需要用到科学上网,以前的做法是在宿主机搭建一个代理,虚拟机通过代理上网,如果新增一个虚拟机就要配置,相对比较麻烦。更好的是k8s集群一个网络,通过一个路由器代理实现科学上网,新增虚拟机只需要加入这个网络即可。

实现方式

Hyper-v和LEDE固件(KoolShare改版

本身k8s集群就是搭建在windows上,而且Hyper-v相对VMware比较轻量,操作也便捷。

实现原理

路由器

路由器网线插口分两种,一种是WAN口一般只有一个,一种是LAN口有若干个。WAN口用来接入网络,一般连接网络猫或者交换机,LAN口用来设备接入,连接电脑或者服务器。

LEDE

Linux嵌入式开发环境项目(Linux Embedded Development Environment,LEDE),是路由器固件项目OpenWRT的一个复刻分支项目,并继承原来OpenWRT的开发目标。2018年1月 LEDE 和 OpenWRT 正式宣布合并,合并后的项目使用 OpenWrt的名字。


实现原理就是在电脑里装一个LEDE虚拟机,分配一张网卡作为WAN口连接外部网络,LAN口开放给宿主机和其他虚拟机。
这样配置好后,相当于外部多了一个软路由(LEDE虚拟机),宿主机和其他虚拟机都是通过软路由连接外网,而外部网络也是先接入软路由。

LEDE虚拟机安装

  1. Win10开启Hyper-v功能(应该只Windows10专业版企业版才会有),确认WIN10版本后,在启用或关闭Windows功能中勾选Hyper-V就好了,应该会重启。

  2. 在KoolShare论坛下载镜像-下载地址

    文件 大小 更新时间
    .. - 2020-05-08 16:51:09
    openwrt-koolshare-mod-v2.31-r10822-50aa0525d1-x86-64-combined-squashfs.img.gz 40.63MB 2019-09-30 13:19:44
    openwrt-koolshare-mod-v2.31-r10822-50aa0525d1-x86-64-combined-squashfs.vmdk 40.50MB 2019-09-30 13:19:45
    openwrt-koolshare-mod-v2.31-r10822-50aa0525d1-x86-64-uefi-gpt-squashfs.img.gz 41.13MB 2019-09-30 13:19:45
    openwrt-koolshare-mod-v2.31-r10822-50aa0525d1-x86-64-uefi-gpt-squashfs.vmdk 41.62MB 2019-09-30 13:19:45
    openwrt-koolshare-mod-v2.34-r13929-b0a6daaa6b-x86-64-generic-squashfs-combined-efi.vmdk 48.44MB 2020-04-13 22:31:56
    openwrt-koolshare-mod-v2.34-r13929-b0a6daaa6b-x86-64-generic-squashfs-combined.vmdk 47.94MB 2020-04-13 22:31:56

    选择openwrt-koolshare-mod-v2.31-r10822-50aa0525d1-x86-64-uefi-gpt-squashfs.vmdk版本

  3. 上面之所以选择虚拟机或PE下写盘专用的文件,是因为Hyper-v文件拓展名是vhdx,这里没提供,只能通过工具转换,vmdk是VMware虚拟机的文件拓展名。需要下载一个软件StarWind V2V Converter-下载地址
    转换步骤

    • Local file
    • 选择从koolshare下载的文件
    • Local file
    • VHD/VHDX
    • 这一步比较关键VHDX growable image和VHDX pre-allocated image这两个选项都是可以的,区别在于虚拟硬盘的空间是否可以增长。但是另外两个选项就不可以选了,我在安装过程中发现似乎只可以使用VHDX的虚拟硬盘。
  4. 新建虚拟机
    这一步比较简单,正常新建并使用已有虚拟硬盘的创建方式就可以了。
    注意

    • 如果下载的是uefi版镜像或虚拟硬盘,自然选择第二代启动方式。
    • 第二代启动方式情况下,先不急于启动虚拟机,在虚拟机设置 > 安全 > 启用安全启动的选项勾掉。
  5. 启动虚拟机,加载完之后在页面上回车一下,如果出现OPENWRT的Logo说明安装成功了。

配置虚拟机

内部网络

新建一个内部虚拟网络交换机,作为LEDE虚拟机的的LAN口,然后所有的虚拟机和宿主机连接这块虚拟机网卡。

外部网络

新建一个外部虚拟网络交换机,如果是多网卡就选择接入网络的那块,如果是单网卡就默认好了,取消勾选允许管理操作系统共享此网络适配器,意思是这个网卡不给宿主机共享网络,这时候网络会断开。

虚拟机网卡连接步骤

  • LEDE虚拟机设置里,依次添加内部网卡和外部网卡。

  • 添加好后在虚拟机上的硬件名称叫网络适配器,在这两个适配器的高级功能里勾选上启用MAC地址欺骗。

  • 重启LEDE虚拟机,然后在本地电脑的网络适配器中找到上面新建的内部网络手动分配IP地址。我分配的信息如下:

    IP地址 192.168.1.2
    子网掩码 255.255.255.0
    默认网关 192.168.1.1
    首选DNS服务器 192.168.1.1
  • 如果不出问题的话,现在WIN10的网络和Internet的状态中应该可以看到连接了上面创建的内部网卡。

配置软路由

在宿主机浏览器里输入192.168.1.1即可访问软路由后台,密码为koolshare,进入之后将WAN口的桥接选项勾掉。

总结

到这里网络所有配置就都完成了。所有虚拟机都可以配置内部网卡然后经由LEDE虚拟机访问外网,这样所有虚拟机同属于同一网段,不再因外部环境变化而受到影响。剩下只需要在路由器内部搭建科学上网和路由规则即可。