前言
windows10下multipass启动的虚机设置静态ip
一、为什么需要这样做?
multipass在windows下(其他系统下表现也是这样)创建的虚机是随机分配的ip,ip段在hyper-v的虚拟交换机下。一旦虚机重启ip会发生变化,而很多时候我们使用虚机希望它的内网ip是固定的,这篇文章便是基于这个需求而写。
二、步骤
1.环境
windows10 专业版本,开启了hyper-v功能,multipass已经安装
2.创建虚机
$ multipass launch -n k3s -c 1 -m 2G -d 10G
$ multipass ls
3.创建虚拟交换机
Windows 搜索hyper-v管理器- > 打开 -> 点击虚拟交换机 -> 选择外部 -> 点击创建虚拟交换机
输入交换机名称 -> 选择外部网络(选择自己的网卡) -> 勾选 允许管理操作系统共享此网络适配器 -> 点击确定
4.为虚机添加虚拟交换机
返回管理器主界面 -> 选择创建的虚机 -> 选择设置 -> 打开后选择添加硬件 -> 选择网络适配器
选择刚刚新建的虚机交换机(我已经建好,n-switch) -> 点击确定
5.在虚机中配置网络
首先在windows中运行cmd -> ipconfig /all -> 查看刚刚所建网络适配器相关属性
记住 IPV4 地址、子网掩码、默认网关 3个值,后续要用
进入虚机
$ multipass shell k3s
切换到root用户,查看ip addr
$ ip addr
此时能看到多出一个网卡,处于down状态
开启网卡
$ ip link set eth1 up
修改/etc/netplan/xx-cloud-init.yaml 也可能是别的名字,但基本只是xx的值不同
$ nano /etc/netplan/xx-cloud-init.yaml
修改完成后
ctrl + o 保存,然后直接回车确认保存名,再ctrl+x退出
应用配置
$ netplan apply /etc/netplan/xx-cloud-init.yaml
应用配置时,会显示权限过于开放的警告,如果介意可以在编辑之前修改文件权限为600
$ chmod 600 /etc/netplan/xx-cloud-init.yaml
修改成功时,连接会直接断开
在windows下查看虚机状态
$ multipass ls
此时能看到刚刚添加的ip,可以尝试重启虚机后观察,ip不会发生改变
再次进入虚机,尝试ping www.baidu.com和宿主机ip,均可通,成功
6.为虚机配置ssh登录(可选)
首先使用 multipass shell k3s
登录虚机
然后执行passwd命令分别为 ubuntu用户(默认) 和 root用户添加密码
$ sudo passwd ubuntu
New password:
两次输入密码后设置密码成功
第二步,修改ssh配置
$ sudo vim /etc/ssh/sshd_config
找到 PasswordAuthentication 和 PermitRootLogin 打开注释并将他们设置为 yes
也可以直接
$ sudo vim /etc/ssh/sshd_config.d/60-cloudimg-settings.conf
将两个值写入其中并保存
完成后,重启ssh服务
sudo service ssh restart
完成所有步骤后验证一下,退出到宿主机并使用ssh登录
ssh ubuntu@yourip
输入之前设置的ubuntu密码,成功登录即可
不想每次输入密码?
那就首先在windows宿主机生成你的公钥
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
然后
$ ssh-copy-id ubuntu@yourip
输入密码后回车
之后就可以直接使用 ssh ubuntu@yourip 直接登录不用输入密码了
总结
写这篇文章是因为最近搭建了一个本地的k3s集群,完成后发现master节点ip会随着虚机重启而改变,导致agent节点失联,于是就研究了下如何配置静态ip,multipass官方文档中也有例子,不过是针对的Linux,而我的主要生产力在windows上,所以折腾了一番