18.重要服务守护进程Important Service Daemons
18.1.pvedaemon —— PVE API 守护进程
此守护进程在 127.0.0.1:85 上暴露完整 PVE API, 以 root 运行 , 有权做所有特权操作。
只监听本地地址 , 外部不可直接访问 —— 对外由 pveproxy 暴露 API。
18.1.1.Worker 数量
pvedaemon 把请求委派给 worker 进程 —— 默认 3 个 , 多数负载够用。自动化重负载 / 高并发 API 调用出现慢响应或超时时 , 可在 /etc/default/pvedaemon 设 MAX_WORKERS:
MAX_WORKERS=5
worker 越多 CPU 用量越高。取值必须大于 0 且小于 128。 pveproxy 有相同设置。
18.2.pveproxy —— PVE API 代理
以 HTTPS 在 TCP 8006 暴露完整 PVE API , 以 www-data 运行 , 权限很有限 —— 需要更高权限的操作会转发到本地 pvedaemon。指向其他节点的请求会自动转到那些节点 —— 连任一 PVE 节点即可管理整个集群。
18.2.1.基于主机的访问控制
可用类 apache2 的 ACL。从 /etc/default/pveproxy 读取 , 例如:
ALLOW_FROM="10.0.0.1-10.0.0.5,192.168.0.0/22" DENY_FROM="all" POLICY="allow"
IP 可用 Net::IP 支持的任何语法表述 —— all = 0/0 与 ::/0(全 IPv4 + IPv6)。默认 policy 是 allow。
| 匹配 | POLICY=deny | POLICY=allow |
|---|---|---|
| 仅 Allow 命中 | allow | allow |
| 仅 Deny 命中 | deny | deny |
| 都未命中 | deny | allow |
| Allow & Deny 都命中 | deny | allow |
18.2.2.监听 IP
默认 pveproxy 与 spiceproxy 监听通配地址 , 同时接受 IPv4 与 IPv6。在 /etc/default/pveproxy 设 LISTEN_IP 可绑定到特定 IP(该 IP 须已配好)。
内核参数 net.ipv6.bindv6only 设为非默认的 1 会让守护进程只接 IPv6, 且往往引起其他问题 —— 建议要么改回默认 , 要么把 LISTEN_IP 设为 0.0.0.0(只允 IPv4)。 LISTEN_IP 常用于把 socket 限到内部接口 , 减少对公网暴露:
LISTEN_IP="192.0.2.1" # IPv4 LISTEN_IP="2001:db8:85a3::1" # IPv6 LISTEN_IP="fe80::c463:8cff:feb9:6a4e%vmbr0" # link-local 需附接口名
集群节点可能跨子网互访 pveproxy —— 集群系统上 不建议 设 LISTEN_IP。
应用变更需重启节点或这两服务:
systemctl restart pveproxy.service spiceproxy.service
与 reload 不同 , restart pveproxy 会中断某些长 worker(如正在运行的客户机控制台 / shell)—— 请在维护窗口内做。
18.2.3.SSL 加密套件
在 /etc/default/pveproxy 用 CIPHERS(TLS ≤ 1.2)与 CIPHERSUITES(TLS ≥ 1.3)定义。默认:
CIPHERS="ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256" CIPHERSUITES="TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
完整选项见 openssl 的 ciphers(1)。还可控制是否由客户端选择套件(默认选双方都支持的列表第一个):
HONOR_CIPHER_ORDER=0
18.2.4.支持的 TLS 版本
SSLv2 与 v3 对 pveproxy 无条件禁用。较新 OpenSSL 默认已禁用 1.1 以下 —— pveproxy 尊重此(见 /etc/ssl/openssl.cnf)。如需禁 1.2 / 1.3:
DISABLE_TLS_1_2=1 DISABLE_TLS_1_3=1
除非有特殊理由 , 不建议 手工调整 TLS 版本。
18.2.5.Diffie-Hellman 参数
在 /etc/default/pveproxy 设 DHPARAMS 指到 PEM 格式 DH 参数文件:
DHPARAMS="/path/to/dhparams.pem"
未设则用内置 skip2048 参数。
DH 参数仅当协商出用 DH 密钥交换的套件时才用。
18.2.6.备用 HTTPS 证书
可换成外部或 ACME 获取的证书。 pveproxy 若 /etc/pve/local/pveproxy-ssl.pem + pveproxy-ssl.key 存在则用之 , 否则回退 pve-ssl.pem + pve-ssl.key。私钥 不可 带口令。可用 TLS_KEY_FILE 覆盖私钥位置:
TLS_KEY_FILE="/secrets/pveproxy.key"
内置 ACME 集成 不 尊重此设置。详情见主机系统管理章节。
18.2.7.响应压缩
默认对可压缩内容启用 HTTP 级 gzip 压缩(客户端支持时)。可禁:
COMPRESSION=0
18.2.8.真实客户端 IP 日志
默认日志记录直接请求方 IP —— pveproxy 前有代理时 , 希望记录原始客户端 IP 而非代理 IP。设要读取的 HTTP 头名:
PROXY_REAL_IP_HEADER="X-Forwarded-For"
该头的无效值会忽略。默认对所有入站请求都处理此头;可用 PROXY_REAL_IP_ALLOW_FROM 只信任指定代理:
PROXY_REAL_IP_ALLOW_FROM="192.168.0.2"
PROXY_REAL_IP_ALLOW_FROM 支持与 ALLOW_FROM / DENY_FROM 类似的值 —— Net::IP 语法 ; all = 0/0 + ::/0。
18.2.9.Worker 数量
同 pvedaemon —— 默认 3 , 可在 /etc/default/pveproxy 设 MAX_WORKERS, 范围 1 – 127。
18.3.pvestatd —— PVE 状态守护进程
定期查询 VM / 存储 / 容器状态 , 把结果发给集群所有节点。
18.4.spiceproxy —— SPICE 代理
SPICE(Simple Protocol for Independent Computing Environments)是开源远程计算方案 —— 让客户端访问远端显示与设备(键盘 / 鼠标 / 音频);主要场景是远程访问 VM / 容器。本守护进程监听 TCP 3128, 实现 HTTP 代理把 SPICE 客户端的 CONNECT 请求转到正确的 PVE VM。以 www-data 运行 , 权限很有限。
18.4.1.基于主机的访问控制
可配类 apache2 的 ACL —— 读自 /etc/default/pveproxy, 详见上文 pveproxy 文档。
18.5.pvescheduler —— PVE 调度守护进程
按计划启动作业 , 如复制与 vzdump 任务。 vzdump job 配置取自 /etc/pve/jobs.cfg。