CloudStack
관리자 위치: Infrastructure › Cloud provider › CloudStack › API connection (
/infra/cloudstack?tab=connect). 첫 번째 연결은 setup wizard 2단계에서도 진행할 수 있습니다.
작동 내용
NexCMP는 Apache CloudStack 클라우드에서 실행되는 가상 머신을 판매합니다. CloudStack API를 통해 VM을 배포, 시작, 중지, 크기 조절, 스냅샷 생성 및 삭제하고, 존에서 공인 IP 주소를 할당하며, 청구 및 대역폭 사용량을 읽고, 관리자 콘솔에 용량과 상태를 표시합니다. CloudStack은 하이퍼바이저의 진실의 원천(source of truth)으로 유지되며, NexCMP는 그 상단의 스토어프론트, 빌링 및 포털 역할을 합니다.
CloudStack이 메인 VM 소스인(또는 소스가 될) 경우 이 페이지를 사용하세요. 옆에 두 번째 소스를 추가하려면 Proxmox VE를 참고하세요.
요구 사항
| 항목 | 요구 사항 |
|---|---|
| CloudStack 버전 | 4.23이 테스트된 릴리스입니다. VM 콘솔에는 4.18 이상이 필요하며, 실행 중인 VM의 실시간 CPU/RAM 크기 조절에는 KVM이 포함된 4.23이 필요합니다. |
| 존 유형 | 고객 VM을 위한 게스트 네트워크가 하나 이상 있고 사용 가능한 주소가 있는 공인 IP 대역이 있는 존. |
| 하이퍼바이저 | KVM이 테스트된 하이퍼바이저입니다. |
| 계정 | NexCMP를 위해 생성된 전용 도메인 및 계정. ROOT 관리자 키는 절대 사용하지 마세요. |
| API 도달 가능성 | 패널 서버는 관리 서버 API URL(https://cloudstack.example.com/client/api)에 HTTP(S)로 도달할 수 있어야 합니다. VM 콘솔, 대역폭 및 Kubernetes 기능은 동일한 엔드포인트를 사용합니다. |
| 선택적 읽기 전용 키 | 두 번째 읽기 전용 키를 사용하면 관리자 콘솔에 호스트, 스토리지, 시스템 VM 및 공인 IP 대역이 표시됩니다. VM 판매에는 필요하지 않습니다. |
| 공인 IP | 존 내의 사용 가능한 공인 IPv4 주소. NexCMP가 판매할 수 있는 프리픽스는 Sales IP pools에서 설정됩니다. |
| 템플릿 | 준비된 비밀번호 사용 가능 템플릿 1개 이상과 계정에서 볼 수 있는 서비스 오퍼링 1개 이상. Templates를 참조하세요. |
| 스토리지 | 계정 볼륨을 위한 기본 스토리지, 그리고 스냅샷이나 이미지를 판매하는 경우 보조 스토리지. |
| 종속성 | 없음. Kubernetes, Private Cloud, Images, Bandwidth는 이 페이지에 의존합니다. |
ROOT 관리자 키를 사용하지 마십시오
NexCMP 전용 도메인과 계정을 만드세요. 그러면 키가 해당 도메인에만 도달하며, 키가 유출되어도 클라우드의 나머지 부분에는 영향을 미치지 않습니다. 설정 마법사는 또한 선택한 네트워크가 키를 소유한 영역 및 계정에 속하는지 확인합니다.
인프라 준비
명령어는 CloudStack 관리자로 로그인한 상태에서 CloudMonkey(cmk)를 사용합니다. 예시 이름과 꺾쇠괄호 안의 플레이스홀더를 교체하십시오.
전용 계정 및 API 키 생성
NexCMP가 소유할 모든 항목을 담을 도메인을 생성합니다.
bashcmk create domain name=nexcmp출력에서
id을(를) 확인해 두세요. 아래에서<domain-id>로 사용됩니다.계정에 부여할 역할을 찾습니다.
bashcmk list roles type=DomainAdmin filter=id,name역할 선택 시기 Domain Admin (권장) 전체 기능 세트: VM, 네트워크, Kubernetes용 프로젝트, VPC, 이미지. nexcmp도메인까지만 권한이 미칩니다.User VM 수명 주기 전용입니다. 전역 설정 allow.user.expunge.recover.vm이 true가 아닌 한 일반 사용자는 VM을 영구 삭제(expunge)할 수 없으며, 이 경우 NexCMP가 VM을 중지하고 CloudStack이expunge.delay경과 후 영구 삭제합니다.계정과 첫 번째 사용자를 생성합니다. 다시 입력할 일이 없으므로 길고 무작위인 비밀번호를 사용하십시오.
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>새 사용자를 위한 API 키 쌍을 생성합니다.
bashcmk list users domainid=<domain-id> username=nexcmp-api filter=id,username cmk generate userkeys id=<user-id>apikey및secretkey을 복사합니다. 이는 NexCMP에 입력할 API key 및 Secret key입니다. NexCMP는 이를 암호화하여 저장하며, 이후에는 마지막 4자리만 표시합니다.도메인에 제한적인 리소스 한도(Instances, 볼륨, 공용 IP, 네트워크, Snapshots, 템플릿, 프로젝트)가 설정되어 있지 않은지 확인하십시오.
bashcmk list resourcelimits domainid=<domain-id>
고객 VM용 게스트 네트워크 생성
고객 VM은 새 계정에 속한 하나의 게스트 네트워크에 배포됩니다. NexCMP는 static NAT를 통해 각 VM에 공용 IP를 연결하므로 가상 라우터(VR) 및 Static NAT, Firewall, Port Forwarding 서비스를 갖춘 격리된 네트워크가 적합합니다.
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>오퍼링의 기본 egress 정책을 확인하십시오. "deny"로 설정되어 있으면 방화벽 egress 규칙이 추가될 때까지 고객 VM의 아웃바운드 액세스가 차단됩니다.
오퍼링 및 템플릿 표시 설정
- Service offerings 및 network offerings는 공개(public) 상태이거나
nexcmp도메인에 할당되어야 합니다. 그렇지 않으면 해당 계정에서 이를 조회하거나 사용할 수 없습니다. - 최소 하나 이상의 템플릿을 등록하거나 공유하십시오(Templates 참조). NexCMP에는 ready 및 featured 상태인 템플릿이 표시됩니다.
선택 사항: 인프라 페이지용 읽기 전용 키
Capacity, Host, Storage, System VM 탭과 공용 IP 대역 목록은 6개 명령어에 대한 읽기 권한만 필요한 보조 키를 사용합니다. 전체 관리자 키를 재사용하는 대신 제한된 역할을 생성하십시오:
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그런 다음 해당 역할을 가진 계정을 ROOT 도메인에 생성하고(Zone 전체 데이터를 읽어야 하므로), 4단계와 같이 키를 생성한 후 다음 섹션에서 RO API key로 입력합니다.
네트워크 경로 확인
패널 서버에서 실행:
bash
curl -fsS -o /dev/null -w '%{http_code}\n' https://cloudstack.example.com/client/api어떤 HTTP 응답(4xx조차도)이든 포트에 도달할 수 있음을 증명합니다. 타임아웃은 귀하의 측면에 방화벽 또는 DNS 문제가 있음을 의미합니다.
NexCMP에서 연결
설정 마법사에서
설정 마법사의 2단계에서는 동일한 값을 묻습니다. Test connection은 키가 볼 수 있는 존과 네트워크를 나열합니다. 존과 게스트 네트워크, 존의 표시 이름과 국가를 선택한 후 Save CloudStack을 클릭합니다. 마법사는 해당 존에 없거나 키에서 볼 수 없는 네트워크는 거부합니다.

나중에 관리자 콘솔에서
Infrastructure › Cloud provider › CloudStack을 열고 API connection 탭을 선택합니다.
Connection 카드에 입력합니다:
필드 Example value Endpoint API https://cloudstack.example.com/client/apiAPI 키 (쓰기 권한) XXXX(저장된 키를 유지하려면 비워 두세요)Secret key XXXXRO API 키 / RO 시크릿 키 선택 사항, 읽기 전용 계정에서 가져옴 Zone ID 존의 UUID 
저장하기 전에 Test connection을 클릭합니다. 키를 저장하지 않고 입력한 키를 테스트합니다. 쓰기 키는
listZones및listCapabilities로, 읽기 전용 키는listSystemVms으로 테스트합니다.Save connection을 클릭합니다. Enable CloudStack connection은 켜둔 상태로 유지하세요. 이를 끄면 데이터 손실 없이 워커가 모든 CloudStack 작업을 중지합니다.
Services › Virtual Machines › Policy › Provisioning을 열어 새 VM을 위한 기본 게스트 네트워크, 커스텀 오퍼링 및 기본 키 페어를 설정합니다.

Infrastructure › Cloud provider › Sales IP pools을 열고 Configure sales ranges 아래에서 Sellable IP range prefixes(예:
203.0.113.) 및 존의 일부 주소를 절대 판매하지 않아야 하는 경우 Excluded IP prefixes를 설정합니다. 모든 자유 주소를 허용하려면 접두사를 비워 둡니다.
NexCMP가 읽고 쓰는 항목
| 영역 | 읽기 | 변경 |
|---|---|---|
| VMs | 목록, 상태, 사용량 이력, 콘솔 엔드포인트 | 배포, 시작, 중지, 재부팅, 재설치, 삭제, 크기 조정, 비밀번호 및 SSH Keys 초기화 |
| 디스크 및 스냅샷 | 볼륨, VM 스냅샷, 백업 | 생성, 연결, 해제, 크기 변경, 삭제, 스냅샷, 복원 |
| 네트워킹 | 네트워크, 라우터, 공인 IP, 방화벽, 포트 포워딩, 로드 밸런서 규칙 | 공인 IP 할당 및 해제, 정적 NAT, 방화벽, 포트 포워딩, 송신 규칙, 프라이빗 클라우드를 위한 네트워크 및 ACL |
| 카탈로그 | 서비스, 디스크 및 네트워크 오퍼링, 템플릿, ISO, OS 유형 | 템플릿 및 ISO(이미지) 등록 및 삭제, 커스텀 플랜 생성 시 서비스 오퍼링 |
| Kubernetes | 지원되는 버전, 클러스터, 설정 | 프로젝트, 리소스 제한, 네트워크, 클러스터(Kubernetes 모듈) |
| 읽기 전용 키 | 호스트, 클러스터, 스토리지 풀, 시스템 VM, 용량, VLAN IP 대역 | 없음 |
실시간 CPU, RAM 및 대역폭
- 핫플러그. 실행 중인 VM은 템플릿에서 허용하고(동적 확장 가능) 게스트 OS가 새 CPU와 RAM을 온라인 상태로 전환하는 경우에만 재부팅 없이 크기를 조정할 수 있습니다. NexCMP는 이름이
vN으로 끝나고 N이 6 이상인 템플릿에 대해 Auto Scaling을 켜거나, 템플릿의 vCPU/RAM hot-plug 필드에서 직접 설정한 경우에 이를 활성화합니다. Templates 문서를 참고하세요. - 대역폭 소스. 기본 설정에서 NexCMP는 CloudStack VM 통계(
listVirtualMachinesUsageHistory, 5분마다 폴링되며 VM 네트워크 인터페이스별로 합산됨)에서 트래픽을 측정합니다. 이 수치에는 VM 간 트래픽이 포함되므로 엣지 라우터가 집계하는 값보다 약간 높을 수 있습니다. CloudStack VM 통계 수집을 활성화 상태로 유지하세요. 통계 보존 기간보다 긴 공백 시간은 건너뜁니다. Bandwidth 문서를 참고하세요.
확인
- Test connection은(는) 사용자의 존과 CloudStack 버전이 포함된 "Write key: OK" 메시지를 반환합니다.
- Infrastructure › Cloud provider › Providers에서 해당 공급자가 최근 테스트 시간과 함께 활성 상태로 표시됩니다. 대시보드 상태 패널에 더 이상 "CloudStack: not connected"가 표시되지 않습니다.
- Sales IP pools에 사용 가능한 주소가 표시됩니다(약 1분마다 새로 고쳐짐).
- 고객 포털 또는 관리자 콘솔에서 소형 VM을 주문하고 Running 상태에 도달하는지, 공인 IP가 할당되는지, 콘솔을 열 수 있는지 확인하세요.
제한 사항 및 참고 사항
- 현재 NexCMP 릴리스에서는 하나의 CloudStack 클러스터만 연결할 수 있습니다. Add cloud provider 대화상자에서는 두 번째 클러스터의 키를 테스트할 수 있지만 저장할 수는 없습니다.
- 하나의 CloudStack 존이 NexCMP의 기본 존에 연결됩니다. 여러 존이 있는 CloudStack의 경우 입력한 존으로 범위가 제한되므로 다른 존의 VM, IP 및 네트워크는 무시됩니다.
- CloudStack에서 게스트 네트워크를 삭제하면 이후 모든 배포가 실패하게 됩니다. 네트워크가 사라지면 관리자 콘솔에 빨간색 알림이 표시됩니다.
- 자격 증명은 서버 외부로 절대 유출되지 않습니다. API는 마지막 4자리의 문자만 반환합니다.
Troubleshooting
| 증상 | 원인 | 해결 방법 |
|---|---|---|
listCapabilities: cloudstack 401: unable to verify user credentials and/or request signature | 잘못된 API 키 또는 시크릿, 다른 사용자의 키, 또는 패널 서버의 시계 설정 문제 | cmk generate userkeys을(를) 사용하여 키를 다시 생성하고 둘 다 붙여넣으세요. 패널 서버의 시간을 확인하세요. |
테스트: listZones: … 또는 시간 초과 | 패널 서버가 API URL에 도달할 수 없음 | DNS, 방화벽 및 정확한 /client/api 경로를 확인하세요. |
| 마법사: "network not found in that zone for this API key" | 선택한 네트워크가 다른 계정 또는 존에 속해 있음 | 전용 계정에서 네트워크를 생성하고(위 참조) Test connection을(를) 다시 실행하세요. |
| 마법사: "pick a zone and a network" | 테스트가 실행되지 않았거나 존 또는 네트워크가 선택되지 않음 | Test connection을(를) 클릭하고 두 목록 모두 선택하세요. |
| 배너 "CloudStack key not configured" | 아직 저장된 키가 없음 ("Connect later") | Connection 카드 작성 후 Save connection, 그 다음 Test connection을(를) 클릭하세요. |
| 배너 "CloudStack connection is OFF" | Enable CloudStack connection 스위치가 꺼져 있음 | 스위치를 켜고 저장하세요. |
| 읽기 전용 키: 테스트 중 "unusable …" | 역할 권한 누락 또는 잘못된 계정 | 허용된 6개의 명령어가 올바른지, 계정이 ROOT 도메인에 속해 있는지 확인하세요. |
| "Zone public IP ranges not measured yet" 또는 "no public IP ranges declared" | 읽기 전용 키가 없거나 해당 존에 공인 IP 대역이 실제로 선언되지 않음 | 읽기 전용 키를 추가하거나 CloudStack에 공인 IP 대역을 추가합니다. |
| "풀 비어 있음 — vmd 동기화를 위해 60초 대기" | 작업자(worker)가 1분마다 IP 목록을 새로고침합니다. | 1분간 기다린 후 새로고침합니다. |
| "203.0.113. 범위에 사용 가능한 IP가 없음" | 판매 가능한 프리픽스의 모든 주소가 사용 중입니다. | 영역에 주소를 추가하고, 프리픽스를 넓히거나 사용하지 않는 IP를 반환합니다. |
| "네트워크 데이터를 가져오지 못했습니다 (CloudStack 응답 없음 또는 키 권한 부족)" | 키 권한이 손실되었거나 CloudStack이 응답하지 않습니다. | Test connection을 실행하고 계정이 활성화되어 있는지 확인합니다. |
| "게스트 네트워크가 존재하지 않습니다" | CloudStack에서 네트워크가 삭제되었습니다. | 네트워크를 다시 생성하고 프로비저닝(Provisioning) 아래에서 기본값으로 설정합니다. |