跳转到内容

串行控制台

于 2026-07-28 从本部署的某个 CE 上采集。sitecli/capture-manifest.json 记录了采集自哪个节点,scripts/capture-sitecli.sh --check 会针对运行中的 CE 重新校验命令接口。

Azure 串行控制台通过 Azure 平台连接到节点的模拟串行端口。它不会穿越 F5 分布式云控制平面、 节点的数据平面,或任何由节点控制的网络路径 —— 这正是它在其他一切手段都失效时仍然可用的原因。

当某个 CE 从未启动成功时使用它:注册失败、站点在租户中不存在,或节点已启动但没有出口路由。 在所有这些情况下,调试 API 都没有可用于中继的隧道。SSH 在注册失败后仍然可用,但前提是其密钥已在首次引导时写入,且你能从 VNet 内部访问节点的内部地址 —— 对于一个你初次接触的节点来说,这两点都不成立。

如果节点还有任何可用的网络路径,请先尝试 站点控制台:它同样能在注册失败后使用、 不需要密钥,也不会把已经在查看该节点的人挤下线。串行控制台是当网络路径本身就是故障所在时, 你所剩下的唯一手段。

Azure 要求虚拟机启用引导诊断,才会为其连接串行控制台。 该功能由 terraform/modules/ce-node 启用:

boot_diagnostics {}

空块表示选择由 Azure 托管的存储,因此不存在需要自行管理的诊断存储账户、生命周期策略或访问密钥。 在节点上确认:

Terminal window
az vm show -g <resource-group> -n <vm-name> --query diagnosticsProfile
{ "bootDiagnostics": { "enabled": true } }

连接需要交互式会话,但判断它是否能够连接只需两次 API 调用。两者在健康检查中都很有用。

该服务必须为订阅启用 —— 管理员可以在整个租户范围内禁用它:

Terminal window
az rest --method get --url \
"https://management.azure.com/subscriptions/<sub>/providers/Microsoft.SerialConsole/consoleServices/default?api-version=2018-05-01"
{ "properties": { "disabled": false } }

然后请求连接到某个特定节点的串行端口:

Terminal window
az rest --method post \
--headers "Content-Type=application/json" --body '{}' --url \
"https://management.azure.com/subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Compute/virtualMachines/<vm>/providers/Microsoft.SerialConsole/serialPorts/0/connect?api-version=2018-05-01"

wss:// 开头的 connectionString —— 在本部署中为 eastus.gateway.serialconsole.azure.com —— 表示控制台此刻可以连接。 在启用引导诊断之前,该调用没有任何可连接的目标。

  1. 安装一次扩展:

    Terminal window
    az extension add --name serial-console
  2. 连接:

    Terminal window
    az serial-console connect -g <resource-group> -n <vm-name>
  3. 你会到达节点自身的登录提示符,而不是 shell,并且位于该设备的审计横幅之后。 串行控制台证明了通道可用;它并不绕过身份验证。

采集自 f5-xc-ce-vm-01,中间部分已省略,因为 systemd 单元输出没有额外信息:

+-----------------------------------------------+
Connected to the serial port of the VM.
If no login prompt is displayed, press ENTER.
+-----------------------------------------------+
Probing EDD (edd=off to disable)... ok
Memory KASLR using RDRAND RDTSC...
init_cea_offsets KASLR using RDRAND RDTSC...
Poking KASLR using RDRAND RDTSC...
Welcome to Red Hat Enterprise Linux 9.2024.6.3 (Plow) dracut-057-44.git20230822.el9 (Initramfs)!
[ OK ] Started Dispatch Password …ts to Console Directory Watch.
... [320 lines of systemd unit output elided]
[ OK ] Started Serial Getty on ttyS0.
[ OK ] Reached target Login Prompts.
[ OK ] Started OpenSSH server daemon.
[ OK ] Started Container Runtime Interface for OCI (CRI-O).
[ 19.960784] cloud-init[1311]: Cloud-init v. 23.1.1-12.el9_3 running 'modules:config' at Sun, 26 Jul 2026 13:13:54 +0000. Up 19.84 seconds.
[ OK ] Finished Apply the settings specified in cloud-config.
Starting Execute cloud user/final scripts...
[ OK ] Started Docker Application Container Engine.
Starting Argo Watch service...
Starting VP Manager image load...
[ OK ] Started Argo Watch service.
[ 21.544663] cloud-init[1512]: Cloud-init v. 23.1.1-12.el9_3 running 'modules:final' at Sun, 26 Jul 2026 13:13:56 +0000. Up 21.41 seconds.
[ 22.751629] cloud-init[1512]: Cloud-init v. 23.1.1-12.el9_3 finished at Sun, 26 Jul 2026 13:13:57 +0000. Datasource DataSourceAzure [seed=/var/lib/waagent]. Up 22.37 seconds
[ OK ] Finished Execute cloud user/final scripts.
[ OK ] Started libcontainer conta…f4b59f3b96c31ee10cd95f6eb371c.
UNAUTHORIZED ACCESS TO THIS DEVICE IS PROHIBITED
All actions performed on this device are audited
f5-xc-ce-vm-01 login: [ 123.107074] Warning: Deprecated Driver is detected: iptables will not be maintained in a future major release and may be disabled
[ 123.144641] Warning: Deprecated Driver is detected: ip6tables will not be maintained in a future major release and may be disabled

该记录中有四点值得注意,因为它们回答了调试 API 无法回答的问题:

  • cloud-init 已完成 —— Datasource DataSourceAzure,在 22.37 秒时结束。 从未注册成功的节点通常在这里失败,而这里正是你能看到它的地方。
  • 两个容器运行时都已启动。 Container Runtime Interface for OCI (CRI-O)Docker Application Container Engine 各自都是 [ OK ],这是双运行时行为在引导阶段的证据 —— 该行为常让人们在 crictldocker 中感到意外。
  • VP Manager image loadArgo Watch service —— vpm 与 Argo 正在启动。
  • 提示符属于节点自身,位于其审计横幅之后。串行控制台给你的是登录提示符,而不是会话。

在这里你能看到 API 无法展示的内容

Section titled “在这里你能看到 API 无法展示的内容”
  • cloud-init 正在运行、失败或从未启动 —— 节点从未注册成功的常见原因。
  • 针对 register.ves.volterra.io注册尝试,包括配置错误或被租户拒绝的令牌。
  • 任何代理运行之前的内核与引导消息
  • 节点没有任何可用网络路径时的状态,这种情况会让其他所有途径失效。

对于状态确实ONLINE 的节点,请优先使用调试 API:它可脚本化、能产生可重复执行的证据, 而且不会占用唯一的串行端口。