ข้ามไปยังเนื้อหา

คอนโซลไซต์

บันทึกเมื่อ 2026-07-28 จาก CE หนึ่งเครื่องของการติดตั้งนี้ sitecli/capture-manifest.json บันทึกว่าเป็นโหนดใด และ scripts/capture-sitecli.sh --check จะตรวจสอบชุดคำสั่ง ซ้ำอีกครั้งกับ CE ที่ทำงานอยู่จริง

Customer Edge ทุกเครื่องให้บริการคอนโซลไซต์ของ F5 ที่ https://<sli-ip>:65500 ในการติดตั้งนี้ มักเป็นเส้นทางที่ควรลองก่อน

มันเรียกร้องจากคุณน้อยที่สุด: ไม่ต้องแจกจ่ายคีย์ SSH ไม่ต้องดูแล jump host ไม่ต้องมี IP สาธารณะบน โหนด และไม่ต้องเปลี่ยน VM เพื่อเปิดใช้งาน ใครที่จะเชื่อมต่อได้กลายเป็น การตัดสินใจของ Azure RBAC และไม่จำเป็นต้องให้ไซต์ลงทะเบียนแล้ว: หน้านี้ถูกบันทึกครั้งแรกขณะที่ทั้งสามไซต์รายงาน site_state: FAILED และตรวจสอบซ้ำแล้วไม่มีการเปลี่ยนแปลงกับโหนดเดียวกันเมื่อโหนดเหล่านั้นอยู่ในสถานะ ONLINE

ข้อจำกัดคือคอนโซลไซต์ตอบสนองเฉพาะบนที่อยู่ภายใน (SLI) ของโหนดเท่านั้น ซึ่งเข้าถึงได้จากภายใน VNet เท่านั้น Azure Bastion ปิดช่องว่างนั้นโดยไม่ต้องเพิ่ม สิ่งอื่นใดบนเครือข่าย

  1. ลงชื่อเข้าใช้ Azure และเพิ่มส่วนขยาย Bastion การทำทันเนลเป็นคุณสมบัติของไคลเอนต์เนทีฟ และส่วนขยายนี้ไม่ได้ติดตั้งมาโดยค่าเริ่มต้น

    Terminal window
    az login
    az extension add --name bastion
  2. ต้องมีสิทธิ์ Reader บนเครื่องเสมือน CE, เน็ตเวิร์กอินเทอร์เฟซของมัน และโฮสต์ Bastion นี่เป็นข้อกำหนดที่ Microsoft ระบุไว้ในเอกสาร และ ยังไม่ได้รับการตรวจสอบที่นี่ — ทุกการรันในการ ติดตั้งนี้ดำเนินการในฐานะเจ้าของ subscription ดังนั้นจึงยังไม่มีการแสดงว่าบทบาทที่เล็กกว่านั้นเพียงพอ หรือไม่เพียงพอ

  3. ยืนยันว่า Bastion ถูกติดตั้งและมีความสามารถที่ต้องการ SKU แบบ Basic ไม่รองรับทั้งการทำทันเนลและ การเชื่อมต่อแบบอ้างอิง 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 table
    Name Sku Tunneling
    ----------------- -------- -----------
    mcn-ce-ha-bastion Standard True

นำค่าต่างๆ มาจาก terraform output แทนการพิมพ์เอง — resource id ไม่ใช่สิ่งที่ ควรประกอบขึ้นด้วยมือ

  1. อ่านชื่อของโฮสต์ Bastion, resource group และ resource id ของ VM ของ CE เป้าหมาย

    Terminal window
    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. เริ่มทันเนล มันจะเปิดพอร์ตไว้จนกว่าจะหยุด ดังนั้นให้รันเป็นเบื้องหลังหรือใช้ เทอร์มินัลที่สอง

    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: 65500
    WARNING: Tunnel is ready, connect on port 65500
    WARNING: Ctrl + C to close

    ทั้งสามบรรทัดมีคำนำหน้าว่า WARNING: นั่นเป็นเพราะ Azure CLI เขียนความคืบหน้าไปที่ stderr ไม่ใช่ปัญหา รอให้ปรากฏ Tunnel is ready ก่อนเชื่อมต่อ

  3. ยืนยันว่าตัวรับฟังอยู่ในเครื่อง บน loopback:

    Terminal window
    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. เปิดคอนโซล ทันเนลทำให้มันอยู่ในเครื่อง ดังนั้นที่อยู่คือ localhost — ไม่ใช่ ที่อยู่ของโหนด

    Terminal window
    open https://localhost:65500/ # macOS
    xdg-open https://localhost:65500/ # Linux
  5. หยุดทันเนลเมื่อคุณใช้งานเสร็จ — Ctrl-C หรือ kill %1 หากคุณรันไว้เป็นเบื้องหลัง การเปิดค้างไว้จะยึดพอร์ตท้องถิ่น 65500 และเซสชัน Bastion ไว้

กล่องโต้ตอบขอข้อมูลรับรอง ไม่ใช่หน้าล็อกอิน คอนโซลใช้การยืนยันตัวตนแบบ HTTP Basic ดังนั้น เบราว์เซอร์จะแสดงกล่องขอชื่อผู้ใช้และรหัสผ่านของตัวเอง ไม่มีฟอร์มให้ดู:

