Ir al contenido

Consola del sitio

Capturado el 2026-07-28 desde un CE de esta implementación. sitecli/capture-manifest.json registra qué nodo, y scripts/capture-sitecli.sh --check vuelve a verificar la superficie de comandos contra un CE en vivo.

Cada Customer Edge sirve la Consola del sitio de F5 en https://<sli-ip>:65500. En esta implementación suele ser la ruta que conviene probar primero.

Es la que menos le exige: ninguna clave SSH que distribuir, ningún host de salto que mantener, ninguna IP pública en el nodo y ningún reemplazo de VM para habilitarla. Quién puede conectarse pasa a ser una decisión de Azure RBAC. Y no necesita que el sitio esté registrado: esta página se capturó por primera vez mientras los tres sitios informaban site_state: FAILED, y se volvió a verificar sin cambios contra los mismos nodos una vez que estaban ONLINE.

El inconveniente es que la Consola del sitio solo responde en la dirección interna (SLI) del nodo, accesible únicamente desde dentro de la VNet. Azure Bastion cierra esa brecha sin colocar nada más en la red.

  1. Inicie sesión en Azure y añada la extensión de Bastion. La creación de túneles es una función del cliente nativo y la extensión no está instalada por defecto.

    Ventana de terminal
    az login
    az extension add --name bastion
  2. Disponga del rol Reader en la máquina virtual del CE, su interfaz de red y el host de Bastion. Este es el requisito documentado por Microsoft y no está verificado aquí — cada ejecución en esta implementación se hizo como propietario de la suscripción, por lo que no se ha demostrado que ningún rol inferior sea suficiente o insuficiente.

  3. Confirme que Bastion está implementado y es capaz. La SKU Basic no admite ni túneles ni conexión basada en IP, de modo que aquí tanto Standard como True son determinantes.

    Ventana de terminal
    az network bastion list -g "$(terraform output -raw resource_group_name)" \
    --query "[].{name:name, sku:sku.name, tunneling:enableTunneling}" -o table
    Name Sku Tunneling
    ----------------- -------- -----------
    mcn-ce-ha-bastion Standard True

