VM Multi‐Network Management Guide - cloud-barista/cb-spider GitHub Wiki

VM Multi-Network Management Guide

문서 내용에는 LLM을 이용해 수집 및 생성된 정보가 포함되어 있음

목차

  1. VM Multi-Network 개요
  2. AI 추론 서비스를 위한 VM Multi-Network 필요성
  3. CB-Spider VM Multi-Network 추진 현황
  4. CB-Spider VM Multi-Network 관련 향후 추진 계획

1. VM Multi-Network 개요

VM Multi-Network란 하나의 VM(가상머신)에 복수 개의 네트워크 인터페이스(NIC) 또는 복수 개의 Private IP를 부여하여, VM이 둘 이상의 서브넷 또는 네트워크에 동시에 속하거나 다수의 IP로 서비스를 제공할 수 있도록 구성하는 기능이다.

일반적으로 VM 생성 시 기본 NIC 1개와 Primary Private IP 1개가 부여되는 단일 네트워크 구성으로 활용되지만, 관리망 분리, AI 추론, 고가용성 서비스, 컨테이너 호스트, 보안 구간 분리 등 다양한 워크로드 제공을 위해서는 VM에 다중 네트워크 구성이 필요하다.

CB-Spider VM Multi-Network 구성 개념 및 주요 구성 요소가 다음과 같다.

[VM Multi-Network 구성 개념]

  ┌──────────────────────────────────────────┐
  │                  VM                      │
  │                                          │
  │  ┌───────────┐       ┌──────────┐        │
  │  │  NIC-0    │       │  NIC-1   │  ...   │
  │  │10.0.1.10  │       │10.0.2.20 │        │
  │  │10.0.1.11  │       │          │        │
  │  │(secondary)│       │          │        │
  │  └────┬──────┘       └────┬─────┘        │
  └───────┼───────────────────┼──────────────┘
          │                   │
    [Subnet-A: 앱망]   [Subnet-B: DB망]

주요 구성 요소:

구성 요소 설명
NIC (Network Interface Card) VM에 부착되는 가상 네트워크 인터페이스. 서브넷 소속이며 Primary Private IP를 제공
Secondary Private IP 기존 NIC에 추가로 부여되는 IP 주소. 동일 서브넷 내에서 복수 IP 운용 가능
Public IP NIC-Private IP 또는 VM에 연결되는 외부 접근용 공인 IP. Private IP와 1:1 매핑

2. AI 추론 서비스를 위한 VM Multi-Network 필요성

AI 추론 서비스를 위한 AI반도체(GPU/TPU/NPU 등) 기반 VM 클러스터에서 AI반도체 간 고속 연산을 위해서 타 트래픽과 분리된 고속 인터커넥트 네트워크를 구성하기 위해서는 VM Multi-Network 기능 제공이 필요하다.

  • 단, CSP별로 고속 인터커넥트 네트워크 설정 방식이 다를 수 있음(향후 추가 분석 필요)

* 참고: CSP별 고속 네트워크 자원 제공 현황

CSP 기술 최대 대역폭 상용 수준
AWS EFA (커스텀 SRD) 28.8 Tbps (UltraServer) ★★★★★
Azure Native InfiniBand NDR 800 Gbps/VM ★★★★★
GCP RoCEv2 + Titanium/Falcon 3,200~3,600 Gbps ★★★★★
Alibaba RoCEv2 + Stellar 100K GPU 클러스터 ★★★★☆
Tencent Xingmai 자체 패브릭 100K GPU 클러스터 ★★★★☆
IBM 일반 이더넷 (25 Gbps) 25 Gbps ★★☆☆☆
OpenStack 배포 환경 의존 환경 의존 ★★★☆☆
NCP Fabric Cluster (상세 미공개) 미공개 ★★★☆☆
NHN B200 클러스터 (상세 미공개) 미공개 ★★☆☆☆
KT 미공개 미공개 ★★☆☆☆

AI 추론 클러스터 전용 고속 인터커넥트망 구성 예시

서비스망과 GPU/NPU 서버 간 모델 파라미터 동기화 및 병렬처리를 위한 고속망으로 구성

