Данная библотека предназначена для описания и запуска виртуальных сетей из Docker-контейнеров с помощью скриптов написанных на Python.
- Для работы L3NS необходим Docker (https://docs.docker.com/engine/install/)
- Для с Docker и L3NS без sudo нужна дополнительнпя настройка (https://docs.docker.com/engine/install/linux-postinstall/)
pip3 install l3ns
В папке examples представлены примеры использования библиотеки. Для того, чтобы получить общее представление о библиотеке лучше всего подходит этот пример.
from l3ns.ldc import DockerNode
from l3ns import defaults
n1 = DockerNode('test1', image='alpine', command='tail -f /dev/null')
n2 = DockerNode('test2', image='alpine', command='tail -f /dev/null')
n1.connect_to(n2)
print(n1.get_ip())
print(n2.get_ip())
defaults.network.start(interactive=True)
Запустить скрипт можно с помощью python3
.
# python3 basic_docker_lab.py
10.0.0.1
10.0.0.2
В ходе работы скрипта docker создаст два контейнера (test1
и test2
) из docker-образа alpine
,
в которых будет запущена команда tail -f /dev/null
. Это команда не делает ничего
и позволяет контейнеру работать неограниченное время до ручного завершения.
Оба контейнера будут подключены к одной подсети, а их IP-адреса были выведены в ходе работы скрипта.
Вы можете подтвердить это запустив ping
в любом из контейнеров:
docker exec -it node1 ping 10.0.0.2
Если вы увидете оттклик, значит IP-пакеты могут свободно перемещатся между узлами.
Работа L3NS построена вокруг трех типов объектов - Node
(узел эмулируемой сети), Subnet
(IP-подсеть эмулируемой сети),
Network
(отдельная эмулируемая сеть, локальная - LAN, или глобальная - WAN). Все подсети принадлежат одной сети,
узлы могут принадлежать одной глобальной сети и нескольким локальным.
L3NS предоставляет несколько реализаций узлов, подсетей и сетей, которые отличаются друг от друга сферой применения, но предоставляют одинаковый API. Абстрактные классы, описываюшие общий API находятся в подмодуле l3ns.base. На данный момент L3NS предоставляет две реализации: l3ns.ldc (Local Docker Container) и l3ns.cluster.
- Всё запускается от рута
- У рута должен быть доступ без пароля на руты всех узлов кластера
- wg
- /tmp/l3ns
chcp 65001
set PYTHONIOENCODING=utf-8
pdoc --pdf l3ns >> test.md