Tome los valores de terraform output en lugar de escribirlos — el id de recurso no es algo que convenga componer a mano.

  1. Lea el nombre del host de Bastion, el grupo de recursos y el id de recurso de la VM del CE de destino.

    Ventana de terminal
    cd terraform
    BASTION=$(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-bastion
    rg-mcn-ce-ha-<deployer>
    /subscriptions/…/providers/Microsoft.Compute/virtualMachines/f5-xc-ce-vm-01
  2. Inicie el túnel. Mantiene el puerto abierto hasta que se detenga, así que ejecútelo en segundo plano o use una segunda terminal.

    Ventana de terminal
    az network bastion tunnel \
    --name "$BASTION" \
    --resource-group "$RG" \
    --target-resource-id "$VM_ID" \
    --resource-port 65500 \
    --port 65500 &
    WARNING: Opening tunnel on port: 65500
    WARNING: Tunnel is ready, connect on port 65500
    WARNING: Ctrl + C to close

    Las tres líneas llevan el prefijo WARNING:. Se trata de la CLI de Azure escribiendo el progreso en stderr, no de un problema. Espere a Tunnel is ready antes de conectarse.

  3. Confirme que el listener es local, en loopback:

    Ventana de terminal
    lsof -nP -iTCP:65500 -sTCP:LISTEN
    COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    Python 41648 you 7u IPv4 … 0t0 TCP 127.0.0.1:65500 (LISTEN)
  4. Abra la consola. El túnel la hace local, por lo que la dirección es localhost — no la dirección del nodo.

    Ventana de terminal
    open https://localhost:65500/ # macOS
    xdg-open https://localhost:65500/ # Linux
  5. Detenga el túnel cuando haya terminado — Ctrl-C, o kill %1 si lo puso en segundo plano. Dejarlo abierto mantiene ocupado el puerto local 65500 y la sesión de Bastion.

Un cuadro de diálogo de credenciales, no una página de inicio de sesión. La consola usa autenticación HTTP Basic, por lo que el navegador muestra su propio aviso de usuario y contraseña. No hay ningún formulario que mirar:

Ventana de terminal
curl -skI https://localhost:65500/
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Volterra Site Console"
Content-Type: text/html; charset=utf-8
Content-Length: 0

Un 401 con ese realm significa que la consola funciona correctamente. Es lo que se espera que reciba una solicitud no autenticada — y facilitar la credencial admin a la misma URL responde 200, que es la forma de confirmar la credencial antes de abrir un navegador:

Ventana de terminal
curl -sk -u admin -o /dev/null -w '%{http_code}\n' https://localhost:65500/
Enter host password for user 'admin':
200

-u admin sin dos puntos hace que curl solicite la contraseña en lugar de tomarla de la línea de comandos, donde acabaría en el historial del shell y en la lista de procesos.

Una advertencia de certificado, por tres razones a la vez. Comprobando el certificado directamente:

Ventana de terminal
openssl s_client -connect localhost:65500 -servername localhost </dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates
subject=C=US, ST=California, L=Santa Clara, O=Volterra, OU=Volterra Edge Services, CN=site-local.volterra.io
issuer=C=US, ST=California, L=Santa Clara, O=Volterra, OU=Volterra Edge Services, CN=site-local.volterra.io
notBefore=Oct 25 04:51:31 2024 GMT
notAfter=Oct 25 04:51:31 2025 GMT

El sujeto es igual al emisor, por lo que es autofirmado. El nombre es site-local.volterra.io mientras usted se conecta a localhost, así que no coincidirá. Y en la compilación que ejecuta esta implementación, el certificado caducó el 25 de octubre de 2025 — el appliance lo incluye, y nada en este repositorio lo renueva.

Espere una advertencia contundente del navegador, y espérela cada vez. La línea del sujeto de arriba es la parte útil: es como confirma que ha llegado al appliance y no a otra cosa que esté escuchando en el puerto local 65500.

Inicie sesión como admin. Esta documentación no publica la contraseña, y no debería hacerlo.

Dos razones por las que no publicarla importa aquí más de lo que podría parecer:

  • Esta documentación es pública. Imprimir la contraseña actual de la consola de la flota convertiría “tener Reader en el Bastion” en acceso completo al appliance para cualquiera que lea la página.
  • Una contraseña publicada en la documentación es incorrecta en el momento en que alguien la rota, y errónea de la forma más engañosa — el lector concluye que su acceso está roto en lugar de que la página está obsoleta.

Una vez rotada, obténgala de donde su equipo guarde los secretos operativos.

Por qué el túnel debe apuntar al id de recurso

Sección titulada «Por qué el túnel debe apuntar al id de recurso»

--target-resource-id es obligatorio. Apuntar en su lugar a la dirección del nodo se rechaza — sea cual sea la dirección que use, por lo que deliberadamente no se imprime aquí ninguna real:

Ventana de terminal
az network bastion tunnel --name "$BASTION" -g "$RG" \
--target-ip-address <any-sli-address> --resource-port 65500 --port 65501
ERROR: Custom ports are not allowed. Allowed ports for Tunnel with IP connect is 22, 3389.

La razón no es que la conexión basada en IP esté desactivada — en este Bastion ip_connect_enabled es true. Microsoft no admite puertos personalizados en conexiones de cliente nativo basadas en IP, independientemente de ese ajuste (documentación de Azure), y 65500 es un puerto personalizado. Inspeccionar la configuración de Bastion aquí no lleva a ninguna parte; use el id de recurso.

SíntomaCausaSolución
ERROR: Custom ports are not allowed. Allowed ports for Tunnel with IP connect is 22, 3389.Se usó --target-ip-addressUse --target-resource-id
ERROR: Defined port is currently unavailableOtro túnel ya ocupa ese puerto localDetenga el otro túnel, o pase un --port distinto; --resource-port se mantiene en 65500
terraform output -raw bastion_name es null o está vacíoBastion no está implementadoEstablezca enable_bastion = true y aplique
El túnel arranca pero el id de recurso está vacíoEl filtro jq usó el nombre de la VM en lugar de la clave del sitioIndexe por eastus01/02/03
401 Unauthorized, realm Volterra Site ConsoleNo es un fallo — solicitud no autenticadaFacilite la credencial admin
El navegador rechaza el certificadoAutofirmado, nombre no coincidente y caducado desde octubre de 2025Es lo esperado; confirme que el sujeto es CN=site-local.volterra.io y continúe