Containerlab은 무엇이고 기존의 구축되어있는 PNetLab과 다른 점은 무엇일지 알아보는 시간을 가짐.
해당 문서는 다음 내용으로 구성함.
- Containeralab이란?
- 설치/환경 구성
- 간단한 토폴로지 작성 및 배포 예제
Containerlab이란?
- 컨테이너화된 Network Operation System(NOS) 가 많아짐에 따라 사용자가 다양한 토폴로지를 쉽게 구성하려는 수요가 생김
- 하지만 docker-compose와 같은 컨테이너 오케스트레이션 도구는 네트워크 토폴로지 정의에는 적절하지 않음
- Containerlab은 컨테이너 기반 네트워킹 실험을 오케스트레이션 및 관리하기 위한 CLI 제공
- 사용자의 선택에 따른 실험 토폴로지 생성을 위해 컨테이너 간 가상 배선을 구축하며, 생명주기를 관리함
- 다양한 네트워크 운영체제를 중점으로 컨테이너화 되어 있음
- vrnetlab 또는 boxen 통합을 통해 가상 머신 기반 라우터도 실행 가능
결론: 쉽게 Network 환경을 실험하고 구성하기 위해서 개발된 컨테이너 기반 툴
자세한 내용은 링크 참조
1-1 PNetLab이랑 차이점?
2 설치/환경 구성
- 실행 환경 마다 환경이 다르니 설치는 링크 참조
- 게시글 작성자는 우분투 24 LTS를 기반으로 함
3 간단한 토폴로지 작성 및 배포 예제
- Nokia의 SR Linux 2대를 연결하는 예제
- yml 파일 생성 후 작성
~/Project/example_1 $ touch srl01.clab.yml
... yaml 파일 작성...
~/Project/example_1 cat srl01.clab.yml
name: srl01
topology:
kinds:
srl:
image: ghcr.io/nokia/srlinux
nodes:
srl1:
kind: srl
srl2:
kind: srl
links:
- endpoints: ["srl1:e1-1", "srl2:e1-1"]
- 코드의 각 내용은 이렇다
- name
- 해당 Lab 프로젝트의 고유 이름
- 배포 시 생성되는 컨테이너 이름의 접두사로서 사용됨
- topology
- 네트워크 구성 요소(노드, 링크, 종류 등) 을 정의하는 최상위 계층
- kinds:
- 노드의 공통 속성을 미리 정의하는 템플릿 영역
- srl: 사용자가 지정한 kind의 별칭
- image: ghcr.io/nokia/srlinux: srl 종류의 노드가 사용한 도커 이미지 경로임
- nodes
- 실제 생성할 네트워크 장비의 컨테이너 인스턴스를 정의함
- srl1, srl2: 각 노드의 호스트네임
- kind: srl 위 영역에서 정의한 템플릿을 상속받아 이 노드를 생성함
- links
- 노드간의 물리적인 연결(케이블링) 을 정의함, 즉 L1연결을 가상화한 것
- endpoints: 연결할 두 지점 리스트 나열
- srl1:e1-1: srl1 노드의 e1-1 인터페이스를 의미함
- yaml 푤기에는 e1-1이지만 SR Linux의 내부 CLI 표기는 interface ethernet-1/1 로 매핑됨
- name
3-1 배포
~/Project/example_1 $ sudo containerlab deploy -t srl01.clab.yml
[sudo] OOOOO 암호:
14:24:37 INFO Containerlab started version=0.72.0
14:24:37 INFO Parsing & checking topology file=srl01.clab.yml
14:24:37 INFO Creating docker network name=clab IPv4 subnet=172.20.20.0/24 IPv6 subnet=3fff:172:20:20::/64 MTU=0
14:24:37 INFO Creating lab directory path=/home/kisti/Project/example_1/clab-srl01
14:24:37 INFO Creating container name=srl1
14:24:37 INFO Creating container name=srl2
14:24:38 INFO Running postdeploy actions kind=srl node=srl2
14:24:38 INFO Created link: srl1:e1-1 ▪┄┄▪ srl2:e1-1
14:24:38 INFO Running postdeploy actions kind=srl node=srl1
14:24:52 INFO Adding host entries path=/etc/hosts
14:24:52 INFO Adding SSH config for nodes path=/etc/ssh/ssh_config.d/clab-srl01.conf
╭─────────────────┬───────────────────────┬─────────┬───────────────────╮
│ Name │ Kind/Image │ State │ IPv4/6 Address │
├─────────────────┼───────────────────────┼─────────┼───────────────────┤
│ clab-srl01-srl1 │ srl │ running │ 172.20.20.3 │
│ │ ghcr.io/nokia/srlinux │ │ 3fff:172:20:20::3 │
├─────────────────┼───────────────────────┼─────────┼───────────────────┤
│ clab-srl01-srl2 │ srl │ running │ 172.20.20.2 │
│ │ ghcr.io/nokia/srlinux │ │ 3fff:172:20:20::2 │
╰─────────────────┴───────────────────────┴─────────┴───────────────────╯
- sudo containerlab deploy -t {파일명} 을 입력하면 배포를 시작함
- sudo containerlab inspect -t s {파일명}을 입력하면 docker 컨테이너와 매핑된 포트를 확인 가능함.
sudo containerlab inspect -t srl01.clab.yml
14:27:00 INFO Parsing & checking topology file=srl01.clab.yml
╭─────────────────┬───────────────────────┬─────────┬───────────────────╮
│ Name │ Kind/Image │ State │ IPv4/6 Address │
├─────────────────┼───────────────────────┼─────────┼───────────────────┤
│ clab-srl01-srl1 │ srl │ running │ 172.20.20.3 │
│ │ ghcr.io/nokia/srlinux │ │ 3fff:172:20:20::3 │
├─────────────────┼───────────────────────┼─────────┼───────────────────┤
│ clab-srl01-srl2 │ srl │ running │ 172.20.20.2 │
│ │ ghcr.io/nokia/srlinux │ │ 3fff:172:20:20::2 │
╰─────────────────┴───────────────────────┴─────────┴───────────────────╯
~/Project/example_1 $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d05673ea39c ghcr.io/nokia/srlinux "/tini -- /usr/local…" 3 minutes ago Up 3 minutes clab-srl01-srl1
45eacb8fd891 ghcr.io/nokia/srlinux "/tini -- /usr/local…" 3 minutes ago Up 3 minutes clab-srl01-srl2
- 토폴로지 정의에 대한 더 자세한 내용은 링크에서 더 참고 가능함
3-2 Lab 지우기
- Lab 지우기 위해서는 sudo containerlab destroy 를 사용
------
환경 구성후 동적 라우팅을 다음에 작성해야겠다.
별외로 CISCO NSO랑 붙여보려고 CISCO ios, iosxr를 컨테이너 만드려고 했는데 이미지들을 각자 홈페이지에서 받아야하더라,,,, 근데 nokia, juniper는 뭐 약관만 동의하면 공짜로 받게해주는데 cisco 는 돈내야하는 것 같다... 일단은 아쉬운데로 붙일 수 있는 것들부터 붙여봐야겠다...
'개발 관련 공부' 카테고리의 다른 글
| MCP Tutorial (0) | 2025.04.11 |
|---|---|
| mcp-image-reader 설치하며 겪었던 소소한 문제 (1) | 2025.04.03 |
| Ollama로 이것저것 해보기 (0) | 2025.02.13 |