Cấp cứu vCenter báo lỗi 503 do hết hạn chứng chỉ STS bằng script fixsts.py

VMware tutorial - IT technology blog
VMware tutorial - IT technology blog

Đầu tuần mở vSphere Client, bạn nhận ngay trang trắng kèm mã lỗi 503 Service Unavailable hoặc Signing certificate is not valid. Dưới sàn máy chủ, dàn máy ảo ESXi và hệ thống tải của doanh nghiệp vẫn chạy bình thường. Thế nhưng, vCenter tê liệt khiến bạn không thể bật tắt VM, không migrate vMotion hay theo dõi tài nguyên được. Nguyên nhân phổ biến nhất sau 2 năm vận hành vCenter chính là chứng chỉ STS nội bộ đã âm thầm hết hạn.

Xử lý khẩn cấp trong 5 phút (Quick fix)

Nếu xác định vSphere Client không thể kết nối do STS certificate quá hạn, hãy thao tác nhanh theo 4 bước sau để khôi phục quyền điều khiển:

Bước 1: Snapshot máy ảo vCenter (Bắt buộc)

Đăng nhập trực tiếp vào ESXi host đang chứa VM vCenter (VCSA). Tạo ngay một bản snapshot dự phòng. Tuyệt đối không tick chọn Snapshot the virtual machine’s memory. Snapshot không kèm bộ nhớ giúp tiến trình chụp snapshot diễn ra dưới 30 giây, đồng thời tránh lỗi khóa cơ sở dữ liệu PostgreSQL bên trong VCSA nếu chẳng may phải rollback.

Bước 2: Bật SSH và truy cập Bash Shell

Mở kết nối SSH vào IP của VCSA bằng PuTTY hoặc Terminal với tài khoản root. Kích hoạt môi trường dòng lệnh Linux:

# Chuyển từ appliance shell sang bash shell chuẩn
shell.set --enabled True
shell

Bước 3: Kiểm tra ngày hết hạn bằng checksts.py

Broadcom cung cấp công cụ kiểm tra nhanh theo mã KB 79248. Đẩy file script vào thư mục tạm trên VCSA qua WinSCP (hoặc dùng vi /tmp/checksts.py dán trực tiếp code) rồi thực thi:

cd /tmp
python checksts.py

Trường hợp màn hình in ra dòng chữ cảnh báo đỏ: STS Signing Certificate Status: Expired, chứng chỉ ký token xác thực của bạn đã hết hạn.

Bước 4: Chạy script fixsts.py và tái khởi động dịch vụ

Script fixsts.py sẽ tạo lại cặp key mới và cập nhật thẳng vào VMware Endpoint Certificate Store (VECS):

# Cấp quyền thực thi và chạy script tại thư mục /tmp
chmod +x fixsts.py
python fixsts.py

# Nhập mật khẩu tài khoản [email protected] khi có nhắc lệnh
# Khi thấy thông báo 'Finished successfully!', khởi động lại toàn bộ cụm dịch vụ:
service-control --stop --all && service-control --start --all

Quá trình khởi động lại dịch vụ thường mất khoảng 5 đến 8 phút tùy thuộc vào lượng RAM và vCPU cấp cho VCSA (mô hình Tiny/Small thường khởi động lâu hơn). Khi các dịch vụ cốt lõi như vmware-vpxd và vsphere-ui đã ở trạng thái Started, hãy tải lại trang đăng nhập.

Bản chất STS Certificate và lý do vCenter đột ngột tê liệt

Security Token Service (STS) là trái tim trong cơ chế Single Sign-On (SSO) của VMware. Dịch vụ này chịu trách nhiệm cấp phát token mã hóa định dạng SAML cho toàn bộ kết nối nội bộ. Mọi thao tác từ lõi điều khiển vpxd, giao diện quản trị vsphere-ui đến các giải pháp sao lưu như Veeam Backup & Replication hay plugin SAN Storage đều bắt buộc phải có token này để giao tiếp.

