본문 바로가기

개발 관련 공부

Containerlab 개요

Containerlab은 무엇이고 기존의 구축되어있는 PNetLab과 다른 점은 무엇일지 알아보는 시간을 가짐.

해당 문서는 다음 내용으로 구성함.

  1. Containeralab이란?
  2. 설치/환경 구성
  3. 간단한 토폴로지  작성 및 배포 예제

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 로 매핑됨

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