Chapter 18 · Important Service Daemons

第 18 章 重要服务守护进程

Proxmox VE 的核心守护进程 :pvedaemon、 pveproxy、 pvestatd、 spiceproxy、 pvescheduler 的职责、访问控制、 TLS、证书、压缩、真实客户端 IP 日志及 worker 数调节。

18.重要服务守护进程Important Service Daemons

18.1.pvedaemon —— PVE API 守护进程

此守护进程在 127.0.0.1:85 上暴露完整 PVE API, 以 root 运行 , 有权做所有特权操作。

NOTE

只监听本地地址 , 外部不可直接访问 —— 对外由 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=denyPOLICY=allow
仅 Allow 命中allowallow
仅 Deny 命中denydeny
都未命中denyallow
Allow & Deny 都命中denyallow

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 需附接口名
NOTE

集群节点可能跨子网互访 pveproxy —— 集群系统上 不建议 设 LISTEN_IP。

应用变更需重启节点或这两服务:

systemctl restart pveproxy.service spiceproxy.service
WARN

与 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
NOTE

除非有特殊理由 , 不建议 手工调整 TLS 版本。

18.2.5.Diffie-Hellman 参数

在 /etc/default/pveproxy 设 DHPARAMS 指到 PEM 格式 DH 参数文件:

DHPARAMS="/path/to/dhparams.pem"

未设则用内置 skip2048 参数。

NOTE

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"
NOTE

内置 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。