Terminal window
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

401 พร้อม realm นั้นคือคอนโซลทำงานได้ถูกต้อง เป็นสิ่งที่คำขอที่ไม่ได้ยืนยันตัวตน ควรได้รับ — และการส่งข้อมูลรับรอง admin ไปที่ URL เดียวกันจะตอบ 200 ซึ่งเป็นวิธียืนยันข้อมูลรับรองก่อนเปิดเบราว์เซอร์:

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

-u admin โดยไม่ใส่เครื่องหมายทวิภาคทำให้ curl ถามรหัสผ่านแทนที่จะรับมาจาก บรรทัดคำสั่ง ซึ่งจะไปปรากฏในประวัติเชลล์และในรายการโปรเซส

คำเตือนเรื่องใบรับรอง ด้วยสามเหตุผลในคราวเดียว ตรวจสอบใบรับรองโดยตรง:

Terminal window
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

subject เท่ากับ issuer ดังนั้นมันเป็นใบรับรองที่ลงนามด้วยตนเอง ชื่อคือ site-local.volterra.io ขณะที่ คุณกำลังเชื่อมต่อไปที่ localhost ดังนั้นจึงไม่ตรงกัน และในบิลด์ที่การติดตั้งนี้ ใช้อยู่ ใบรับรองหมดอายุเมื่อวันที่ 25 ตุลาคม 2025 — อุปกรณ์ให้มาเช่นนั้น และไม่มีสิ่งใด ในรีโพซิทอรีนี้ที่ต่ออายุมันให้

คาดหวังได้ว่าจะได้คำเตือนตรงๆ จากเบราว์เซอร์ และจะได้ทุกครั้ง บรรทัด subject ด้านบนคือ ส่วนที่มีประโยชน์: มันเป็นวิธียืนยันว่าคุณเชื่อมถึงอุปกรณ์จริง ไม่ใช่สิ่งอื่น ที่กำลังรับฟังอยู่บนพอร์ตท้องถิ่น 65500

ลงชื่อเข้าใช้เป็น admin เอกสารนี้ไม่เผยแพร่รหัสผ่าน และไม่ควรเผยแพร่

สองเหตุผลที่การไม่เผยแพร่มันมีความสำคัญที่นี่มากกว่าที่เห็น:

  • เอกสารนี้เป็นสาธารณะ การพิมพ์รหัสผ่านคอนโซลปัจจุบันของฟลีตจะเปลี่ยน “มีสิทธิ์ Reader บน Bastion” ให้กลายเป็นการเข้าถึงอุปกรณ์อย่างเต็มที่สำหรับทุกคนที่อ่านหน้านี้
  • รหัสผ่านที่เผยแพร่ในเอกสารจะผิดทันทีที่มีใครหมุนเวียนเปลี่ยนมัน และ ผิดในแบบที่ทำให้เข้าใจผิดมากที่สุด — ผู้อ่านจะสรุปว่าการเข้าถึงของตนเสียหาย ไม่ใช่ ว่าหน้านี้เก่าล้าสมัย

เมื่อมีการหมุนเวียนเปลี่ยนแล้ว ให้ไปเอามาจากที่ที่ทีมของคุณเก็บความลับด้านปฏิบัติการ

--target-resource-id เป็นสิ่งจำเป็น การชี้ไปที่ที่อยู่ของโหนดแทนจะถูกปฏิเสธ — ไม่ว่าคุณจะใช้ที่อยู่ใด ดังนั้นจึงเจตนาไม่พิมพ์ที่อยู่จริงไว้ที่นี่:

Terminal window
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.

เหตุผลไม่ใช่ว่าการเชื่อมต่อแบบอ้างอิง IP ถูกปิดใช้งาน — บน Bastion นี้ ip_connect_enabled เป็น true Microsoft ไม่รองรับพอร์ตกำหนดเองผ่านการเชื่อมต่อ ไคลเอนต์เนทีฟแบบอ้างอิง IP ไม่ว่าจะตั้งค่านั้นไว้อย่างไร (เอกสาร Azure) และ 65500 คือ พอร์ตกำหนดเอง การตรวจสอบการตั้งค่า Bastion ที่นี่ไม่นำไปสู่ผลลัพธ์ใด ให้ใช้ resource id

อาการสาเหตุวิธีแก้
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
ทันเนลเริ่มทำงานแต่ resource id ว่างเปล่าตัวกรอง jq ใช้ชื่อ VM แทนคีย์ของไซต์ใช้คีย์ eastus01/02/03
401 Unauthorized, realm Volterra Site Consoleไม่ใช่ความผิดพลาด — เป็นคำขอที่ไม่ได้ยืนยันตัวตนส่งข้อมูลรับรอง admin
เบราว์เซอร์ปฏิเสธใบรับรองลงนามด้วยตนเอง ชื่อไม่ตรงกัน และหมดอายุตั้งแต่ ต.ค. 2025เป็นเรื่องคาดหมาย; ยืนยันว่า subject เป็น CN=site-local.volterra.io แล้วดำเนินการต่อ