之前许多年一直用proxmox ve,确实不错,功能完备。

缺点就是自身占用内存1g多,在配置较低的机器上(比如我之前说的虚拟机开虚拟机)就难受了。

 

所以我这切换为手工管理,但是又没有一个很方便的管理途径,virsh命令的参数都好几屏,真心记不住,再加上一些使用时需要留意的细节,也是有些难受。

这个周末在找方便管理的工具,搞来搞去都大同小异,而且这个比较冷门,许多项目都停更十几甚至二十年了。。。

 

最终找到一个cockpit,看起来还算活跃,试用了一下还可以,虽然不及proxmox ve那么完善,但是个人使用足够。

 

既然动手写了,那就从0开始吧,首先安装虚拟机运行需要的东西,debian系统:

apt install -y qemu-kvm libvirt-daemon-system virtinst libvirt-clients bridge-utils

我这是用宿主机做dnat和MASQUERADE的:

#共享上网
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

#下面这个必须
iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j MASQUERADE

#映射虚拟机的3389给外面
iptables -t nat -A PREROUTING -d 宿主机ip -p tcp --dport 55888 -j DNAT --to 虚拟机ip:3389

然后是网络配置/etc/network/interface

auto lo
iface lo inet loopback

iface enp6s16 inet manual

auto vmbr0
iface vmbr0 inet static
        address IPv4cidr
        gateway ipv4网关
        bridge-ports enp6s16
        bridge-stp off
        bridge-fd 0
        dns-nameservers 1.1.1.1 8.8.8.8
        #下面这行可选,在某些虚拟机环境需要
        up ip link set vmbr0 address fa:16:3e:61:b9:a7

iface vmbr0 inet6 static
        address  ipv6cidr
        gateway  ipv6网关
        bridge-ports enp6s16
        bridge-stp off
        bridge-fd 0


auto vmbr0:0
iface vmbr0:0 inet static
        address 172.16.0.1/16l

里面设置mac地址的那个,是因为某些环境在网关做了ip和mac绑定,所以不加这一行就会全部断网,比如ovh的虚拟机环境,把地址替换为对外网卡的mac。

到这里就完成了,重启一下,如果网络没断,则虚拟机的运行环境就完成了。当然,你需要确定bios里面打开了硬件虚拟化的设置,一般都是开的。如果重启了连不上,那就自行排查吧。。。

 

===========

补充一下,我记得有个virtinst的命令要执行一下,但是不执行也是可以的,我后续的机器是没有执行的。

下面这部分根据你自己喜好来,这是我存放iso的路径:

mkdir -p /iso
chmod -R 644 /iso
chown -R root:libvirt /iso
chmod o+x /iso
chown :libvirt /iso
chmod g+x /iso
chmod 755 /iso
ln -s /iso/ /root/iso

==============

 

 

然后是管理界面。

apt install -y cockpit cockpit-machines

然后如果你需要直接用root登录,需要编辑这个文件,把root注释掉:

nano /etc/cockpit/disallowed-users

安全考虑,这里需要改动一下绑定的地址:

nano /usr/lib/systemd/system/cockpit.socket

对应行改为

ListenStream=127.0.0.1:9090

最后重载、重启相关服务:

systemctl daemon-reload
systemctl restart cockpit.socket
systemctl restart cockpit

我是用nginx进行反代的,配置如下:

server {
    # 监听公网 HTTPS 端口(443)
    listen 443 ssl;
    # 若需要 IPv6,添加:
    listen [::]:443 ssl;
    http2 on;

    # 你的域名(或服务器公网 IP),例如 cockpit.tingtao.org
    server_name 你的域名 ;

    # SSL 证书路径(替换为你的证书文件)
    ssl_certificate 证书 ;
    ssl_certificate_key 证书 ;

    # SSL 安全配置(推荐)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_stapling on;
    ssl_stapling_verify on;

    # 反向代理到 Cockpit 本地监听地址
    location / {
        # 代理目标(Cockpit 本地地址)
        proxy_pass https://127.0.0.1:9090;

        # 保留客户端 IP 和请求头
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 支持 WebSocket(Cockpit 依赖 WebSocket 实时交互)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # 超时设置(适应长连接)
        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
    }
}

# 可选:将 HTTP 自动重定向到 HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name 你的域名 ;
    return 301 https://$host$request_uri;
}

 

如果nginx重启没问题的话,就可以浏览器来进行管理了,还是比较方便的:

 

目前发现不太方便的地方:

1,硬盘扩容需要自己去执行命令

2,我是自己手工创建的网桥,这部分没有接受cockpit管理,因为不方便关闭现有虚拟机,所以不知道从这个界面创建网桥是怎么回事。不过这个不影响使用

3,快照的创建必须在虚拟机关闭的状态才能执行。

4,还有些细节,想不起来了

 

总体来说算是很不错的,虽然比pve差不少。

开盘了,回头继续补充

作者 听涛

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注