Решил ограничить роли на своем сервере мониторинга путем создания контейнеров, создавать отдельные виртуальные машины под каждый сервис посчитал излишним. Да и давно хотелось попробовать виртуализацию на уровне ядра. В начале хотел использовать OpenVZ, но потом склонился к LXC, как более перспективному.
Установка очень проста:
sudo apt-get install lxc lxctl uuid btrfs-tools
Проверить настройки LXC можно командой
lxc-checkconfig
Далее создаем контейнер с предустановленной Ubuntu
sudo /usr/bin/lxc-create -n UBUNTU -t ubuntu
Программа скачивает образ с оф сайта, минут через 10-15 появится сообщение, что все готово.
Для запуска контейнера необходимо сделать
sudo /usr/bin/lxc-start -n UBUNTU
Логин: ubuntu , пароль: ubuntu .
И попадаем в контейнер.
Теперь надо настроить сеть, чтобы иметь возможность удаленно заходить на свою среду. Изначально, так сказать из коробки, сеть у меня заработала, контейнер оказался за NAT'ом и получил адрес из сети 10.0.3.0/24 и добраться до него можно было лишь с хост-машины. Наша цель включить его в общую сеть.
Информации нормальной пока не нашел, так что вопрос остается открытым. Вопрос удалось решить через проброс портов натом, решается все в 3 строчки:
iptables -t nat -A PREROUTING --dst EXTERNAL_INT -p tcp --dport 9002 -j DNAT --to-destination 10.0.3.229:80
RSYSLOG
iptables -t nat -A PREROUTING --dst EXTERNAL_INT -p tcp --dport 9003 -j DNAT --to-destination 10.0.3.83:80
iptables -t nat -A PREROUTING --dst EXTERNAL_INT -p udp --dport 514 -j DNAT --to-destination 10.0.3.83
Последняя строчка делает проброс для логов syslog-сервера, которые получаю на 514 порт по udp.
Так же, чтобы у контейнеров была связь с внешним миром надо настроить NAT:
sudo iptables -A FORWARD -i eth0 -o lxcbr0 -s 10.0.3.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADEгде eth0 - внешний интерфейс, lxcbr0 - внутренний интерфейс, 10.0.3.0/24 внутренняя сеть
Для активизации форвардинга между интерфейсами следует добавить
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"и отредактировать sysctl.conf
sudo nano /etc/sysctl.confдобавив в него две строчки:
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.all.forwarding=1Сохраним текущие настройки:
sudo sh -c "iptables-save > /etc/iptables.up.rules"И добавим в автозагрузку, для чего отредактируем файл /etc/network/inerfaces, добавив в раздел auto eth0 строку
pre-up iptables-restore < /etc/iptables.up.rulesВот и все, теперь на контейнеры можно попадать через external_IP:PORT.
Полезные команды:
lxc-list - просмотр всех контейнеров в системе и их состояний
lxc-destroy -n NAME - уничтожение контейнера
lxc-shutdown -n NAME - корректное выключение контейнера
iptables -t nat -L - список правил iptables
iptables -F - очистка iptablesДля удаления:
iptables -L INPUT --line-numbersiptables -D INPUT номерiptables -t nat -L POSTROUTING --line-numbers iptables -t nat -D POSTROUTING номер
Комментариев нет:
Отправить комментарий