---
title: CloudStack
description: Kết nối Apache CloudStack với NexCMP: tạo domain, account và API key riêng bằng cmk, sau đó nhập vào setup wizard hoặc admin console.
url: https://nexcmp.com/vi/docs/infrastructure/cloudstack/
applies_to: NexCMP 1.6.1
updated: 2026-11-02
---

# 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](https://nexcmp.com/vi/docs/getting-started/setup-wizard/), bước 2.

## Chức năng {#what-it-does}

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](https://nexcmp.com/vi/docs/infrastructure/proxmox/).

## Yêu cầu {#requirements}

| 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](https://nexcmp.com/vi/docs/infrastructure/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. |

::: warning 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 {#prepare-the-infrastructure}

Các lệnh sử dụng [CloudMonkey](https://cloudstack.apache.org/) (`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 {#create-a-dedicated-account-and-api-key}

1. Tạo domain để chứa toàn bộ tài nguyên do NexCMP quản lý.

   ```bash
   cmk create domain name=nexcmp
   ```

   Lưu lại `id` trong kết quả trả về; giá trị này được dùng làm `<domain-id>` ở bên dưới.

2. Tìm role bạn muốn gán cho account.

   ```bash
   cmk list roles type=DomainAdmin filter=id,name
   ```

   | Role | 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.vm` là true; khi đó NexCMP sẽ tắt VM và CloudStack sẽ expunge VM sau `expunge.delay`. |

3. 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.

   ```bash
   cmk 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>
   ```

4. Tạo cặp API key cho user mới.

   ```bash
   cmk list users domainid=<domain-id> username=nexcmp-api filter=id,username
   cmk generate userkeys id=<user-id>
   ```

   Sao chép `apikey` và `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.

5. Đả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).

   ```bash
   cmk list resourcelimits domainid=<domain-id>
   ```

### Tạo guest network cho VM của khách hàng {#create-the-guest-network-for-customer-vms}

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 {#make-offerings-and-templates-visible}

- **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](https://nexcmp.com/vi/docs/infrastructure/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 {#optional-read-only-key-for-infrastructure-pages}

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=deny
```

Sau đó 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 {#check-the-network-path}

Từ máy chủ panel:

```bash
curl -fsS -o /dev/null -w '%{http_code}\n' https://cloudstack.example.com/client/api
```

Bấ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 {#connect-in-nexcmp}

### Trong wizard cài đặt {#in-the-setup-wizard}

Bước 2 của [wizard cài đặt](https://nexcmp.com/vi/docs/getting-started/setup-wizard/) 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.

![Bước 2 của wizard với CloudStack API URL và các key đã điền cùng zone và network được chọn sau khi nhấn Test connection](https://nexcmp.com/vi/docs/images/infrastructure/cloudstack-01-wizard-step.webp)

### Sau này, trong admin console {#later-in-the-admin-console}

1. Mở **Infrastructure › Cloud provider › CloudStack** và chọn tab **API connection**.
2. Điền vào thẻ **Connection**:

   | Trường | Giá trị ví dụ |
   |---|---|
   | Endpoint API | `https://cloudstack.example.com/client/api` |
   | API key (quyền ghi) | `XXXX` (để trống để giữ lại key đã lưu) |
   | Secret key | `XXXX` |
   | Khó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 |

      ![Tab API connection với endpoint ví dụ và các key đã được che](https://nexcmp.com/vi/docs/images/infrastructure/cloudstack-02-connect-form.webp)

3. 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 `listZones` và `listCapabilities`, cùng key chỉ đọc với `listSystemVms`.


4. 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.
5. 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.

      ![VM Policy, tab Provisioning, với ID network mặc định](https://nexcmp.com/vi/docs/images/infrastructure/cloudstack-04-provisioning.webp)

6. 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.

      ![Sales IP pools với tiền tố có thể bán 203.0.113. đã được thiết lập](https://nexcmp.com/vi/docs/images/infrastructure/cloudstack-05-sales-ip-pool.webp)

### Những dữ liệu NexCMP đọc và ghi {#what-nexcmp-reads-and-writes}

| 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 {#live-cpu-and-ram-and-bandwidth}

- **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 `vN` vớ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](https://nexcmp.com/vi/docs/infrastructure/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](https://nexcmp.com/vi/docs/catalog/bandwidth/).

## Kiểm tra {#verify}

1. **Test connection** trả về "Write key: OK" cùng zone của bạn và phiên bản CloudStack.
2. **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".
3. **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).
4. Đặ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 ý {#limits-and-notes}

- 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ố {#troubleshooting}

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


