站点控制台
采集于 2026-07-28,取自本部署的一个 CE。sitecli/capture-manifest.json
记录了具体是哪个节点,scripts/capture-sitecli.sh --check 会针对一台在线 CE
重新校验命令界面。
每个 Customer Edge 都在 https://<sli-ip>:65500 上提供 F5 的站点控制台。在本
部署中,它通常是首选尝试的路径。
它对你的要求最少:无需分发 SSH 密钥、无需维护跳板机、节点上无需公网 IP,也无需替换 VM
即可启用。谁可以连接变成了一个 Azure RBAC 决策。而且它不需要站点已注册:本页首次采集时
三个站点都报告 site_state: FAILED,之后在同一批节点变为 ONLINE 后重新校验,内容未变。
需要注意的是,站点控制台只在节点的内部(SLI)地址上响应,而该地址只能从 VNet 内部访问。 Azure Bastion 弥合了这一差距,且不会在网络上放置任何其他东西。
-
登录 Azure 并添加 Bastion 扩展。隧道功能是原生客户端特性,该扩展默认不会安装。
Terminal window az loginaz extension add --name bastion -
对 CE 虚拟机、其网络接口以及 Bastion 主机持有 Reader 权限。 这是 Microsoft 的文档要求,且此处未经验证 —— 本部署中的每次运行都是以订阅所有者 身份执行的,因此没有证据表明更低的角色足够或不足够。
-
确认 Bastion 已部署且具备相应能力。Basic SKU 既不支持隧道也不支持基于 IP 的连接, 因此这里的
Standard和True都是关键。Terminal window az network bastion list -g "$(terraform output -raw resource_group_name)" \--query "[].{name:name, sku:sku.name, tunneling:enableTunneling}" -o tableName Sku Tunneling----------------- -------- -----------mcn-ce-ha-bastion Standard True
从 terraform output 中取值,而不要手动输入 —— 资源 id 不是应该手工拼装的东西。
-
读取 Bastion 主机名称、资源组,以及目标 CE 的 VM 资源 id。
Terminal window cd terraformBASTION=$(terraform output -raw bastion_name)RG=$(terraform output -raw resource_group_name)VM_ID=$(terraform output -json ce_vm_ids | jq -r '.eastus01')mcn-ce-ha-bastionrg-mcn-ce-ha-<deployer>/subscriptions/…/providers/Microsoft.Compute/virtualMachines/f5-xc-ce-vm-01 -
启动隧道。它会一直保持端口开放直到被停止,因此请将其放到后台或使用第二个终端。
Terminal window az network bastion tunnel \--name "$BASTION" \--resource-group "$RG" \--target-resource-id "$VM_ID" \--resource-port 65500 \--port 65500 &WARNING: Opening tunnel on port: 65500WARNING: Tunnel is ready, connect on port 65500WARNING: Ctrl + C to close三行都以
WARNING:为前缀。那是 Azure CLI 把进度写到 stderr,不是问题。 请等到Tunnel is ready之后再连接。 -
确认监听器在本地的 loopback 上:
Terminal window lsof -nP -iTCP:65500 -sTCP:LISTENCOMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEPython 41648 you 7u IPv4 … 0t0 TCP 127.0.0.1:65500 (LISTEN) -
打开控制台。隧道使其变为本地服务,因此地址是
localhost—— 而不是节点的地址。Terminal window open https://localhost:65500/ # macOSxdg-open https://localhost:65500/ # Linux -
完成后停止隧道 —— 使用
Ctrl-C,若放到了后台则用kill %1。 保持其开启会占用本地端口 65500 以及 Bastion 会话。
你将看到什么
Section titled “你将看到什么”一个凭据对话框,而不是登录页面。 控制台使用 HTTP Basic 身份验证,因此浏览器会 弹出自己的用户名和密码提示。没有可查看的表单:
curl -skI https://localhost:65500/HTTP/1.1 401 UnauthorizedWWW-Authenticate: Basic realm="Volterra Site Console"Content-Type: text/html; charset=utf-8Content-Length: 0带有该 realm 的 401 说明控制台工作正常。这正是未经身份验证的请求应当得到的结果 ——
而向同一 URL 提供 admin 凭据会返回 200,这就是在打开浏览器之前确认凭据的方法:
curl -sk -u admin -o /dev/null -w '%{http_code}\n' https://localhost:65500/Enter host password for user 'admin':200-u admin 后不加冒号会让 curl 提示输入密码,而不是从命令行获取 —— 否则密码会留在
shell 历史和进程列表中。
一个证书警告,同时有三个原因。 直接检查证书:
openssl s_client -connect localhost:65500 -servername localhost </dev/null 2>/dev/null \ | openssl x509 -noout -subject -issuer -datessubject=C=US, ST=California, L=Santa Clara, O=Volterra, OU=Volterra Edge Services, CN=site-local.volterra.ioissuer=C=US, ST=California, L=Santa Clara, O=Volterra, OU=Volterra Edge Services, CN=site-local.volterra.ionotBefore=Oct 25 04:51:31 2024 GMTnotAfter=Oct 25 04:51:31 2025 GMTsubject 等于 issuer,因此它是自签名的。名称是 site-local.volterra.io,而你连接的是
localhost,因此不会匹配。并且在本部署所运行的版本上,该证书已于 2025 年 10 月 25 日
过期 —— 它由设备自带,本仓库中没有任何东西会更新它。
请预期浏览器给出直白的警告,并且每次都会出现。上面的 subject 行才是有用的部分: 它是你确认自己连到的是该设备,而不是本地 65500 端口上监听的其他东西的方法。
admin 凭据
Section titled “admin 凭据”以 admin 身份登录。本文档不公布该密码,也不应公布。
不公布它在此处比看起来更重要,有两个原因:
- 本文档是公开的。打印整个机群当前的控制台密码,会把”对 Bastion 持有 Reader”变成 任何读到此页的人都能获得的完整设备访问权限。
- 文档中公布的密码在有人轮换它的那一刻就是错的,而且是以最具误导性的方式错误 —— 读者会认为自己的访问权限出了问题,而不是这个页面过时了。
一旦它被轮换过,请从你团队保存运维机密的地方获取。
为什么隧道必须以资源 id 为目标
Section titled “为什么隧道必须以资源 id 为目标”--target-resource-id 是必需的。改用节点地址会被拒绝 —— 无论你使用哪个地址,
因此这里有意不打印真实地址:
az network bastion tunnel --name "$BASTION" -g "$RG" \ --target-ip-address <any-sli-address> --resource-port 65500 --port 65501ERROR: Custom ports are not allowed. Allowed ports for Tunnel with IP connect is 22, 3389.原因不是基于 IP 的连接被禁用 —— 在这台 Bastion 上 ip_connect_enabled 为 true。
无论该设置如何,Microsoft 都不支持在基于 IP 的原生客户端连接上使用自定义端口
(Azure 文档),
而 65500 是一个自定义端口。在这里检查 Bastion 配置无济于事;请使用资源 id。
当它不起作用时
Section titled “当它不起作用时”| 症状 | 原因 | 解决方法 |
|---|---|---|
ERROR: Custom ports are not allowed. Allowed ports for Tunnel with IP connect is 22, 3389. | 使用了 --target-ip-address | 改用 --target-resource-id |
ERROR: Defined port is currently unavailable | 另一个隧道已占用该本地端口 | 停止另一个隧道,或传入不同的 --port;--resource-port 保持为 65500 |
terraform output -raw bastion_name 为 null 或为空 | Bastion 未部署 | 设置 enable_bastion = true 并 apply |
| 隧道启动了但资源 id 为空 | jq 过滤器使用了 VM 名称而非站点键 | 使用 eastus01/02/03 作为键 |
401 Unauthorized,realm 为 Volterra Site Console | 并非故障 —— 未经身份验证的请求 | 提供 admin 凭据 |
| 浏览器拒绝该证书 | 自签名、名称不匹配,且自 2025 年 10 月起已过期 | 属于预期;确认 subject 为 CN=site-local.volterra.io 后继续 |