MultiNic은 OpenStack 네트워크와 Kubernetes 클러스터를 통합하는 고성능 네트워크 컨트롤러입니다. Operator Pattern을 활용하여 멀티 네트워크 인터페이스를 안전하고 자동화된 방식으로 관리합니다.
- OpenStack Nova(컴퓨트) 및 Neutron(네트워크) API와 완전 통합
- 실시간 VM 상태 동기화 및 네트워크 인터페이스 관리
- 다중 서브넷 및 네트워크 정책 지원
- ValidatingWebhook을 통한 시스템 무결성 보호
- RBAC 기반 권한 분리 및 최소 권한 원칙 적용
- 자동 복구 및 생명주기 관리
- 연결 풀링, HTTP 클라이언트 최적화
- Prometheus 메트릭 및 실시간 모니터링
- 헬스체크 및 상태 추적
- MariaDB를 통한 네트워크 상태 영속화
- 암호화된 인증 정보 저장
- 자동 백업 및 복구 지원
┌─────────────────────────────────────────────────────────┐
│ Kubernetes Cluster │
│ ┌─────────────────────────────────────────────────────┐│
│ │ multinic-system Namespace ││
│ │ ││
│ │ ┌────────────────────────────────────────────────┐ ││
│ │ │ MultiNic Operator │ ││
│ │ │ (시스템 관리자) │ ││
│ │ │ • Controller와 DB 생명주기 관리 │ ││
│ │ │ • 보호 정책 적용 │ ││
│ │ │ • 자동 복구 기능 │ ││
│ │ └──┬─────────────────────────────────────────────┘ ││
│ │ │ manages & protects ││
│ │ ▼ ││
│ │ ┌─────────────────┐ ┌─────────────────────────┐ ││
│ │ │ MultiNic │ │ MariaDB │ ││
│ │ │ Controller │◄──►│ (Protected) │ ││
│ │ │ (Protected) │ │ • StatefulSet │ ││
│ │ │ • CRD 처리 │ │ • 영속 스토리지 │ ││
│ │ │ • OpenStack 연동│ │ • 자동 백업 │ ││
│ │ │ • 메트릭 수집 │ │ │ ││
│ │ └─────────────────┘ └─────────────────────────┘ ││
│ └─────────────────────────────────────────────────────┘│
└───────────────────┬─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ OpenStack │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Nova │ │ Neutron │ │
│ │ (Compute) │ │ (Network) │ │
│ │ • VM 관리 │ │ • 서브넷 관리 │ │
│ │ • 인터페이스 │ │ • 네트워크 정책 │ │
│ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────┘
- Kubernetes: v1.19+
- Go: 1.24+
- OpenStack: Nova + Neutron API 접근
- MariaDB: 10.3+ (내부 배포 또는 외부)
# 저장소 클론
git clone https://101.202.40.5:30000/tgkim/multinic.git
cd multinic
# Operator 자동 배포 (권장)
./MultiNic/deploy-operator.sh
# 또는 수동 배포
make -C MultiNic install
make -C MultiNic deploy IMG=multinic:v1alpha1# MultiNicOperator CR을 통한 시스템 설정
kubectl apply -f - <<EOF
apiVersion: multinic.example.com/v1alpha1
kind: MultiNicOperator
metadata:
name: production-system
namespace: multinic-system
spec:
controller:
image: multinic:v1alpha1
replicas: 2
database:
enabled: true
storageSize: "20Gi"
openstack:
identityEndpoint: "http://110.0.0.101:5000/v3"
networkEndpoint: "http://110.0.0.101:9696/v2.0"
computeEndpoint: "http://110.0.0.101:8774/v2.1"
protection:
enableMutationPrevention: true
enableAutoRecovery: true
EOF# OpenstackConfig 리소스 생성
kubectl apply -f - <<EOF
apiVersion: multinic.example.com/v1alpha1
kind: OpenstackConfig
metadata:
name: test-config
spec:
vmName: "test-vm"
subnetName: "k8s-subnet"
credentials:
authURL: "http://110.0.0.101:5000"
username: "admin"
password: "admin"
projectID: "your-project-id"
domainName: "Default"
EOF# 시스템 상태 확인
kubectl get multinicoperator -n multinic-system
kubectl get pods -n multinic-system
# 메트릭 확인
curl http://localhost:8082/metrics
# 로그 확인
kubectl logs -f deployment/multinic-controller -n multinic-system| 문서 | 설명 |
|---|---|
| 상세 README | 전체 기능, API 레퍼런스, 고급 설정 |
| 아키텍처 가이드 | 시스템 설계 및 구조 설명 |
| 배포 가이드 | 프로덕션 배포 모범 사례 |
| 개발자 가이드 | 로컬 개발 환경 설정 |
# 시스템 상태 확인
kubectl get multinicoperator -n multinic-system
# 설정 변경
kubectl edit multinicoperator production-system -n multinic-system
# 로그 확인
kubectl logs -f deployment/multinic-operator -n multinic-system
# 시스템 정리
./MultiNic/cleanup-operator.sh- 🔐 RBAC: 역할 기반 접근 제어 및 최소 권한 원칙
- 🛡️ ValidatingWebhook: 시스템 무결성 보호
- 🔒 암호화: 데이터베이스 인증 정보 암호화
- 🚫 네트워크 정책: Pod 간 통신 제한
multinic_operator_reconcile_total: Operator reconcile 횟수multinic_openstack_request_duration_seconds: OpenStack API 지연시간multinic_database_operation_duration_seconds: DB 작업 지연시간multinic_active_db_connections: 활성 DB 연결 수
/healthz: 전체 시스템 상태/readyz: 준비 상태 확인/metrics: Prometheus 메트릭
- Fork 이 저장소
- Feature 브랜치 생성 (
git checkout -b feature/amazing-feature) - 커밋 (
git commit -m 'Add amazing feature') - 푸시 (
git push origin feature/amazing-feature) - Pull Request 열기
🎯 MultiNic으로 Kubernetes와 OpenStack 간의 완벽한 네트워크 통합을 경험해보세요!
make docker-build CONTAINER_TOOL=nerdctl
make build-installer