[AI 추론 클러스터 Multi-NIC 구성 예시]

  ┌─────────────────────────────────┐
  │         GPU 추론 서버 VM          │
  │                                 │
  │  NIC-0 (10G)  │  NIC-1 (100G+)  │
  │  서비스 트래픽   │  GPU 인터커넥트    │
  └──────┬────────┴────────┬────────┘
         │                 │
   [외부 요청망]        [고속 인터커넥트망]
                    (RoCE / InfiniBand)
                  ┌──────┴───────┐
             [GPU 서버 A]   [GPU 서버 B]
항목 내용
목적 GPU/NPU 간 직접 통신 (모델 파라미터 동기화, 텐서 병렬처리)
네트워크 RoCE (RDMA over Converged Ethernet), InfiniBand
네트워크 구성 서비스 트래픽 NIC (10G) + 인터커넥트 전용 NIC (100G/400G) 분리
적용 CSP AWS (EFA), Azure (InfiniBand H/N 시리즈), Alibaba (eRDMA) 등

참고: 클라우드 환경에서 고속 인터커넥트는 일반 NIC 생성이 아닌 CSP 전용 인스턴스 타입(EFA, InfiniBand 지원 인스턴스) 선택으로 처리. 구체적인 Multi-네트워크 구성 및 고속 NIC 제공 방법 등은 향후 추가 분석 필요.


3. CB-Spider VM Multi-Network 추진 현황

3.1 CB-Spider VM Multi-Network 운영 형상 및 기능

CB-Spider VM Multi-Network는 NIC 관리Public IP 관리 두 축으로 구성된다.(since CB-Spider v0.12.33)

전체 운영 형상

[CB-Spider VM Multi-Network 운영 형상]

                  CB-Spider REST API
                        │
          ┌─────────────┴─────────────┐
          │                           │
    [NIC 관리]                 [Public IP 관리]
          │                           │
  ┌───────┴────────┐         ┌────────┴────────────┐
  │ CreateNIC      │         │ CreatePublicIP      │
  │ ListNIC        │         │ ListPublicIP        │
  │ GetNIC         │         │ GetPublicIP         │
  │ DeleteNIC      │         │ DeletePublicIP      │
  │ AttachNIC ─────┼────┐    │ AssociatePublicIP   │
  │ DetachNIC      │    │    │ DisassociatePublicIP│
  │ AddPrivateIP   │    │    └────────┬────────────┘
  │ RemovePrivateIP│    │             │
  │ GetOSConfig    │    │    ┌────────┴──────────┐
  └───────┬────────┘    │    │  Private IP에 매핑  │
          │             │    └───────────────────┘
          └─────────────┤
                   ┌────┴──────────────────────┐
                   │           VM              │
                   │  NIC-0 ── 10.0.1.10       │
                   │           10.0.1.11       │
                   │  NIC-1 ── 10.0.2.20       │
                   └───────────────────────────┘

NIC 관리 기능

기능 API 설명
NIC 생성 POST /nic VPC/Subnet/SecurityGroup 지정하여 독립 NIC 생성
NIC 목록 GET /nic 현재 ConnectionConfig의 NIC 목록 조회
NIC 상세 GET /nic/:Name 특정 NIC 상세 정보 조회
NIC 삭제 DELETE /nic/:Name NIC 삭제 (Detach 후 삭제 필요)
NIC Attach PUT /nic/:Name/attach VM에 NIC 부착
NIC Detach PUT /nic/:Name/detach VM에서 NIC 탈착
Secondary IP 추가 POST /nic/:Name/privateip NIC에 Secondary Private IP 추가
Secondary IP 삭제 DELETE /nic/:Name/privateip/:IP NIC의 Secondary Private IP 삭제
OS 설정 스크립트 조회 GET /nic/:Name/osconfigscript NIC Attach 후 VM 내부에서 실행할 OS 설정 스크립트 조회

NICInfo 구조:

필드 타입 설명
IId IID NIC 식별자 {NameId, SystemId}
VpcIID IID NIC가 속한 VPC
SubnetIID IID NIC가 속한 Subnet
SecurityGroupIIDs []IID 연결된 보안 그룹 목록
PrivateIP string Primary Private IP (편의 필드)
PrivateIPs []string 전체 Private IP 목록 (Primary + Secondary)
PublicIPs []string PrivateIPs와 인덱스 대응되는 Public IP 목록
OwnerVM IID 부착된 VM
DeviceIndex int 0=기본 NIC, 1,2,...=추가 NIC
MACAddress string MAC 주소
Status NICStatus Available / Attached / Deleting / Error

NIC 상태 전이:

[생성] → Available → [AttachNIC] → Attached → [DetachNIC] → Available → [DeleteNIC] → (삭제됨)

Public IP 관리 기능

기능 API 설명
Public IP 생성 POST /publicip 독립 Public IP 할당
Public IP 목록 GET /publicip 할당된 Public IP 목록 조회
Public IP 상세 GET /publicip/:Name 특정 Public IP 상세 정보 조회
Public IP 삭제 DELETE /publicip/:Name Public IP 반환 (Disassociate 후 삭제 필요)
Public IP 연결 PUT /publicip/:Name/associate NIC의 Private IP에 Public IP 연결
Public IP 해제 PUT /publicip/:Name/disassociate Public IP 연결 해제

PublicIPInfo 구조:

필드 타입 설명
IId IID Public IP 식별자
PublicIPAddress string 할당된 공인 IP 주소
Status PublicIPStatus Available / Associated / Deleting / Error
OwnedVM IID 연결된 VM
OwnedNIC IID 연결된 NIC
OwnedPrivateIP string 매핑된 Private IP 주소

Public IP 상태 전이:

[생성] → Available → [AssociatePublicIP] → Associated → [DisassociatePublicIP] → Available → [DeletePublicIP] → (삭제됨)

Network Topology UI 제공

  • AdminWeb: VPC 중심의 Network Topology PoC 제공
  • Network Topology UI 예시

3.2 지원 대상 CSP 및 제약 사항

1차 지원 대상 CSP

1차 배포는 멀티 네트워크 구성에 필요한 핵심 API(NIC 독립 생성, VM Attach, NIC별 Public IP 연결)를 모두 지원하는 CSP를 대상으로 한다.

CSP NIC 생성/Attach Secondary IP Public IP (NIC별)
AWS O O O
Azure O O O
Alibaba O O O
Tencent O O O
IBM O O O
OpenStack O O O

미지원 CSP 및 제약 사항

다음 CSP들은 다음과 같은 제약 등으로 인해 1차 배포에서 제외되었으며, 향후 필요 시점에 재고려한다.

CSP 제약 사항 향후 고려
GCP Spider가 현재 nic0 고정 사용. 플랫폼은 멀티 NIC + NIC별 외부 IP 지원하나 Spider 개선 필요. RDMA/InfiniBand는 CSP 전용 인스턴스 타입으로만 제공 멀티 NIC 지원 개선 후 재고려
NHN 플랫폼에서 AttachNIC API 미지원 (콘솔 전용). Secondary IP는 동일 서브넷만 가능. Public IP는 VM 단위만 지원 플랫폼 API 지원 시 재고려
KT 플랫폼에서 NIC 독립 생성 API 미지원 (POST /ports → 500). Secondary IP는 ports.Update로 구현(동작 미검증). Public IP는 StaticNAT(Secondary IP당 개별 매핑 가능) 플랫폼 API 지원 확인 후 재고려
NCP 플랫폼에서 서버 인스턴스당 Public IP 1개 제한. NIC Attach는 지원하나 Private 서브넷만 가능. Public IP는 VM 단위만 지원 플랫폼 정책 변경 시 재고려

CSP별 1개 VM에 2개 이상의 Private IP / Public IP 지원 현황 요약

CSP 2개 이상 Private IP 방법 2개 이상 Public IP 방법
AWS O ENI Secondary IP O ENI별 EIP
Azure O NIC IP Configuration O NIC별 PublicIP
Alibaba O ENI Secondary IP O ENI별 EIP
Tencent O ENI Secondary IP O ENI별 EIP
IBM O NIC Secondary IP O NIC별 FloatingIP
OpenStack O Port FixedIPs O 포트별 FloatingIP
GCP O 플랫폼(Spider 미구현) Alias IP Range O 플랫폼(Spider 개선 필요) NIC별 AccessConfig
NHN O Port FixedIPs (동일 서브넷) X 플랫폼 제약
KT O 동작 미검증 Port FixedIPs O StaticNAT (PrivateIP당)
NCP O AssignSecondaryIps X 플랫폼 1개 제한

VM Multi-Network 타입별 CSP 지원 현황 및 Spider 지원 타입

  • CB-Spider VM Multi-Network 지원 타입: 아래 테이블 참고
  • CB-Spider는 현재 ① 동일 서브넷 VM간② 동일 VPC 다른 서브넷 VM간 네트워크 구성 지원을 목표로 한다.
  • 즉, 서로 다른 VPC에 포함된 VM간 Multi-Network 구성 지원은 제외
    • 사유: CSP별 특성이 강한 VPC Peering, Transit Gateway 등 복잡한 추상화 추가 필요
구성 형태 AWS·Azure·Alibaba·Tencent·IBM·OpenStack GCP NHN KT NCP
① 동일 서브넷 VM간 O O O O O
② 동일 VPC 다른 서브넷 VM간 O Spider API로 가능 O Spider 개선 필요 X 플랫폼 제약 X 플랫폼 제약 O Spider API로 가능
③ 다른 VPC VM간 O VPC Peering 등 별도 자원 추가 제어 필요 O NIC를 다른 VPC에 직접 배치 가능 X X O VPC Peering 별도 필요

3.3 배포 상태 및 시험 결과

배포 버전: (v0.12.33)

배포 상태: WIP(현재 6개 csp만 제공)

항목 내용
상태 WIP (Work In Progress) 상태로 배포
비고 변경된 소스 커버리지가 넓어 조기에 코드 통합. NICHandler, PublicIPHandler 신규 추가 및 기존 VMHandler, CommonManager, REST Runtime 등 다수 파일 변경 포함

시험 결과: Public IP 기반 VM Multi-Network 구성만 시험 완료

기능 AWS Azure Alibaba Tencent IBM OpenStack
Public IP 생성 O O O O O O
Public IP 조회 O O O O O O
Public IP 삭제 O O O O O O
NIC 생성 O O O O O O
NIC Attach to VM O O O O O O
NIC Detach from VM O O O O O O
Secondary IP 추가 O O O O O O
Secondary IP 삭제 O O O O O O
SSH Login to VM(new IP) O O O O O O
AssociatePublicIP - - - - - -
DisassociatePublicIP - - - - - -

미시험: AssociatePublicIP, DisassociatePublicIP


3.4 REST API 소개 및 활용 예시

모든 API 호출 시 ConnectionName 헤더로 대상 클라우드 연결 설정을 지정한다.

[1. Public IP 생성]

curl -sX POST http://localhost:1024/spider/publicip \
  -H 'Content-Type: application/json' \
  -d '{
    "ConnectionName": "aws-ap-northeast-2",
    "ReqInfo": {
      "IId": { "NameId": "my-public-ip-01" }
    }
  }' | jq

응답 예시:

{
  "IId": { "NameId": "my-public-ip-01", "SystemId": "eipalloc-0a1b2c3d4e5f" },
  "PublicIPAddress": "52.78.100.200",
  "Status": "Available",
  "CreatedTime": "2025-06-22T10:00:00Z"
}

[2. Public IP를 VM에 연결]

curl -sX PUT http://localhost:1024/spider/publicip/my-public-ip-01/associate \
  -H 'Content-Type: application/json' \
  -d '{
    "ConnectionName": "aws-ap-northeast-2",
    "ReqInfo": {
      "VMIID":     { "NameId": "my-vm-01" },
      "NICIID":    { "NameId": "my-nic-01" },
      "PrivateIP": "10.0.1.10"
    }
  }' | jq

[3. Public IP 연결 해제]

curl -sX PUT http://localhost:1024/spider/publicip/my-public-ip-01/disassociate \
  -H 'Content-Type: application/json' \
  -d '{ "ConnectionName": "aws-ap-northeast-2" }' | jq

[4. NIC 생성]

curl -sX POST http://localhost:1024/spider/nic \
  -H 'Content-Type: application/json' \
  -d '{
    "ConnectionName": "aws-ap-northeast-2",
    "ReqInfo": {
      "IId":       { "NameId": "my-nic-01" },
      "VpcIID":    { "NameId": "my-vpc" },
      "SubnetIID": { "NameId": "my-subnet-b" },
      "SecurityGroupIIDs": [
        { "NameId": "my-sg" }
      ]
    }
  }' | jq

응답 예시:

{
  "IId": { "NameId": "my-nic-01", "SystemId": "eni-0a1b2c3d4e5f" },
  "VpcIID":    { "NameId": "my-vpc",      "SystemId": "vpc-xxx" },
  "SubnetIID": { "NameId": "my-subnet-b", "SystemId": "subnet-yyy" },
  "PrivateIP":  "10.0.2.15",
  "PrivateIPs": ["10.0.2.15"],
  "Status": "Available"
}

[5. NIC를 VM에 부착]

curl -sX PUT http://localhost:1024/spider/nic/my-nic-01/attach \
  -H 'Content-Type: application/json' \
  -d '{
    "ConnectionName": "aws-ap-northeast-2",
    "ReqInfo": {
      "VMIID": { "NameId": "my-vm-01" }
    }
  }' | jq

[6. Secondary Private IP 추가]

curl -sX POST http://localhost:1024/spider/nic/my-nic-01/privateip \
  -H 'Content-Type: application/json' \
  -d '{
    "ConnectionName": "aws-ap-northeast-2",
    "ReqInfo": {
      "PrivateIP": "10.0.1.11"
    }
  }' | jq

[7. Secondary Private IP 삭제]

curl -sX DELETE http://localhost:1024/spider/nic/my-nic-01/privateip/10.0.1.11 \
  -H 'Content-Type: application/json' \
  -d '{ "ConnectionName": "aws-ap-northeast-2" }' | jq

[8. NIC 탈착]

curl -sX PUT http://localhost:1024/spider/nic/my-nic-01/detach \
  -H 'Content-Type: application/json' \
  -d '{ "ConnectionName": "aws-ap-northeast-2" }' | jq

[9. NIC OS 설정 스크립트 조회]

클라우드 API로 NIC를 VM에 Attach한 후, CSP에 따라 VM 내부 OS에서 수동으로 네트워크 인터페이스를 활성화해야 하는 경우가 있다. AWS는 DHCP 기반 자동 설정(ec2-net-utils)이 동작하므로 별도 OS 설정이 불필요하지만, Azure·Alibaba·Tencent·IBM·OpenStack은 사용자가 VM 내부에서 직접 인터페이스 설정 명령을 실행해야 한다.

이 API는 해당 NIC에 맞는 OS 설정 스크립트를 반환한다. AdminWeb에서는 Provisioning Info 팝업의 NIC 목록에서 secondary NIC 항목의 [OS Config] 버튼을 클릭하면 스크립트를 확인할 수 있다.

curl -sX GET http://localhost:1024/spider/nic/my-nic-01/osconfigscript \
  -H 'Content-Type: application/json' \
  -d '{ "ConnectionName": "azure-koreacentral" }' | jq

응답 예시 (Azure — OS 설정 필요):

{
  "ConnectionName": "azure-koreacentral",
  "NICName": "my-nic-01",
  "Script": "#!/bin/bash\n# Azure secondary NIC OS configuration script\n# Run as root inside the VM after attaching the NIC via cloud API.\n\nNIC=$(ip -o link show | awk -F': ' '{print $2}' | grep -E '^(eth|ens)' | while read iface; do\n  ip addr show \"$iface\" | grep -q 'inet ' || echo \"$iface\"\ndone | head -1)\n\n[ -z \"$NIC\" ] && { echo 'No unconfigured NIC found.'; exit 0; }\n\nPRIV_IP=\"10.0.2.15\"\nPREFIX=\"24\"\nGW=\"10.0.2.1\"\nTABLE_ID=\"101\"\n\nip link set \"$NIC\" up\nip addr add \"${PRIV_IP}/${PREFIX}\" dev \"$NIC\"\nip route add default via \"$GW\" dev \"$NIC\" table \"$TABLE_ID\"\nip rule add from \"$PRIV_IP\" table \"$TABLE_ID\"\necho \"NIC $NIC configured: $PRIV_IP/$PREFIX via $GW (table $TABLE_ID)\"\n"
}

응답 예시 (AWS — OS 설정 불필요):

{
  "ConnectionName": "aws-ap-northeast-2",
  "NICName": "my-nic-01",
  "Script": ""
}

Script가 빈 문자열이면 해당 CSP는 DHCP 등으로 자동 설정되므로 VM 내부 조작이 불필요하다.

CSP별 OS 설정 필요 여부:

CSP OS 설정 필요 비고
AWS X ec2-net-utils / cloud-init DHCP 자동 설정
Azure O ip link/addr/route 수동 설정 필요
Alibaba O ip link/addr/route 수동 설정 필요
Tencent O ip link/addr/route 수동 설정 필요
IBM O ip link/addr/route 수동 설정 필요
OpenStack O ip link/addr/route 수동 설정 필요
GCP(현재 미지원) X NIC는 인스턴스 생성 시만 지정 가능
NHN(현재 미지원) X AttachNIC API 미지원
KT(현재 미지원) X NIC 독립 생성 API 미지원
NCP(현재 미지원) X Private 서브넷 DHCP 자동 설정

[전체 흐름 예시: VM에 추가 NIC + Public IP 구성]

# 1. 추가 NIC 생성 (Subnet-B)
curl -sX POST http://localhost:1024/spider/nic \
  -d '{"ConnectionName":"aws-ap-northeast-2","ReqInfo":{"IId":{"NameId":"extra-nic"},"VpcIID":{"NameId":"my-vpc"},"SubnetIID":{"NameId":"subnet-b"},"SecurityGroupIIDs":[{"NameId":"my-sg"}]}}'

# 2. VM에 NIC 부착
curl -sX PUT http://localhost:1024/spider/nic/extra-nic/attach \
  -d '{"ConnectionName":"aws-ap-northeast-2","ReqInfo":{"VMIID":{"NameId":"my-vm"}}}'

# 3. (AWS 제외) OS 설정 스크립트 조회 후 VM 내부에서 실행
curl -sX GET http://localhost:1024/spider/nic/extra-nic/osconfigscript \
  -d '{"ConnectionName":"aws-ap-northeast-2"}' | jq -r '.Script'
# 출력된 스크립트를 VM에 ssh 접속 후 root 권한으로 실행

# 4. Public IP 생성
curl -sX POST http://localhost:1024/spider/publicip \
  -d '{"ConnectionName":"aws-ap-northeast-2","ReqInfo":{"IId":{"NameId":"extra-pip"}}}'

# 5. Public IP를 NIC의 Private IP에 연결
curl -sX PUT http://localhost:1024/spider/publicip/extra-pip/associate \
  -d '{"ConnectionName":"aws-ap-northeast-2","ReqInfo":{"NICIID":{"NameId":"extra-nic"},"PrivateIP":"10.0.2.15"}}'

4. CB-Spider VM Multi-Network 관련 향후 추진 계획

  • Private IP 기반 Multi-Network 구성 시험/개선
  • VM 기본 NIC의 기본 Public IP 착탈 등 시험/개선
  • VM Multi-Network 고속 인터커넥트망 구성 지원 가능성 추가 분석
  • 참고: 추가 필요 기능 예시
필요 기능 내용
NIC 타입 지정 NICReqInfo에 NIC 타입 필드 추가 (일반 / EFA / InfiniBand / SR-IOV)
고대역폭 NIC 지정 NIC 생성 시 대역폭 지정 (10G / 100G / 400G)
Placement Group 지원 VMReqInfo에 Placement Group / Cluster 배치 옵션 추가
VMSpec RDMA 정보 VMSpec 조회 결과에 RDMA / 고속 인터커넥트 지원 여부 포함

※ 참고: CB-Spider VM Networking 지원 목표