Lxc: Difference between revisions
Line 215: | Line 215: | ||
Tulemuste kontrollimiseks saab kasutada käsku: | Tulemuste kontrollimiseks saab kasutada käsku: | ||
brctl show | brctl show | ||
väljundist näeme, et masinad on uue silla küljes ja ka füüsiline liides(ens3) | väljundist näeme, et masinad on uue silla küljes ja ka füüsiline liides(ens3) ka: | ||
bridge name bridge id STP enabled interfaces | bridge name bridge id STP enabled interfaces | ||
br0 8000.525400c464f5 no ens3 | br0 8000.525400c464f5 no ens3 |
Revision as of 17:12, 19 December 2016
Sissejuhatus
Linuxi konteinerid ehk Linux Conteiners(LXC) on tehnoloogia mis kasutab Linuxi tuuma control groups(cgroups) funktsionaalsust, mis võimaldab jooksutada mitut isoleeritut Linuxi operatsioonisüsteemi, host masinas ühe jagatud kerneli peal. Lihtsamalt seletades jagab ühe arvuti resursse mitme konteineri vahel ja kasutatakse ühist kernelit. Resursside jagamise eest vastutabki control groupsi funktsionaalsus kernelis. Namespace selle eest, et konteinerid oleksid ükteisest eraldatud, ühe konteineri seest ei saaks ligi teise teenustele. LXC on kasutatav alates kernelist 2.6.24.[1] NB! selle juhendi järgi mitte installida tähtsaid teenuseid ja masinaid, kuna ei ole turvalisusele palju rõhku pandud, õpetus on mõledud juur kasutaja alt jooksutamiseks ja rohkem konteinerite turvustamiseks
Taust
Näide, kus masinas jookseb mitu konteinerit ja neis on erinevad teenused. Teenused on ära jagatud konteinerite peale nt: wiki, git, pastebin, proxy server.
|-lvmetad |-lxc-autostart---systemd-+-5*[agetty] | |-cron | |-dhclient | |-mysqld---27*[{mysqld}] | |-rsyslogd-+-{in:imklog} | | |-{in:imuxsock} | | `-{rs:main Q:Reg} | `-systemd-journal |-lxc-autostart---systemd-+-5*[agetty] | |-cron | |-dbus-daemon | |-dhclient | |-gogs---9*[{gogs}] | |-nginx---2*[nginx] | |-postgres---7*[postgres] | |-rsyslogd-+-{in:imklog} | | |-{in:imuxsock} | | |-{rs:action 10 qu} | | `-{rs:main Q:Reg} | |-sshd---sshd---sshd | |-systemd-journal | `-systemd-logind |-lxc-autostart---systemd-+-5*[agetty] | |-apache2---6*[apache2] | |-cron | |-dbus-daemon | |-dhclient | |-mysqld---34*[{mysqld}] | |-php-fpm7.0---2*[php-fpm7.0] | |-rsyslogd-+-{in:imklog} | | |-{in:imuxsock} | | |-{rs:action 10 qu} | | `-{rs:main Q:Reg} | |-sshd | |-systemd-journal | `-systemd-logind |-lxc-autostart---systemd-+-5*[agetty] | |-apache2---5*[apache2] | |-cron | |-dbus-daemon | |-dhclient | |-logger | |-mysqld_safe-+-logger | | `-mysqld---23*[{mysqld}] | |-rsyslogd-+-{in:imklog} | | |-{in:imuxsock} | | |-{rs:action 10 qu} | | `-{rs:main Q:Reg} | |-sshd | |-systemd-journal | `-systemd-logind |-lxc-autostart---systemd-+-5*[agetty] | |-cron | |-dbus-daemon | |-dhclient | |-gunicorn---gunicorn | |-nginx---2*[nginx] | |-nrpe | |-rsyslogd-+-{in:imklog} | | |-{in:imuxsock} | | |-{rs:action 10 qu} | | `-{rs:main Q:Reg} | |-sshd | |-systemd-journal | `-systemd-logind |-lxc-autostart---systemd-+-5*[agetty] | |-cron | |-dbus-daemon | |-dhclient | |-nginx---2*[nginx] | |-rsyslogd-+-{in:imklog} | | |-{in:imuxsock} | | |-{rs:action 0 que} | | `-{rs:main Q:Reg} | |-systemd-journal | `-systemd-logind |-lxcfs---10*[{lxcfs}] |-mdadm
Kindlasti tähelepanu tõmmata sellele, et mis teenused juba vaikimisi töötavad nagu näiteks ssh server.
Masinate juurfailisüsteem asub vaikimis kaustas.
/var/lib/lxc/masinanini
Installitud masinate puhver asub kaustas /var/chache/lxc/ Seda kasutatakse siis, kui luuakse sama distributsiooniga konteinerid, siis pole vaja uuesti uut konteinerit seadistada vaid tõmmatakse vajalikud failid puhvrist.
Vajalikumad käsud
lxc-create - tehakse uus konteiner lxc-start - käivitatakse konteiner lxc-console - ühendab konteineris oleva masina terminaliga. lxc-attach - alustab protsessi konteiner masinas, kui ühtegi parameetrit juurde ei anta, siis võetakse host masina konsool ja ühendatakse see konteineriga. Näiteks oled host masinas juurkasutajaga sisse logitud, siis tuleb ette juurkasutaja konsool ka konteineris. lxc-stop - sulgeb masina
Seadistamine
Paigaldamine
Installime linux konteineri ja mallid millega teha konteinereid.
apt-get install lxc lxc-templates bridge-utils
Konteinerite tegemine
lxc-create -n test -t ubuntu -- -r xenial -n masina nimi -t Millise malli põhjal tahad teha -- malli seadistused -r väljalaske kood nimetus Näha milliseid seadistusi mall toetab kasutada käsku lxc-create -t MALL -h
Haldamine ja seadistamine
Konteineri kävitaimnine
lxc-start -n test -d
Konteineriga on võimalik ühendda kahte moodi. Seda on mugav kasutada siis, kui konteinereid tehakse juur kasutajaga, sest siis võetakse konteineris kohe juur kasutaja konsool ette. Kui parameetried pole kaasa antud siis käivitatakse hetke konsool konteineris. Näiteks, kui kasutada käsku lxc-attach -n test nano, siis käivitatakse konteineris nano ja fail salvestatakse konteinerisse.
lxc-attach -n test
või, kus võetakse ette konteineri konsool ja tuleb kasutajaga sisselogida.
lxc-console -n test
Nimekiri konteineritest ja mis seisus konteinerid on. Võtmega f saab ilusa tabeli.
lxc-ls -f
LibreNms RUNNING 1 - 172.16.2.106 fd43:5a19:3963:0:216:3eff:fed0:db66 git-service RUNNING 1 - 172.16.2.171 fd43:5a19:3963:0:216:3eff:fe7f:1d7b mediaWiki RUNNING 1 - 172.16.2.30 fd43:5a19:3963:0:216:3eff:feaa:49d7 ownCloud RUNNING 1 - 172.16.2.240 fd43:5a19:3963:0:216:3eff:fe4e:ea58 pasteBun RUNNING 1 - 172.16.2.20 fd43:5a19:3963:0:216:3eff:fe56:cd2f proxy RUNNING 1 - 172.16.2.100 fd43:5a19:3963:0:216:3eff:feb5:4e8b test STOPPED 1 - - -
Masinate sulgemiseks kasutada käsku.
lxc-stop -n test -r,--reboot teeb restardi. -k,--kill masin suletakse jõuga, ei tehta korraliku sulgemist.
Malli seaded
Vaikimisi malli seaded asuvad failis. Need seadistused rakenduvad uutele konteineritele mis tehakse, näiteks kui tahad, et masin kasutaks vaikimis teist võrguliidest, siis muudad liidese ära.
/etc/lxc/default.conf
Lisades rea
lxc.start.auto = 1
Läheb konteiner automaatselt tööle, kui host masin on ka tööle läinud.
Iga masina seaded asuvad eraldi failis
/var/lib/lxc/masinanimi/config
Mallid asuvad kaustas:
/usr/share/lxc/templates/
Vaikimis tuleb kaasa erinevate linuxite mallid.
lxc-alpine lxc-centos lxc-fedora lxc-oracle lxc-sshd lxc-altlinux lxc-cirros lxc-gentoo lxc-plamo lxc-ubuntu lxc-archlinux lxc-debian lxc-openmandriva lxc-slackware lxc-ubuntu-cloud lxc-busybox lxc-download lxc-opensuse lxc-sparclinux
Võrgu seadistamine
Vaikimisi tehakse uus sild nimega lxcbr0, kuhu külge tulevad konteinerite liidesed. Kus töötab oma dhcp server ja dns kirjed saadakse host masinast. Iga konteineri kohta tekib ka uus võrguliides nimega veth******.
Dhcp seadete fail asub:
/etc/default/lxc-net
Siin on vaikimisi faili sisu, kui tahate muuta dhcp seadeid, siis siit saab muuta.
# This file is auto-generated by lxc.postinst if it does not # exist. Customizations will not be overridden. # Leave USE_LXC_BRIDGE as "true" if you want to use lxcbr0 for your # containers. Set to "false" if you'll use virbr0 or another existing # bridge, or mavlan to your host's NIC. USE_LXC_BRIDGE="true" # If you change the LXC_BRIDGE to something other than lxcbr0, then # you will also need to update your /etc/lxc/default.conf as well as the # configuration (/var/lib/lxc/<container>/config) for any containers # already created using the default config to reflect the new bridge # name. # If you have the dnsmasq daemon installed, you'll also have to update # /etc/dnsmasq.d/lxc and restart the system wide dnsmasq daemon. LXC_BRIDGE="lxcbr0" LXC_ADDR="10.0.3.1" LXC_NETMASK="255.255.255.0" LXC_NETWORK="10.0.3.0/24" LXC_DHCP_RANGE="10.0.3.2,10.0.3.254" LXC_DHCP_MAX="253"
Selleks, et saaksime konteineritele anda ka sisevõrgu ip, teeme host masina uue võrgusilla mis on kokku sillatud füüsilise võrgu liidesega.
Selleks on vaja kindlasti installida järgnev pakett.
apt install bridge-utils
Teeme vajalikud muudatused failis /etc/network/interfaces[2]
auto lo iface lo inet loopback #Kindlasti tähelepanu pöörata eth0 liidesele, neid nimesid enam ei kasutata. auto br0 iface br0 inet dhcp # Lisa füüsiline eth0 silla koosseisu bridge_ports eth0 # Eemalda võrguliidese definitsioon füüsilise võrguliidese jaoks: #auto eth0 #iface eth0 inet ...
Kui uus võrgusild on valmis, siis tuleb olemasolevad konteinerid sinna ühendada, selleks muuta faili /var/lib/lxc/masinanimi/config.
lxc.network.link=br0
ja kui tahame, et uued masinad ka saaksid ühendatud, siis failis /etc/lxc/default.conf muudame järgneva rea:
lxc.network.link=br0
Selleks, et muutused jõustuksid tuleb teha konteinteritele restart. Tulemuste kontrollimiseks saab kasutada käsku:
brctl show
väljundist näeme, et masinad on uue silla küljes ja ka füüsiline liides(ens3) ka:
bridge name bridge id STP enabled interfaces br0 8000.525400c464f5 no ens3 vethH0QBCN vethH42CB7 vethK8N248 vethS2KUOK vethX0K05X vethY7QYSW lxcbr0 8000.000000000000 no
lxc-ls -f käsuga saab kiiresti üle vaadata ka ip aadressid.
Turvalisus
Väga oluline on meeles pidada, et konteineri turvalisusele peab sama palju tähelepanu pöörama, kui eraldiseisvale füüsilisele masinale. Konteineris olevat tarkvara peab ka uuendama, suhtumine et mul asjad jooksevad konteineris las murravad sisse on väga vale suhtumine.
Huvtavad lingid, videod
Postitan siia lehed kust veel infot saab
https://www.stgraber.org/ - Stéphane Graber's blog, kes on Linuxi konteinerite põhi tegijaid.
https://linuxcontainers.org/lxc/getting-started/ kuidas teha konteinereid tava kasutaja alla, ehk unprivileged conteiners ja kuidas on need turvalisemad.
https://www.youtube.com/watch?v=2EwFkOrZ7I8 - Videod kuidas seadistada lXC võrku.