Trên các bản cài đặt mới của vCenter 6.5 Update 2, 6.7 và các bản đầu của 7.0, VMware đặt thời hạn mặc định cho STS Certificate chỉ vỏn vẹn 2 năm (730 ngày). Điểm nguy hiểm nằm ở chỗ chứng chỉ này không hiển thị ngoài thanh địa chỉ trình duyệt như Machine SSL Certificate (cổng 443). Nó được giấu kín bên trong database VECS và danh bạ LDAP nội bộ vmdir.

Ngày chứng chỉ chạm mốc hết hạn, toàn bộ chuỗi xác thực lập tức đứt gãy:

  • SSO từ chối ký cấp phát token mới cho mọi phiên làm việc.
  • Dịch vụ vpxd và giao diện Web Client mất liên lạc với nhau, sinh mã lỗi HTTP 503.
  • Đăng nhập bằng tài khoản nội bộ [email protected] hay tài khoản Active Directory đều thất bại hoàn toàn.

Xử lý môi trường Linked Mode và sự cố thường gặp

Với hệ thống đơn lẻ (Embedded PSC), tỷ lệ thành công của fixsts.py là trên 95%. Tuy nhiên, các hạ tầng doanh nghiệp lớn thường tiềm ẩn một số trường hợp đặc thù sau:

1. Mô hình Enhanced Linked Mode (Nhiều vCenter chung SSO Domain)

Khi các vCenter liên kết chung một Single Sign-On domain, STS Certificate sẽ được nhân bản tự động qua tiến trình VMware Directory Service (vmdir). Quy trình xử lý cần tuân thủ nghiêm ngặt:

  • Chỉ thực thi trên một Node duy nhất: Chọn máy chủ vCenter chính đầu tiên để chạy python fixsts.py. Tuyệt đối không chạy đồng thời trên các node còn lại.
  • Kiểm tra trạng thái nhân bản dữ liệu: Trước khi khởi động lại dịch vụ ở các node phụ, chạy lệnh sau để chắc chắn dữ liệu chứng chỉ mới đã đồng bộ sang:
/usr/lib/vmware-vmdir/bin/vdcrepadmin -f showpartnerstatus -h localhost -u administrator

Nếu thông số Partner is at USN giữa các node đã bằng nhau, hãy lần lượt khởi động lại dịch vụ trên các vCenter còn lại mà không cần chạy đè script.

2. Dịch vụ bị treo khi start lại

Thỉnh thoảng lệnh service-control --start --all sẽ bị treo ở vmware-vmon hoặc vấp lỗi tại vmware-vpxd do xung đột cache SSO cũ trong bộ nhớ. Hãy mở ngay file log để kiểm tra:

tail -n 100 /var/log/vmware/vpxd/vpxd.log

Nếu log liên tục ghi nhận lỗi Failed to authenticate with STS dù script đã báo thành công, giải pháp triệt để nhất là gõ lệnh reboot khởi động lại toàn bộ appliance để xóa sạch tiến trình cô lập trong RAM.

Kinh nghiệm thực tế từ khâu vận hành

  1. Lập lịch kiểm tra tự động trước ngày hết hạn: Thay vì chờ hệ thống sập mới cứu hộ, bạn hãy thiết lập một Cronjob đơn giản trên Linux monitoring server (như Zabbix hay Prometheus) hoặc dùng script PowerShell chạy Connect-VIServer định kỳ mỗi 30 ngày để cảnh báo hạn dùng chứng chỉ từ sớm.
  2. Phân biệt STS Certificate và Machine SSL Certificate: Script fixsts.py chỉ thay thế khóa ký SAML Token. Nó không gia hạn chứng chỉ SSL trình duyệt. Nếu cổng 443 cũng sắp hết hạn, bạn phải dùng menu số 1 trong công cụ /usr/lib/vmware-vmca/bin/certificate-manager để tạo mới.
  3. Thu dọn Snapshot sau 24 đến 48 giờ: Khi cụm vCenter đã chạy ổn định và các dịch vụ backup hoàn thành trơn tru qua đêm, hãy xóa ngay bản snapshot đã tạo ở Bước 1. Tránh để snapshot tồn tại quá lâu gây phình đĩa VMDK và làm suy giảm hiệu năng I/O trên storage.
Share: