CloudStack
Vị trí trong admin: Infrastructure › Cloud provider › CloudStack › API connection (
/infra/cloudstack?tab=connect). Bạn cũng có thể thiết lập kết nối đầu tiên trong setup wizard, bước 2.
Chức năng
NexCMP bán các máy ảo chạy trên đám mây Apache CloudStack của bạn. Hệ thống triển khai, khởi động, dừng, đổi cấu hình, tạo snapshot và xóa VM qua CloudStack API, cấp phát địa chỉ IP public từ zone, đọc mức sử dụng để tính cước và băng thông, đồng thời hiển thị dung lượng cùng trạng thái vận hành trong admin console. CloudStack luôn là source of truth cho các hypervisor; NexCMP đóng vai trò là giao diện bán hàng, hệ thống billing và portal lớp trên.
Sử dụng trang này khi CloudStack là (hoặc sẽ là) nguồn VM chính của bạn. Để cấu hình thêm nguồn thứ hai song song, hãy xem Proxmox VE.
Yêu cầu
| Hạng mục | Yêu cầu |
|---|---|
| Phiên bản CloudStack | 4.23 là bản phát hành đã được kiểm thử. VM console yêu cầu phiên bản 4.18 trở lên và tính năng nâng cấp CPU/RAM trực tiếp cho VM đang chạy yêu cầu 4.23 với KVM. |
| Loại zone | Zone có ít nhất một guest network dành cho VM của khách hàng và một dải IP public còn địa chỉ trống. |
| Hypervisor | KVM là hypervisor đã được kiểm thử. |
| Tài khoản | Một domain và account riêng biệt được tạo cho NexCMP. Tuyệt đối không sử dụng ROOT administrator key. |
| Khả năng kết nối API | Panel server phải kết nối được tới management server API URL (https://cloudstack.example.com/client/api) qua HTTP(S). Các tính năng VM console, bandwidth và Kubernetes cũng sử dụng cùng endpoint này. |
| Key chỉ đọc tùy chọn | Key chỉ đọc thứ hai cho phép admin console hiển thị hosts, storage, system VMs và các dải public IP. Không bắt buộc nếu chỉ bán VM. |
| Public IP | Địa chỉ IPv4 public còn trống trong zone. Prefix mà NexCMP được phép bán được cấu hình trong Sales IP pools. |
| Templates | Tối thiểu một template ở trạng thái sẵn sàng, hỗ trợ mật khẩu và một service offering mà account của bạn có thể thấy. Xem Templates. |
| Storage | Primary storage cho các volume của account và secondary storage nếu bạn bán snapshots hoặc image. |
| Phụ thuộc vào | Không có. Kubernetes, Private Cloud, Images và Bandwidth phụ thuộc vào trang này. |
Không sử dụng ROOT administrator key
Hãy tạo một domain và account riêng cho NexCMP. Khi đó, key chỉ có quyền truy cập domain này, và nếu key bị lộ thì phần còn lại của hạ tầng cloud vẫn an toàn. Trình hướng dẫn cài đặt cũng kiểm tra xem network bạn chọn có thuộc zone và account sở hữu key hay không.
Chuẩn bị hạ tầng
Các lệnh sử dụng CloudMonkey (cmk) đã đăng nhập bằng quyền quản trị viên CloudStack. Hãy thay thế tên ví dụ và các placeholder trong dấu ngoặc nhọn.
Tạo account và API key riêng
Tạo domain để chứa toàn bộ tài nguyên do NexCMP quản lý.
bashcmk create domain name=nexcmpLưu lại
idtrong kết quả trả về; giá trị này được dùng làm<domain-id>ở bên dưới.Tìm role bạn muốn gán cho account.
bashcmk list roles type=DomainAdmin filter=id,nameRole Khi nào nên chọn Domain Admin (khuyến nghị) Đầy đủ tính năng: VMs, networks, projects cho Kubernetes, VPC, images. Phạm vi quyền hạn chỉ giới hạn trong domain nexcmp.User Chỉ quản lý vòng đời VM. User thông thường không thể expunge VM trừ khi cài đặt toàn cục allow.user.expunge.recover.vmlà true; khi đó NexCMP sẽ tắt VM và CloudStack sẽ expunge VM sauexpunge.delay.Tạo account và user đầu tiên cho account đó. Hãy dùng mật khẩu ngẫu nhiên có độ dài lớn; mật khẩu này sẽ không cần nhập lại nữa.
bashcmk create account name=nexcmp-api username=nexcmp-api \ password='CHANGE-ME-LONG-RANDOM' email=ops@example.com \ firstname=NexCMP lastname=API roleid=<role-id> domainid=<domain-id>Tạo cặp API key cho user mới.
bashcmk list users domainid=<domain-id> username=nexcmp-api filter=id,username cmk generate userkeys id=<user-id>Sao chép
apikeyvàsecretkey. Đây là API key và Secret key bạn sẽ nhập vào NexCMP. NexCMP sẽ lưu trữ chúng dưới dạng mã hóa và sau đó chỉ hiển thị bốn ký tự cuối.Đảm bảo domain không bị giới hạn tài nguyên khắt khe (instances, volumes, public IP, networks, snapshots, templates, projects).
bashcmk list resourcelimits domainid=<domain-id>
Tạo guest network cho VM của khách hàng
VM của khách hàng được triển khai vào một guest network thuộc về account mới. Một isolated network có virtual router (VR) cùng các dịch vụ Static NAT, Firewall và Port Forwarding sẽ hoạt động tốt, vì NexCMP gắn public IP vào từng VM thông qua static NAT.
bash
cmk list networkofferings state=Enabled guestiptype=Isolated filter=id,name
cmk create network name=customers displaytext=customers zoneid=<zone-id> \
networkofferingid=<offering-id> account=nexcmp-api domainid=<domain-id>Kiểm tra chính sách egress mặc định của offering: nếu là "deny", VM của khách hàng sẽ không thể truy cập ra ngoài cho đến khi các quy tắc firewall egress được thêm vào.
Thiết lập quyền hiển thị cho offerings và templates
- Service offerings và network offerings phải ở chế độ public hoặc được gán cho domain
nexcmp, nếu không account sẽ không thể xem danh sách hoặc sử dụng chúng. - Đăng ký hoặc chia sẻ ít nhất một template (xem Templates). NexCMP sẽ liệt kê các template ở trạng thái sẵn sàng và featured.
Tùy chọn: key chỉ đọc cho các trang hạ tầng
Các tab Capacity, Host, Storage và System VM cùng danh sách dải IP public sử dụng key thứ hai chỉ cần quyền đọc đối với 6 lệnh. Hãy tạo một role giới hạn thay vì dùng lại key administrator đầy đủ quyền:
bash
cmk create role name=nexcmp-readonly type=Admin
# <role-id> is the id printed above
for api in listHosts listCapacity listSystemVms listVlanIpRanges listClusters listStoragePools; do
cmk create rolepermission roleid=<role-id> rule=$api permission=allow
done
cmk create rolepermission roleid=<role-id> rule='*' permission=denySau đó tạo một account với role đó (trong ROOT domain, vì role này đọc dữ liệu trên toàn zone), tạo các key tương tự bước 4 và nhập chúng vào mục RO API key ở phần tiếp theo.
Kiểm tra đường truyền mạng
Từ máy chủ panel:
bash
curl -fsS -o /dev/null -w '%{http_code}\n' https://cloudstack.example.com/client/apiBất kỳ phản hồi HTTP nào (kể cả 4xx) đều chứng minh cổng có thể kết nối được. Hiện tượng timeout cho thấy sự cố tường lửa hoặc DNS từ phía bạn.
Kết nối trong NexCMP
Trong wizard cài đặt
Bước 2 của wizard cài đặt yêu cầu các giá trị tương tự. Test connection sẽ liệt kê các zone và network mà key nhìn thấy; hãy chọn zone và guest network, tên hiển thị cho zone cùng quốc gia, sau đó nhấn Save CloudStack. Wizard sẽ từ chối network không nằm trong zone đó hoặc key không nhìn thấy.

Sau này, trong admin console
Mở Infrastructure › Cloud provider › CloudStack và chọn tab API connection.
Điền vào thẻ Connection:
Trường Giá trị ví dụ Endpoint API https://cloudstack.example.com/client/apiAPI key (quyền ghi) XXXX(để trống để giữ lại key đã lưu)Secret key XXXXKhóa API RO / khóa bí mật RO tùy chọn, lấy từ account chỉ đọc Zone ID UUID của zone của bạn 
Nhấn Test connection trước khi lưu. Thao tác này sẽ kiểm tra các key bạn đã nhập mà không lưu: key ghi với
listZonesvàlistCapabilities, cùng key chỉ đọc vớilistSystemVms.Nhấn Save connection. Hãy tiếp tục bật Enable CloudStack connection; việc tắt tùy chọn này sẽ khiến worker dừng toàn bộ tác vụ CloudStack mà không làm mất dữ liệu.
Mở Services › Virtual Machines › Policy › Provisioning để đặt guest network mặc định, custom offering và key pair mặc định cho các VM mới.

Mở Infrastructure › Cloud provider › Sales IP pools và trong mục Configure sales ranges, hãy đặt Sellable IP range prefixes (ví dụ:
203.0.113.) cùng Excluded IP prefixes nếu có một số địa chỉ trong zone không bao giờ được bán. Hãy để trống tiền tố nếu muốn cho phép mọi địa chỉ còn trống.
Những dữ liệu NexCMP đọc và ghi
| Hạng mục | Đọc | Thay đổi |
|---|---|---|
| VMs | danh sách, trạng thái, lịch sử sử dụng, console endpoint | deploy, start, stop, reboot, reinstall, destroy, scale, reset mật khẩu và SSH key |
| Ổ đĩa và snapshot | các volume, snapshot VM, backup | tạo, gắn, gỡ, thay đổi kích thước, xóa, tạo snapshot, khôi phục |
| Mạng | mạng, router, IP public, firewall, port forwarding, quy tắc load balancer | gán và giải phóng IP public, static NAT, firewall, port forwarding, quy tắc egress, mạng và ACL cho Private Cloud |
| Catalog | service offering, disk offering và network offering, template, ISO, loại OS | đăng ký và xóa template cùng ISO (Images), service offering khi tạo gói tùy chỉnh |
| Kubernetes | các phiên bản được hỗ trợ, cluster, cấu hình | project, giới hạn tài nguyên, mạng, cluster (module Kubernetes) |
| Khóa chỉ đọc | host, cluster, storage pool, system VM, dung lượng, dải IP VLAN | không có |
CPU và RAM trực tiếp, cùng băng thông
- Hot-plug. Bạn chỉ có thể thay đổi cấu hình một VM đang chạy mà không cần khởi động lại khi template của VM cho phép (dynamically scalable) và hệ điều hành khách tự động nhận thêm CPU và RAM. NexCMP sẽ bật Auto Scaling cho các template có tên kết thúc bằng
vNvới N từ 6 trở lên, hoặc khi bạn cấu hình thủ công trong trường vCPU/RAM hot-plug của template. Xem Templates. - Nguồn đo băng thông. Với cấu hình mặc định, NexCMP đo lưu lượng từ số liệu thống kê VM của CloudStack (
listVirtualMachinesUsageHistory, được thu thập mỗi 5 phút và cộng tổng theo từng giao diện mạng của VM). Số liệu này bao gồm cả lưu lượng giữa các VM, do đó có thể cao hơn một chút so với thống kê từ router biên. Hãy luôn bật tính năng thu thập thống kê VM của CloudStack; các khoảng thời gian gián đoạn dài hơn thời gian lưu trữ thống kê sẽ bị bỏ qua. Xem Bandwidth.
Kiểm tra
- Test connection trả về "Write key: OK" cùng zone của bạn và phiên bản CloudStack.
- Infrastructure › Cloud provider › Providers hiển thị nhà cung cấp ở trạng thái hoạt động với thời gian kiểm tra gần nhất. Bảng tình trạng trên dashboard không còn hiển thị thông báo "CloudStack: not connected".
- Sales IP pools liệt kê các địa chỉ còn trống (tự động làm mới khoảng một phút một lần).
- Đặt một VM nhỏ từ cổng khách hàng hoặc admin console và kiểm tra xem VM có chuyển sang trạng thái Running, có IP public và bạn có thể mở console hay không.
Giới hạn và lưu ý
- Trong phiên bản NexCMP này, bạn có thể kết nối một cluster CloudStack. Hộp thoại Add cloud provider có thể kiểm tra khóa của cluster thứ hai nhưng không thể lưu.
- Một zone CloudStack được liên kết với zone mặc định của NexCMP; nếu CloudStack có nhiều zone, hệ thống sẽ giới hạn trong phạm vi zone bạn nhập, do đó VM, IP và mạng của các zone khác sẽ bị bỏ qua.
- Việc xóa guest network trong CloudStack sẽ khiến mọi lượt triển khai mới thất bại. Admin console sẽ hiển thị thông báo màu đỏ khi mạng này biến mất.
- Thông tin xác thực không bao giờ rời khỏi máy chủ. API chỉ trả về bốn ký tự cuối cùng.
Xử lý sự cố
| Hiện tượng | Nguyên nhân | Cách khắc phục |
|---|---|---|
listCapabilities: cloudstack 401: unable to verify user credentials and/or request signature | Sai API key hoặc secret, khóa của người dùng khác, hoặc máy chủ panel bị lệch đồng hồ | Tạo lại khóa bằng cmk generate userkeys và dán cả hai. Kiểm tra thời gian trên máy chủ panel. |
Test: listZones: … hoặc timeout | Máy chủ panel không thể kết nối tới API URL | Kiểm tra DNS, firewall và đường dẫn /client/api chính xác. |
| Trình hướng dẫn: "network not found in that zone for this API key" | Mạng đã chọn thuộc về một tài khoản hoặc zone khác | Tạo mạng trong tài khoản chuyên dụng (xem ở trên) và chạy lại Test connection. |
| Trình hướng dẫn: "pick a zone and a network" | Chưa chạy kiểm tra, hoặc chưa chọn zone hay mạng nào | Nhấp vào Test connection và chọn ở cả hai danh sách. |
| Banner thông báo "CloudStack key not configured" | Chưa lưu khóa nào ("Connect later") | Điền thông tin trong thẻ Connection, bấm Save connection, sau đó bấm Test connection. |
| Banner "CloudStack connection is OFF" | Nút gạt Enable CloudStack connection đang tắt | Bật nút gạt lên và lưu lại. |
| Khóa read-only: báo "unusable …" khi kiểm tra | Thiếu quyền trong role hoặc sai account | Kiểm tra 6 lệnh được phép và đảm bảo account nằm trong ROOT domain. |
| "Zone public IP ranges not measured yet" hoặc "no public IP ranges declared" | Chưa có khóa read-only, hoặc zone thực sự không có public range | Thêm khóa read-only, hoặc thêm một public IP range trong CloudStack. |
| "Pool trống — chờ 60 s để đồng bộ vmd" | Danh sách IP được worker làm mới mỗi phút một lần | Chờ một phút rồi tải lại trang. |
| "hết IP trống trong dải 203.0.113." | Mọi địa chỉ trong prefix mở bán đều đã được dùng hết | Thêm địa chỉ vào zone, mở rộng prefix hoặc giải phóng các IP chưa dùng. |
| "Không thể lấy dữ liệu mạng (CloudStack không phản hồi hoặc key thiếu quyền)" | Khóa bị mất quyền truy cập, hoặc CloudStack đang offline | Chạy Test connection; kiểm tra xem account đã được kích hoạt chưa. |
| "Mạng khách KHÔNG tồn tại" | Network đã bị xóa trong CloudStack | Tạo lại network và đặt làm mặc định trong mục Provisioning. |